01_MyBatis和Spring整合之传统dao方式

mybatis整合spring - 图1A.整合思路
mybatis整合spring - 图2SqlSessionFactory对象应该放到spring容器中作为单例存在。
mybatis整合spring - 图3传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
mybatis整合spring - 图4mybatis整合spring - 图5Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
mybatis整合spring - 图6B.导入jar包
mybatis整合spring - 图7
C.传统dao方式
mybatis整合spring - 图8a.自定义接口IUserDao
mybatis整合spring - 图9b.自定义类实现IUserDao接口,继承SqlSessionDaoSupport类

  1. public class IUserDaoImpl extends SqlSessionDaoSupport implements IUserDao {
  2. @Override
  3. public List < User > selectUserList() {
  4. SqlSession sqlSession = getSqlSession();
  5. List < User > userList = sqlSession.selectList("selectUserList");
  6. return userList;
  7. }
  8. }
  1. ![](https://cdn.nlark.com/yuque/0/2020/png/8396355/1608258607523-7e09fc0e-7ab3-4052-b140-6986a86f5666.png#align=left&display=inline&height=19&margin=%5Bobject%20Object%5D&originHeight=19&originWidth=4&status=done&style=none&width=4)注意:此处的SqlSession不能close<br />![](https://cdn.nlark.com/yuque/0/2020/png/8396355/1608258603559-949d4c1e-b397-42da-b651-964576bb0fbb.png#align=left&display=inline&height=15&margin=%5Bobject%20Object%5D&originHeight=19&originWidth=5&status=done&style=none&width=4)c.配置IUserDaoImpl实例到Spring容器,配置参数sqlSessionFactory<br />![](https://cdn.nlark.com/yuque/0/2020/png/8396355/1608258604201-fa9e48ca-af2f-4876-9ff0-443c50ec14af.png#align=left&display=inline&height=15&margin=%5Bobject%20Object%5D&originHeight=19&originWidth=5&status=done&style=none&width=4)d.配置SqlSessionFactoryBean实例到Spring容器,配置参数dataSource,configLocation<br />![](https://cdn.nlark.com/yuque/0/2020/png/8396355/1608258603559-949d4c1e-b397-42da-b651-964576bb0fbb.png#align=left&display=inline&height=15&margin=%5Bobject%20Object%5D&originHeight=19&originWidth=5&status=done&style=none&width=4)e.配置dataSource实例到Spring容器,配置参数driverClass,jdbcUrl,user,password<br />![](https://cdn.nlark.com/yuque/0/2020/png/8396355/1608258604201-fa9e48ca-af2f-4876-9ff0-443c50ec14af.png#align=left&display=inline&height=15&margin=%5Bobject%20Object%5D&originHeight=19&originWidth=5&status=done&style=none&width=4)f.在SqlMapConfig.xml中加载IUserDao.xml
  1. <bean id="userDao" class="com.qzw.dao.IUserDaoImpl">
  2. <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
  3. </bean>
  4. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  5. <property name="configLocation" value="SqlMapConfig.xml"></property>
  6. <property name="dataSource" ref="dataSource" ></property>
  7. </bean>
  8. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  9. <property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
  10. <property name="jdbcUrl" value="jdbc:mysql:///test?serverTimezone=UTC"></property>
  11. <property name="user" value="root"></property>
  12. <property name="password" value="root"></property>
  13. </bean>

02_MyBatis和Spring整合之mapper映射方式

mybatis整合spring - 图10A.步骤
mybatis整合spring - 图11自定义接口IUserDao
mybatis整合spring - 图12定义IUserDao.xml
mybatis整合spring - 图13将IUserDao接口和IUserDao.xml放到IUserDao接口的包下
mybatis整合spring - 图14将MapperFactoryBean注入到spring容器,设置参数mapperInterface,sqlSessionFactory, 会将映射文件加载到spring中
mybatis整合spring - 图15将sqlSessinFactory注入到spring容器.设置参数configLocation,dataSource 将dataSource注入到spring容器,设置参数driverClass,jdbcUrl,user,password
mybatis整合spring - 图16B.代码实现

  1. <bean class="org.mybatis.spring.mapper.MapperFactoryBean">
  2. <property name="mapperInterface" value="com.qzw.dao.IUserDao"></property>
  3. <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
  4. </bean>
  5. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  6. <!‐‐<property name="configLocation" value="SqlMapConfig.xml"></property>‐‐>
  7. <property name="dataSource" ref="dataSource" ></property>
  8. </bean>
  9. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  10. <property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
  11. <property name="jdbcUrl" value="jdbc:mysql:///test?serverTimezone=UTC"></property>
  12. <property name="user" value="root"></property>
  13. <property name="password" value="root"></property>
  14. </bean>

mybatis整合spring - 图17C.存在的问题
mybatis整合spring - 图18如果使用上面这种方式进行整合,如果有很多个dao接口的话,那么就很麻烦,那么这个时候就采用包扫描的方式,一次性扫描多个dao接口

  1. <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  2. <property name="basePackage" value="com.qzw.dao"></property>
  3. <!‐‐ <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>‐‐>
  4. </bean>
  5. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  6. <property name="dataSource" ref="dataSource"></property>
  7. </bean>
  8. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
  9. <property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
  10. <property name="jdbcUrl" value="jdbc:mysql:///test?serverTimezone=UTC"></property>
  11. <property name="user" value="root"></property>
  12. <property name="password" value="root"></property>
  13. </bean>


mybatis整合spring - 图19注意:MapperScannerConfigurer可以不用配置sqlSessionFactory,它会自动去Spring扫描,如果有找到sqlSessionFactory,会自动注入。