spring-mybatis如何配置
2017-08-29 17:23
375 查看
前面已经有一篇利用idea整合ssm框架的helloworld入门项目(http://blog.csdn.net/zyf2333/article/details/77623537),这里主要跟着课本把基本配置说明一下。以供参考
配置MyBatis-Spring分为下面几个部分
配置数据源
配置SqlSessionFactory
配置SqlSessionTemplate
配置Mapper
事务处理
在学习mybatis基础入门时候(http://blog.csdn.net/zyf2333/article/details/77528279)我们知道了,要构建SqlSessionFactory对象,让它来产生SqlSession,而在MyBatis-Spring项目中是通过SqlSessionTemplate来实现的,它提供了对SqlSession的封装。所以通过SqlSessionTemplate可以得到Mapper。下面开始配置
配置SqlSessionFactory:(applicationContext.xml)
sqlMapConfig.xml(和applicationContext.xml在同一目录下)
到此SqlSessionFactory配置完成。总的来说其实变化不是很大,就是mybatis基础配置文件中配置数据库的部分放入了spring的配置文件中,然后这个spring的配置文件引用了mybatis的基本配置文件
方法一,使用SqlSessionFactory
方法二,使用两个参数构建
通过这些配置就意味着Spring会把我们之前配置的SqlSessionFactory设置到SqlSessionTemplate中(感觉就是SqlSessionFactory创建出来就是专门为了让SqlSessionTemplate合并的)。
接下来通过Mapper来看看SqlSessionTemplate是如何使用的
4.1 MapperFactoryBean
在mybatis中,Mapper只需要是一个接口即可,它是由MyBatis体系通过动态代理的形成生成代理对象去运行的,所以Spring也没有办法为其生成实现类。为了处理这个问题,MyBatis-Spring提供了MapperFactoryBean作为中间。我们通过它来配置想要的Mapper。主要有以下三个参数
mapperInterface:制定接口,当我们的接口继承了配置的接口,那么MyBatis就认为它是个Mapper
SqlSessionFactory:当SqlSessionTemplate未配置时候,MyBatis-Spring才会去设置它。
SqlSessionTemplate:注入DAO中,当它设置时候,SqlSessionFactory将被作废,如代码所示
4.2 MapperScannerConfigurer
一个复杂的系统中存在很多DAO,不仅仅UserDAO,还有角色的RoleDAO,产品的ProductDAO,如果一个个配置,工作量很大。MyBatis-Spring处理了这种状况,采用自动扫描的形式来配置我们的映射器,这样可以在很少的代码情况下完成对映射器的配置
在MyBatis-Spring项目中,采用的是MapperScannerConfigurer。它有下面几个属性
basePackage:指定让Spring自动扫描什么包
annotationClass:表示如果类被这个注解标识的时候,才进行扫描
sqlSessionFactoryBeanName:指定Spring中定义sqlSessionFactory的bean名称,如果被定义,sqlSessionFactory将不起作用
sqlSessionTemplateBeanName:类似上面一条
markerInterface:指定是实现了什么接口就认为它是Mapper。我们需要提供一个公共的接口去标记。在Spring配置前需要给DAO一个@Repository注解
比如
然后在Spring中配置它
这样Spring上下文就会自动扫描com.learn.dao来找到@Repository注解的接口,自动生成Mapper,从而无需多余的配置
这时候我们需要业务层,通过spring扫描配置,代码如下
这样Spring会自动扫描这些Service对象的bean读取到上下文中。MyBatis的事物就交给Spring控制,我们只需要在Spring中通过注解注入即可,如下
1)概述
MyBatis-Spring项目是MyBatis社区自己编写出来的项目,使得MyBatis3能在Spring中使用。因此我们先要去下载MyBatis-Spring的jar包(http://mvnrepository.com/artifact/org.mybatis/mybatis-spring/1.3.1),然后自行添加到运行环境中去配置MyBatis-Spring分为下面几个部分
配置数据源
配置SqlSessionFactory
配置SqlSessionTemplate
配置Mapper
事务处理
在学习mybatis基础入门时候(http://blog.csdn.net/zyf2333/article/details/77528279)我们知道了,要构建SqlSessionFactory对象,让它来产生SqlSession,而在MyBatis-Spring项目中是通过SqlSessionTemplate来实现的,它提供了对SqlSession的封装。所以通过SqlSessionTemplate可以得到Mapper。下面开始配置
2)配置SqlSessionFactory
SqlSessionFactory作用就是生产SqlSession。而MyBatis-Spring项目提供了org.mybatis.springSqlSessionFactoryBean类给我们配置。一般而言,我们要给出两个参数,一个是数据源,一个是mybatis的配置文件路径,这样SpringIOC容器就会初始化这个SqlSessionFactoryBean,解析MyBatis配置文件并连同数据源一同保存在SpringBean里面,接下来看看配置的代码清单:配置SqlSessionFactory:(applicationContext.xml)
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <!-- MySQL中有个example数据库 --> <value>jdbc:mysql://localhost:3306/example</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value><!-- 写上你自己的MySQL的密码 --></value> </property> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> </bean>
sqlMapConfig.xml(和applicationContext.xml在同一目录下)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//iBATIS.com//DTD SQL Map Config 3.0//EN" "mybatis-3-config.dtd" > <configuration> <!-- 这些settings一般用不到,现阶段写出来知道就好了。主要还是写别名和指定映射器路径 --> <settings> <!-- 这个配置使全局的映射器启用或者禁用缓存 --> <setting name="cacheEnabled" value="true" /> <!-- 允许jdbc支持生成的键 --> <setting name="useGeneratedKeys" value="true" /> <!-- 配置默认执行器。SIMPLE执行器没什么特别的,REUSE执行器重用预处理语句,BATCH执行器重用语句和批量更新 --> <setting name="defaultExecutorType" value="REUSE" /> <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 设置超时时间,单位是毫秒 --> <setting name="defaultStatementTimeout" value="25000" /> </settings> <!-- 别名配置 --> <typeAliases> <typeAlias alias="role" type="com.mkyong.common.po.Role" /> </typeAliases> <!-- 指定映射器路径 --> &l 4000 t;mappers> <mapper resource="com\mkyong\common\po\role.xml" /> </mappers> </configuration>
到此SqlSessionFactory配置完成。总的来说其实变化不是很大,就是mybatis基础配置文件中配置数据库的部分放入了spring的配置文件中,然后这个spring的配置文件引用了mybatis的基本配置文件
3)配置SqlSessionTemplate
SqlSessionTemplate(org.mybatis.spring.SqlSessionTemplate)是个模板类,通过调用SqlSession来完成工作,所以在MyBatis-Spring项目中它是核心。有两种构建它的方法,一种是只有一个SqlSessionFactory作为参数;另一种是有2个参数(SqlSessionFactory和执行器类型)。接下来看看代码:方法一,使用SqlSessionFactory
//该代码接着上面的spring的配置文件 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean>
方法二,使用两个参数构建
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype"> <constructor-arg index="0" ref="sqlSessionFactory" /> <constructor-arg index="1" value="BATCH" /> </bean>
通过这些配置就意味着Spring会把我们之前配置的SqlSessionFactory设置到SqlSessionTemplate中(感觉就是SqlSessionFactory创建出来就是专门为了让SqlSessionTemplate合并的)。
接下来通过Mapper来看看SqlSessionTemplate是如何使用的
4)配置Mapper
按照课本的说法,在代码中,大部分场景不建议使用SqlSessionTemplate或者SqlSession的方式,这里我们采用Mapper接口编程的方式,让SqlSessionTemplate在开发过程中“消失”,这样更符合面向对象,也更容易理解4.1 MapperFactoryBean
在mybatis中,Mapper只需要是一个接口即可,它是由MyBatis体系通过动态代理的形成生成代理对象去运行的,所以Spring也没有办法为其生成实现类。为了处理这个问题,MyBatis-Spring提供了MapperFactoryBean作为中间。我们通过它来配置想要的Mapper。主要有以下三个参数
mapperInterface:制定接口,当我们的接口继承了配置的接口,那么MyBatis就认为它是个Mapper
SqlSessionFactory:当SqlSessionTemplate未配置时候,MyBatis-Spring才会去设置它。
SqlSessionTemplate:注入DAO中,当它设置时候,SqlSessionFactory将被作废,如代码所示
<bean id="userDAO" class="org.mybatis.spring.mapper.MapperFactoryBean"> <!-- UserDAO接口将被扫描为Mapper,上面创建的sqlSessionTempalte也引用了 --> <property name="mapperInterface" value="com.dao.UserDAO"/> <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/> </bean>
4.2 MapperScannerConfigurer
一个复杂的系统中存在很多DAO,不仅仅UserDAO,还有角色的RoleDAO,产品的ProductDAO,如果一个个配置,工作量很大。MyBatis-Spring处理了这种状况,采用自动扫描的形式来配置我们的映射器,这样可以在很少的代码情况下完成对映射器的配置
在MyBatis-Spring项目中,采用的是MapperScannerConfigurer。它有下面几个属性
basePackage:指定让Spring自动扫描什么包
annotationClass:表示如果类被这个注解标识的时候,才进行扫描
sqlSessionFactoryBeanName:指定Spring中定义sqlSessionFactory的bean名称,如果被定义,sqlSessionFactory将不起作用
sqlSessionTemplateBeanName:类似上面一条
markerInterface:指定是实现了什么接口就认为它是Mapper。我们需要提供一个公共的接口去标记。在Spring配置前需要给DAO一个@Repository注解
比如
import org.springframework.stereotype.Repository; @Repository public interface UserDAO { ... }
然后在Spring中配置它
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.learn.dao" /> <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate" /> <property name="annotationClass" value="org.springframework.stereotype.Repository"></property> </bean>
这样Spring上下文就会自动扫描com.learn.dao来找到@Repository注解的接口,自动生成Mapper,从而无需多余的配置
5)配置事务
学Spring时候我们就是用的AOP,此处也一样。它分为声明式事务和编程式事务。主流是声明式事务。此处看简单举例<!--事务管理器--> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!--使用声明式事务管理器--> <tx:annotation-driven transaction-manager="txManager" />
这时候我们需要业务层,通过spring扫描配置,代码如下
<context:component-scan base-package="com"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan>
这样Spring会自动扫描这些Service对象的bean读取到上下文中。MyBatis的事物就交给Spring控制,我们只需要在Spring中通过注解注入即可,如下
@Service("userService") public class UserServiceImpl implements UserService{ ... @Autowired private UserDAO userDAO;//注解注入userDAO }
相关文章推荐
- 如何使用spring配合mybatis配置多个数据源并应用?
- 如何在spring中配置使得mybatis3.1.1中支持vendor方式的multi-db(多数据库)
- spring整合mybatis是如何配置事务的?
- 如何在spring中配置使得mybatis3.1.1中支持vendor方式的multi-db(多数据库)
- 如何 在Spring MVC中 使用多个Spring和MyBatis的xml配置文件(多模块配置)
- 如何在spring配置文件中注册mybatis配置文件
- Maven配置Spring+SpringMVC+MyBatis(3.2.2)Pom 以及 IntelliJ IDEA 如何打开依赖视图
- spring+mybatis 事务之如何在service层配置事务
- 如何配置spring+springmvc+mybatis环境
- 浅析如何让Spring 来管理Action的配置方法
- MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
- Spring-boot +Gradle依赖管理+Mybatis 配置文件
- Spring Cloud Spring Boot mybatis分布式微服务云架构(二十六)使用MyBatis注解配置详解(1)
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
- springmvc+mybatis 的配置文件
- 利用Jasypt如何对Spring Boot配置文件加密
- Mybatis+springMVC下事务控制的配置
- Java中如何获取Spring中配置的bean
- MyBatis详解与配置MyBatis+Spring+MySql
- Spring+Hibernate如何配置数据源(Struts Spring Hibernate (SSH) 整合实例)