1. 分析MyBatis:
MyBatis是通过SqlSessionFactory对象--------->产生SqlSession---------->产生Mapper-------->CRUD
2. 整合思路:
分析可得,MyBatis是通过SqlSessionFactory对象来操作数据库,
Spring整合MyBatis其实就是将MyBatis的SqlSessionFactory对象交给Spring去管理;
3. 整合步骤:
1. 在pom.xml文件中添加所依赖的jar包(根据项目需要进行添加!)
1.1 mybatis-spring.jar 1.6 spring-core.jar 2.1 commons-logging.jar
1.2 spring-tx.jar(事务) 1.7 spring-context.jar 2.2 commons-jdbc.jar
1.3 spring-jdbc.jar 1.8 spring-beans.jar 2.3 ojdbc.jar
1.4 spring-expression.jar 1.9 spring-aop.jar 2.4 mybatis.jar
1.5 spring-context-support.jar 2.0 spring-web.jar 2.5 log4j.jar 2.6 commons-pool.jar
4. 类---表(实体类);
5. MyBatis配置文件(config.xml);
6. 建立Mapper.xml文件,通过Mapper文件将【类----表】建立映射关系:
之前使用MyBatis:我们通过config.xml配置文件------>产生SqlSessionFactory对象;
现在我们整合的时候是通过Spring去管理SqlSessionFactory对象,因此产生SqlSessionFactory对象所需要的数据库信息不再放入config.xml,而需要放入Spring配置文件中去配置数据库信息;
7. 配置Spring配置文件(applicationContext.xml);
8. 使用Spring-MyBatis整合产物来开发程序:
目标:通过spring产生Mybatis最终操作需要的动态mapper对象(studentMapper)
8.1 Spring产生动态Mapper对象的方式:
1) DAO层实现类 继承SqlSessionDaoSupport类
注意!:SqlSessionDaoSupport类提供了一个对象属性SqlSession;(super.getSqlSession)
2) 将第一种方式的DAO层的实现类配置省略去掉(不是不需要写,是别人写过了,我们直接拿来使用)
注意!:直接使用Mybatis提供的mapper实现类MapperFactoryBean,它有个mapperInterface(属性name值)接口;
缺点:每个mapper都需要配置一次;
3) 优化第二种方式------->批量配置实现类
1.先指定批量产生哪个包中的mapper对象
2.MapperScannerConfigurer,它有个叫basePackage的set属性
3.批量产生mapper在springIOC中的id值,默认就是首字母小写的接口名
4.引入SqlSessionFactory的时候,name值变为sqlSessionFactoryBeanName,SqlSessionFactoryBeanName返回值是String类型,所以不使用ref,而是使用value去引入
总结:1.不管哪种方式,都依赖SqlSessionFactory!要注意引入!!!
2.一般对象类型引入用ref,其他用value(特殊情况除外!)