1.使用步骤
- 创建一个mapper接口的实现类,继承SqlSessionDaoSupport且同时实现mapper接口
package com.thhh.mapper; import com.thhh.pojo.User; import org.mybatis.spring.support.SqlSessionDaoSupport; import java.util.List; public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper { @Override public List<User> queryUserList() { return getSqlSession().getMapper(UserMapper.class).queryUserList(); } }
如此看来,方式2和方式1本质上都是一样的,唯一的区别就是方式2封装了获取sqlsession对象的操作,直接在java代码中获取到了;而方式1需要将sqlsession作为私有属性,并通过通过spring调用对应的set方法来获取sqlsession对象
另一个区别显然就是我们不用在spring配置文件中为装配这个类设置sqlsession属性,但是由于SqlSessionDaoSupport父类需要一个SqlSessionFactory属性,所以我们从原来配置sqlsession属性和SqlSessionFactory属性(2个)变成了现在配置SqlSessionFactory属性(1个)
2.配置spring配置文件
<!--方式2配置sqlsession-->
<bean id="userMapperImpl2" class="com.thhh.mapper.UserMapperImpl2">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
2.对比两种方式
在上面的解析中我们已经说到了,其实两种方式的本质都是一样的,区别就在于怎么获取sqlsession对象,spring整合mybatis的时候内置mybatis的事实是没有改变的
其实我们通过SqlSessionDaoSupport的源码可以发现,方式1和2本质没有区别,只是方式2封装了获取sqlsession对象的步骤,其他的一模一样;因为有了方式2的封装,我们的实现类可以更加简单,只需要一句返回值就可以实现,spring的配置文件也更加简单,只需要配置必须的sqlSessionFactory的bean映射即可使用
只需要配置sqlSessionFactory的原因是因为sqlsession对象的获取被SqlSessionDaoSupport封装起来了,即我们不需要通过spring容器就能获取到sqlsession对象,所以spring中bean的装配从两个变成了一个
所以在使用上我们更加推荐使用方式2