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代码如下:

 

 

 sqlSessionFactory class=org.mybatis.spring.SqlSessionFactoryBean>

dataSource ref=dataSource/>

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

mapperLocations >

 

    classpath:cn/smbms/dao/**/*.xml

  开始应用

1 实现dao接口

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

  

  sqlSessionTemplate class=org.mybatis.spring.SqlSessionTemplate>

sqlSessionFactory ref=sqlSessionFactory/>

 

userMapper class=cn.smbms.dao.UserMapperImpl>

 

sqlSession ref=sqlSessionTemplate>

2第二种继承SqlSessionDaoSupport

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

userMapper class=cn.smbms.dao.UserMapperImpl>

sqlSessionFactroy value=sqlSessionFactroy>

3第三种 MapperFactoryBean省去实现类

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

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

具体配置如下

sqlSessionFactory class=org.mybatis.spring.SqlSessionFactory>

dataSource ref=dataSource/>

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

userMapper class=org.mybatis.spring.mapper.MapperFactoryBean>

mapperInterface class=cn.smbms.dao.UserMapper/>

sqlSessionFactory ref=sqlSessionFactory/>

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

4第四种 MapperScannerConfigurer

省去sqlSessionFactory注入与MapperFactoryBean

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

sqlSessionFactory class=org.mybatis.spring.mapper.SqlSessionFactoryBean>

dataSource ref=dataSource/>

configLocation value=classpath:mybatis-config.xml>

”org.mybaits.spring.mapper.MapperScannerConfigurer”>

basePackage value=cn.smbms.dao>

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

   这里有两种方法

  1通过配置

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

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

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

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

你可能感兴趣的:(java框架)