mybatis整合spring(3)

2019-03-16 22:47

???

有时候我们指定的基包下面的并不全是我们定义的Mapper接口,为此MapperScannerConfigurer还为我们提供了另外两个可以缩小搜索和注册范围的属性。一个是annotationClass,另一个是markerInterface。

?

annotationClass:当指定了annotationClass的时候,MapperScannerConfigurer将只注册使用了

annotationClass注解标记的接口。 ?

markerInterface:markerInterface是用于指定一个接口的,当指定了markerInterface之后,

MapperScannerConfigurer将只注册继承自markerInterface的接口。

如果上述两个属性都指定了的话,那么MapperScannerConfigurer将取它们的并集,而不是交集。即使用了annotationClass进行标记或者继承自markerInterface的接口都将被注册为一个MapperFactoryBean。

现在假设我们的Mapper接口都继承了一个SuperMapper接口,那么我们就可以这样来定义我们的MapperScannerConfigurer。

Xml代码

??? ??? ???

value=\/> ???

如果是都使用了注解MybatisMapper标记的话,那么我们就可以这样来定义我们的MapperScannerConfigurer。

Xml代码

??? ??? ???

value=\/> ???

除了用于缩小注册Mapper接口范围的属性之外,我们还可以指定一些其他属性,如:

?

sqlSessionFactory:这个属性已经废弃。当我们使用了多个数据源的时候我们就需要通过sqlSessionFactory

来指定在注册MapperFactoryBean的时候需要使用的SqlSessionFactory,因为在没有指定sqlSessionFactory的

时候,会以Autowired的方式自动注入一个。换言之当我们只使用一个数据源的时候,即只定义了一个SqlSessionFactory的时候我们就可以不给MapperScannerConfigurer指定SqlSessionFactory。 ?

sqlSessionFactoryBeanName:它的功能跟sqlSessionFactory是一样的,只是它指定的是定义好的

SqlSessionFactory对应的bean名称。 ?

sqlSessionTemplate:这个属性已经废弃。它的功能也是相当于sqlSessionFactory的,因为就像前面说的那

样,MapperFactoryBean最终还是使用的SqlSession的getMapper方法取的对应的Mapper对象。当定义有多个SqlSessionTemplate的时候才需要指定它。对于一个MapperFactoryBean来说SqlSessionFactory和SqlSessionTemplate只需要其中一个就可以了,当两者都指定了的时候,SqlSessionFactory会被忽略。 ?

sqlSessionTemplateBeanName:指定需要使用的sqlSessionTemplate对应的bean名称。

注意:由于使用sqlSessionFactory和sqlSessionTemplate属性时会使一些内容在PropertyPlaceholderConfigurer之前加载,导致在配置文件中使用到的外部属性信息无法被及时替换而出错,因此官方现在新的Mybatis-Spring中已经把sqlSessionFactory和sqlSessionTemplate属性废弃了,推荐大家使用sqlSessionFactoryBeanName属性和sqlSessionTemplateBeanName属性。

Xml代码

???

???

??? xsi:schemaLocation=\ ??? http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ??? http://www.springframework.org/schema/context

??? http://www.springframework.org/schema/context/spring-context-3.0.xsd ??? http://www.mybatis.org/schema/mybatis

??? http://www.mybatis.org/schema/mybatis/mybatis-spring.xsd ??? http://www.springframework.org/schema/mvc

??? http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd\>

???

??? ??? ???

class=\ ??? destroy-method=\>

??? ???

??? ??? ???

???

class=\>

??? ???

value=\ /> ??? ???

??? ??? ???

value=\/> ??? ??? ???

SqlSessionTemplate

除了上述整合之后直接使用Mapper接口之外,Mybatis-Spring还为我们提供了一种直接使用SqlSession的方式。Mybatis-Spring为我们提供了一个实现了SqlSession接口的SqlSessionTemplate类,它是线程安全的,可以被多个Dao同时使用。同时它还跟Spring的事务进行了关联,确保当前被使用的SqlSession是一个已经和Spring的事务进行绑定了的。而且它还可以自己管理Session的提交和关闭。当使用了Spring的事务管理机制后,SqlSession还可以跟着Spring的事务一起提交和回滚。

使用SqlSessionTemplate时我们可以在Spring的applicationContext配置文件中如下定义:

这样我们就可以通过Spring的依赖注入在Dao中直接使用SqlSessionTemplate来编程了,这个时候我们的Dao可能是这个样子:

Java代码

??? package com.tiantian.mybatis.dao; ???

??? import java.util.List;

??? import javax.annotation.Resource;

??? import org.mybatis.spring.SqlSessionTemplate; ??? import org.springframework.stereotype.Repository; ??? import com.tiantian.mybatis.model.Blog; ???

??? @Repository

??? publicclass BlogDaoImpl implements BlogDao { ???

??? private SqlSessionTemplate sqlSessionTemplate; ???

??? publicvoid deleteBlog(int id) { ???

sqlSessionTemplate.delete(\, id); ??? } ???

??? public Blog find(int id) { ???

returnsqlSessionTemplate.selectOne(\ctBlog\, id); ??? } ???

??? public List find() { ???

returnthis.sqlSessionTemplate.selectList(\electAll\); ??? } ???


mybatis整合spring(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:黔西南州十二五油茶产业发展规划

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: