01_MyBatis和Spring整合之传统dao方式
A.整合思路
SqlSessionFactory对象应该放到spring容器中作为单例存在。
传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
B.导入jar包
C.传统dao方式
a.自定义接口IUserDao
b.自定义类实现IUserDao接口,继承SqlSessionDaoSupport类
public class IUserDaoImpl extends SqlSessionDaoSupport implements IUserDao {
@Override
public List < User > selectUserList() {
SqlSession sqlSession = getSqlSession();
List < User > userList = sqlSession.selectList("selectUserList");
return userList;
}
}
![](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
<bean id="userDao" class="com.qzw.dao.IUserDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="SqlMapConfig.xml"></property>
<property name="dataSource" ref="dataSource" ></property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///test?serverTimezone=UTC"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
02_MyBatis和Spring整合之mapper映射方式
A.步骤
自定义接口IUserDao
定义IUserDao.xml
将IUserDao接口和IUserDao.xml放到IUserDao接口的包下
将MapperFactoryBean注入到spring容器,设置参数mapperInterface,sqlSessionFactory, 会将映射文件加载到spring中
将sqlSessinFactory注入到spring容器.设置参数configLocation,dataSource 将dataSource注入到spring容器,设置参数driverClass,jdbcUrl,user,password
B.代码实现
<bean class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.qzw.dao.IUserDao"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!‐‐<property name="configLocation" value="SqlMapConfig.xml"></property>‐‐>
<property name="dataSource" ref="dataSource" ></property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///test?serverTimezone=UTC"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
C.存在的问题
如果使用上面这种方式进行整合,如果有很多个dao接口的话,那么就很麻烦,那么这个时候就采用包扫描的方式,一次性扫描多个dao接口
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.qzw.dao"></property>
<!‐‐ <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>‐‐>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql:///test?serverTimezone=UTC"></property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
</bean>
注意:MapperScannerConfigurer可以不用配置sqlSessionFactory,它会自动去Spring扫描,如果有找到sqlSessionFactory,会自动注入。