Mybatis入门与编码流程 2021-09-20

Mybatis 应用

1 Mybatis 入门与编码流程
2 mapper代理开发方式
3 全局配置文件
4 输入映射和输出映射
5 关联查询
6 延迟加载
7 动态SQL
8 Mybatis缓存



本节代码仅供理解,使用递进的方式说明Mybatis 的使用,理解Mybatis 的原理,看懂源码。

一、 Mybatis是什么

mybatis参考网址:http://www.mybatis.org/mybatis-3/zh/index.html
Github源码地址:https://github.com/mybatis/mybatis-3
MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎
所有的 JDBC代码和手动设置参数以及获取结果集,它可以使用简单的XML或注解来配置和映射SQL信
息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

1.1 Mybatis的由来

MyBatis 本是apache的一个开源项目iBatis。
2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
2013年11月迁移到Github。

1.2 ORM是什么

对象-关系映射(OBJECT/RELATIONALMAPPING,简称ORM),是随着面向对象的软件开发方法发展
而产生的。用来把对象模型表示的对象映射到基于SQL 的关系模型数据库结构中去。这样,我们在具体
的操作实体对象的时候,就不需要再去和复杂的 SQL 语句打交道,只需简单的操作实体对象的属性和
方法 。ORM 技术是在对象和关系之间提供了一条桥梁,前台的对象型数据和数据库中的关系型的数据
通过这个桥梁来相互转化。

1.3 ORM框架和MyBatis的区别

Mybatis VS Hibernate
性能: 高 vs 低
Sql灵活性: 高 vs 低
学习门槛: 低 vs 高
Sql配置文件: 全局配置文件、映射文件 vs 全局配置文件、映射文件
ORM 半自动化 vs 完全的自动化
数据库无关性 低 vs 高

二、编码流程

2.1 需求描述

1、根据用户id查询一个用户信息
2、根据用户名称模糊查询用户信息列表
3、添加用户

2.2 编码流程

  1. 编写全局配置文件:SqlMapConfig.xml (数据库配置)实际应用中与Spring整合后使用Spring 提供配置类。
  2. 映射文件:xxxMapper.xml (编写SQL 语句)
  3. 编写dao代码:xxxDao接口、xxxDaoImpl实现类 (编写mybatis API)
  4. POJO类 (传递参数和结果映射对象)
  5. 单元测试类

2.2.1 配置文件设置

编写全局配置文件:SqlMapConfig.xml ,其中加载对应的Mapper.xml 文件。

	<properties resource="phase01/db.properties"></properties>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${db.driver}" />
				<property name="url" value="${db.url}" />
				<property name="username" value="${db.username}" />
				<property name="password" value="${db.password}" />
			</dataSource>
		</environment>
	</environments>
	<!--加载Mapper文件-->
	<mappers>
		<mapper resource="phase01/UserMapper.xml" />
	</mappers>

2.2.2 SqlSession 接口

sqlSession.selectOne MyBatis 访问数据库相关接口,后续查看源码的入口。

public class UserDaoImpl implements UserDao {

    private SqlSessionFactory sqlSessionFactory;

    // 注入sqlSessionFactory
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public User findUserById(int id) {
        // sqlsessionFactory工厂类去创建sqlsession会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // sqlsession接口,开发人员使用它对数据库进行增删改查操作
        User user = sqlSession.selectOne("test.findUserById", id);
        return user;
    }

}

2.2.3 mapper 编写

SQL 语句写select标签内, 动态参数传入 #{ }, parameterType 是 参数的类型, 结果类型resultType。

	<!-- 注意事项: -->
	<!-- 1:如果parameterType为简单类型(基本类型+String类),#{}中的参数名称可以任意 -->
	<!-- 2:如果parameterType为POJO类型,#{}中的参数名称必须和POJO中的属性名称一致 -->
	<!-- 3:如果resultType为POJO类型,SELECT中的列名和POJO中的属性名称一致 -->
	<select id="findUserById" parameterType="int"
		resultType="com.kkb.mybatis.phase01.po.User">
		SELECT * FROM user WHERE id = #{id}
	</select>

2.2.4 测试类

/**
 * 测试入门案例
 * 
 * @author think
 *
 */
public class Test1 {

	private SqlSessionFactory sqlSessionFactory;

	@Before
	public void init() throws Exception{
		// 加载全局配置文件(同时把映射文件也加载了)
		String resource = "phase01/SqlMapConfig.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		// sqlsessionFactory需要通过sqlsessionFactoryBuilder读取全局配置文件信息之后
		// 构建者模式
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	@Test
	public void testFindUserById() {
		UserDao dao = new UserDaoImpl(sqlSessionFactory);
		User user = dao.findUserById(1);
		System.out.println(user);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值