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 {@Overridepublic List < User > selectUserList() {SqlSession sqlSession = getSqlSession();List < User > userList = sqlSession.selectList("selectUserList");return userList;}}
注意:此处的SqlSession不能close<br />c.配置IUserDaoImpl实例到Spring容器,配置参数sqlSessionFactory<br />d.配置SqlSessionFactoryBean实例到Spring容器,配置参数dataSource,configLocation<br />e.配置dataSource实例到Spring容器,配置参数driverClass,jdbcUrl,user,password<br />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,会自动注入。
