赞
踩
上文学习了mybatis在启动的时候都做了什么操作,这里继续往下学习。
每一个会话就有一个SqlSession,SqlSession是和数据库沟通的桥梁,它提供了一些操作数据库的相关命令以及事务的相关处理,一些增删改查、获取连接配置信息、关闭会话、事务提交回滚等等,使用方法如 Person p = session.selectOne("cn.mybatis.mydemo.mapper.PersonMapper.selectPersonById", 1);
不过官方不推荐这样的使用方式,推荐使用如下的调用方式:
// 获得mapper接口的代理对象
PersonMapper pm = session.getMapper(PersonMapper.class);
// 直接调用接口的方法,查询id为1的Peson数据
Person p = pm.selectPersonById(1);
前面学习到了,创建了SqlSessionFactory,默认创建的就是 DefaultSqlSessionFactory
那么这里面都是些啥呢?可以看到提供了很多的openSession方法都是返回SqlSession对象的,也就是SqlSessionFactory的openSession创建了SqlSession对象。
通过上面的源码截图可以看到,openSession下面有两种实现:
通过上文说的初始化之后存储数据的configuration获取一下环境信息;然后利用环境信息获取一下事务工厂;使用事务工厂创建事务;然后就可以创建一个执行器;之后就可以创建一个SqlSession对象。
这些都是啥,先思考下:如果我要去钓鱼,我会有那几个步骤呢?
假设:水塘,就是存放数据的数据库。鱼,就是要从数据库查询的数据。钓鱼管理规定应对方案,就是事务控制。钓鱼工具,就是可以实现具体交互逻辑的执行器。有了这些,就可以创建一个可以对数据库操作的对象SqlSession。
这里的源码先不跟进去了,我大致看了下比较深,细节比较多,后面专门写,就简单对几个入参说明下吧
乍一看,好似和前面的没啥区别,其实不太一样,看我选中的地方,创建事务用的是Connection对象。也就是说,这个是已经有的连接中创建SqlSession,而上面那个则是从数据库连接池中创建SqlSession。
一样,源码先不跟进去了,说明下参数:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。