MyBatis原理解析

参考自:

MyBatis原理分析(通俗易懂)_Coder Wang-CSDN博客_mybatis原理

从源码一层一层进行分析,写得清晰易懂。我再这里就不赘述了,就写一下自己的大白话总结吧。

Mybatis的意义:

Mybatis存在的全部意义在于:将开发者从繁琐的JDBC API中解放出来,开发者不需要亲自去调用API去做:获取Connection,构造Statement,执行sql,然后将ResultSet放入结果对象中。这些Mybatis都做了,开发者只需要制订接口(也就说准备好元数据)即可,mybatis会根据这些必要的元数据转化为具体的JDBC操作,然后与数据库进行交互。

大概视图:

API方式:

public static void main(String[] args) {
		InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = factory.openSession();
		String name = "tom";
		List<User> list = 
 sqlSession.selectList("com.demo.mapper.UserMapper.getUserByName",params);
}

接口方式:

public static void main(String[] args) {
		//前三步都相同
		InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession sqlSession = factory.openSession();

		//这里不再调用SqlSession 的api,而是获得了接口对象,调用接口中的方法。
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
		List<User> list = mapper.getUserByName("tom");
}

初始化工作:

大概流程:

SqlSessionFactoryBuilder  -->  SqlSessionFactory  -->  SqlSession  -->  SqlSession执行CRUD

细化流程:

1、读取mybatis-config.xml配置文件,解析其内容为Configuration;

2、在SqlSessionFactoryBuilder中根据Configuration去创建SqlSessionFactory;

3、SqlSessionFacotry.openSession()构造SqlSession,指定了configuration, executor, autoCommit 等;

4、SqlSession用指定的executor去执行具体的CRUD操作。

执行SQL:

1、入参statement,parameter,根据statement在Configuration的mappedStatements中找到对应的MappedStatement;

2、MappedStatement根据parameter找到BoundSql;

3、获取connection,从dataSource中获取的connection,同时指定transactionIsolation, autoCommit ;

4、Connection.createStatement(),构造Statement();

5、Statement.execute(boundsql.getSql());

6、从Statement获取ResultSet,封装到结果对象中。

可以看到,其实底层调用的都是JDBC的API。

名词解释:

MappedStatement: 对应于mybatis-config.xml中的<Mappers>下的<Mapper>元素

BoundSql: 含有?的sql语句,以及parameters,以及parameterMappings

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值