【有书共读】《Spring源码深度解读》第八章myBatis
整合myBatis
myBatis是支持普通sql查询、存储过程和高级映射的优秀持久层框架。myBatis消除了几乎所有的jdbc代码和参数的手工设置以及结果集的检索。myBatis使用简单的xml或注解用于配置和原始映射,将接口和java的pojos映射成数据库中的记录。
一:myBatis独立使用
(1)建立PO。
用于对数据库中数据的映射,事程序员更关注与对java类的使用而不是数据库的操作。重点:必须要有无参构造方法,不然根据Mapper.xml中的配置,在查询数据库时,将不能反射构造出实例。
(2)建立mapper
数据库操作的映射文件,也就是常说的Dao,用于映射数据库的操作,可以通过配置文件指定方法对应的sql语句或者直接使用java提供的注解方式进行sql指定。
(3)建立配置文件
配置文件主要用于配置程序中可变性高的设置,一个偏大的程序一定会存在经常变化的变量,如果每次变化都要改变源码,那是非常糟糕的设计,所以避免不了使用配置文件,mybatis中的配置文件主要封装在configuration中。
(4)建立映射文件
对应于mybatis全局配置中的mappers配置属性,主要用于建立对应数据库操作接口的sql映射。Mybatis会将这里设定的SQL与对应的java接口相关联,以保证在mybatis中调用接口的时候会到数据库中执行相应的sql来简化开发。
(5)建立测试类
二:spring整合myBatis
(1)spring配置文件
配置文件是spring的核心,spring的所有操作也都是由配置文件开始。
(2)myBatis配置文件
可以将myBatis中的配置内容移到spring的配置文件中
(3)映射文件(保持不变)
(4)测试
三:源码分析
(一)SQLSessionFactory
在SQLSessionFactory这个类中,实现了两个重要的结口
(1)InitializingBean:实现此接口的bean会在初始化时调用afterPropertiesSet方法进行bean的初始化。
(2)FactoryBean:一旦某个bean实现此接口,那么通过getBean方法获取bean时其实就是获取getObject()返回的实例。
SqlSesseionFactoryBean的初始化:afterPropertiesSet()->buildSqlSessionFactory.
获取SqlSessionFactoryBean实例:getObject()方法。
(二)MapperFactoryBean的创建
在MapperFactoryBean中两个重要的接口InitializingBean和FactoryBean()。
(1) MapperFactoryBean的初始化
InitializingBean接口中:afterPropertiesSet()->checkDaoConfig()
(2) 获取MapperFactoryBean的实例
直接调用getObject()方法。