一、MyBatis四大核心对象
MyBatis完成一次数据库操作需要经过的步骤,如下:
- 1、加载配置文件
- 2、获取SqlSessionFactoryBuiler对象
- 3、通过SqlSessionFactoryBuiler和配置文件流来获取SqlSessionFactory对象
- 4、利用SqlSessionFactory对象来打开一个SqlSession
- 5、通过SqlSession来获得对应的Mapper对象
- 6、通过Mapper对象调用对应接口来查询数据库
从这些步骤我们可以看到,MyBatic完成一次数据库操作主要有4大核心对象:
SqlSessionFactoryBuiler,SqlSessionFactory,SqlSession、Mapper
SqlSessionFactory
SqlSessionFactory是一个接口,默认的实现类,主要是用来生成SqlSession对象,而SqlSession对象是需要不断被创建的,所以SqlSessionFactory是全局都存在的,也没有必要重复创建,所以这是一个单例对象。
SqlSessionFactory看名字就可以很容易想到,用到的是工厂设计模式。
SqlSessionFactory只有两个实现类:DefaultSqlSessionFactory和SqlSessionManager。
Mapper
Mapper是一个接口,没有任何实现类。主要作用就是用来映射Sql语句的接口,映射器的接口实例从SqlSession对象中获取,所以说Mapper实例作用域是和SqlSession相同或者更小。
Mapper实例的作用范围最好是保持在方法范围,否则会难以管理。Mapper接口的名称要和对应sql语句的xml文件同名,Mapper接口中定义的方法名称对应了xml文件中的语句id。
SqlSession
SqlSession是用来操作xml文件中我们写好的sql语句,每次操作数据库我们都需要一个SqlSession对象,SqlSession是用来和数据库中的事务进行对接的,所以SqlSession里面是包含了事务隔离级别等信息的。
SqlSession实例是线程不安全的,故最佳的请求范围是请求(request)或者方法(method)。
SqlSession也是一个接口,有两个实现类:DefaultSqlSession和SqlSessionManager。
SqlSessionFactoryBuiler
SqlSessionFactoryBuilder的唯一作用就是用来创建SqlSessionFactory,创建完成之后就不会用到它了,所以SqlSessionFactoryBuiler生命周期极短。
SqlSessionFactoryBuiler中提供了9个方法,返回的都是SqlSessionFactory对象。
SqlSessionFactoryBuiler内使用到了建造者模式,如果想了解建造者模式的可以点击这里。
四大核心对象生命周期
SqlSessionFactoryBuiler只需要在创建SqlSessionFactory对象的时候使用,创建完成之后即可被丢弃。
SqlSessionFactory全局唯一,是一个单例对象,但是需要全局存在。
SqlSession一般对应了一个request,
Mapper一般控制在方法内。
二、MyBatis四大内置对象
- ParameterHandler:处理SQL的参数对象
- ResultSetHandler:处理SQL的返回结果集
- StatementHandler:数据库的处理对象,用于执行SQL语句
- Executor:MyBatis的执行器,用于执行增删改查操作