Spring与MyBatis 整合时关于SqlSessionTemplate的用法和映射器的使用(MapperFactoryBean,MapperScannerConfigurer)

   本文主讲在spring与MyBatis 整合时关于SqlSessionTemplate的用法和映射器的使用

如若转载请注明出处,谢谢!https://mp.csdn.net/postedit/82257281

   首先要知道SqlSessionTemplate是来代替MyBatis中的 SqlSession所以在spring中应用SqlSessionTemplate,而不是SqlSession,

SqlSessionTemplate 怎么来的

  1 jar

   那么提供SqlSessionTemplate支持的jar 是mybatis-spring-1.2.0.jar

mybatis团队方便开发者在spring中集成使用MyBatis,专门开发的,说白了就是,有了这个jar可以在spring中用MyBatis  可以在GitHub上找到

  2  通过SqlSessionFactory实例构造注入到SqlSessionTemplate中可获得SqlSessionTemplate实例

 3但是SqlSessionFactory 又是来自注入数据源与MyBatis的文件获得的

   得到SQLSessionFactory代码如下:

 <!--配置数据源省略-->

 <!--配置SQLSessionFactoryBean-->

 <bean id =sqlSessionFactory class=org.mybatis.spring.SqlSessionFactoryBean>

<!--引入数据源-->

<property name=dataSource ref=dataSource/>

<property  name=configLocation value=classpath:mybatis-config.xml/>

<property name =mapperLocations >

<list>

<!--扫描cn.smbms.dao包及其任意层级下的子包的任意名称的xml文件-->

 

   <value> classpath:cn/smbms/dao/**/*.xml</value></list>

</property>

</bean>

  开始应用

1 实现dao接口

即dao层的实现类,注意此类里应该添加SqlSessionTemplate属性并set方法可以给spring注入和无参构造,然后配置xml如下

  <!--配置SqlSessionTemplate-->

  <bean id=sqlSessionTemplate class=org.mybatis.spring.SqlSessionTemplate>

<constructor-arg name=sqlSessionFactory ref=sqlSessionFactory/>

</bean>

 <!--配置dao组件注入SqlSessionTemplate实例-->

<bean id=userMapper class=cn.smbms.dao.UserMapperImpl>

 <!--这里注入上面刚刚写的属性-->

<property name=sqlSession ref=sqlSessionTemplate>

</bean>

2第二种继承SqlSessionDaoSupport

让上述的dao层接口的实现类继承SqlSessionDaoSupport ,配置文件直接配置Dap组件省去配置SQLSessionTemplate,原因是SqlSessionDaoSupport提供了setSqlSessionFactory()方法用来注入SqlSessionFactory实例,就会自动生成生成SqlSessionTmeplate,而通过getSqlSession()方法可以获得SqlSessionTemplate实例,所以实现类里不在需要SqlSessionTemplate 属性

<bean id=userMapper class=cn.smbms.dao.UserMapperImpl>

<property name=sqlSessionFactroy value=sqlSessionFactroy>

</bean>

3第三种 MapperFactoryBean省去实现类

 上面两种都是自行编写映射器的实现类并调用映射器的方法实现的功能,可以预见当映射器增多编写起来会多,而且这个过程都是一样的,都是为了得到SqlSessionTemplate实例去执行getMapper(Class<T> Type)方法或者selectOne,目的执行映射文件,所以如果只是执行SqlSessionTemplate进行基本的数据访问操作,而不包含其他非MyBatis的工作,可以不必手工编码使用SqlSessionTemplate或SqlSessionDaoSupport来实现此类Dao,Mybatis-Spring提供了MapperFactoryBean以配置的方式生成映射器并注入到组件中去

  所以现在删除dao层接口的实现类,只保留接口与相应的Sql映射文件

具体配置如下

<!--省略配置数据源信息-->

<!--配置sqlSessionFactoryBean-->

<bean id=sqlSessionFactory class=org.mybatis.spring.SqlSessionFactory>

<property name=dataSource ref=dataSource/>

<property name=configLocation value=classpath:mybatis-config.xml/>

</bean>

<!--配置dao使用MapperFactoryBean-->

<bean id=userMapper class=org.mybatis.spring.mapper.MapperFactoryBean>

<property name=mapperInterface class=cn.smbms.dao.UserMapper/>

<property name=sqlSessionFactory ref=sqlSessionFactory/>

</bean>

MapperFactoryBean 是SqlSessionTemplate的子类,所以也是注入SqlSessionFactory实例通过setSqlSessionFactory ()方法,获得SqlSessionTemplate实例,同时如果sql映射文件与映射器路径同一处,那么该文件可以自动被MapperFactoryBean解析,所以在配置SqlSessionFactoryBean 时可以不用指定文件位置

4第四种 MapperScannerConfigurer

省去sqlSessionFactory注入与MapperFactoryBean

 前提条件是:只有一个SqlSessionFactoryBean,原因SqlSessionFactoryBean 会自动装配,如果有两个则配置的时候不能省略

<!--省略配置数据源-->

<!--配置SqlSessionFactoryBean-->

<bean id=sqlSessionFactory class=org.mybatis.spring.mapper.SqlSessionFactoryBean>

<property name=dataSource ref=dataSource/>

<property name=configLocation value=classpath:mybatis-config.xml>

</bean>

<bean class=”org.mybaits.spring.mapper.MapperScannerConfigurer”>

<!--如果有两个则配置的时候不能省略-->

<!--<property name=sqlSessionFactoryBeanName value=sqlSessionFactory>-->

<property name=basePackage value=cn.smbms.dao>

</bean>

MapperScannerConfigurer 解决了当映射器多的时候还要配置很多的问题,MapperScannerConfigurer可以批量扫描某包下及其子包下的接口并且当接口在sql映射文件中定义过那么会动态批量注册为MapperFactoryBean,还没完,注册后的映射器应与sql映射文件关联起来!!

   这里有两种方法

  1通过配置

   注册的命名为相应接口的名称并且首字母小写

<bean id=”userService” class=”cn.smbms.serviceImpl”>

<property name=”userMapper” value=”userMapper”>

</bean>

2 通过注解 这个是最常用的

使用@Autowired或@Resource 标注在service层的userMapper属性上,来实现注入

注意:到这里或许蒙为什么要注入到service,原因是我们通过调用的service层中调用到层方法,所以dao层接口的映射器应该注入到service层的userMapper属性中,(userMapper即dao层的接口),最后要加一句扫描注解的代码

<context:component-scan base-package=”cn.smbms.service”>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值