Spring与Mybatis整合方式(mybatis-spring整合jar包功能)
目录
- 一、 MyBATis与Spring的集成
- 二、spring与mybatis快速整合
- ①导入spring与mybatis相应坐标
- ②创建数据库连接配置文件
- ③创建mybatis配置文件
- ④创建spring配置文件
- ⑤根据配置文件创建相应的包、接口、实体类
- ⑥书写mapper的sql映射配置文件
- ⑦书写测试代码
- 三、mybatis-spring整合jar包功能
- ①SqlSessionFactoryBean
- ②MapperScannerConfigurer
- 总结
一、 MyBatis与Spring的集成
在学习mybatis配置时,对于mybatis-config配置的时候我们发现,大致是需要配置三个方面:setting、datasource、mappers
而mybatis的setting往往使用默认配置,所以我们经常配置datasource数据源与mappers映射,但学习spring之后发现,对于datasource的配置交由spring进行管理,所以在spring与mybatis整合后mybatis的配置文件中将不需要配置datasource,mybatis的配置几乎都会在Spring配置之中完成。
当然要想要实现spring与mybatis的整合,其中最重要的就是 mybatis-spring.jar 包
- mybatis-spring会用于帮助你将 MyBatis 代码无缝地整合到 Spring 中。
- Spring 将会加载必要的 MyBatis 工厂类和 Session 类
- 提供一个简单的方式来注入 MyBatis 数据映射器和 SqlSession 到业务层的 bean 中。
- 方便集成 Spring 事务
- 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常)中。
Mybatis-Spring 兼容性,我们在选择Spring、MyBatis以及mybatis-spring时,应注意版本之间的兼容性
二、spring与mybatis快速整合
①导入spring与mybatis相应坐标
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <!--定义Spring版本号--> <org.springframework.version>4.3.18.RELEASE</org.springframework.version> </properties> <dependencies> <!-- 单元测试相关依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${org.springframework.version}</version> </dependency> <!-- spring必要依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework.version}</version> </dependency> <!-- spring aop织入依赖 --> <dependency> <groupId>org.ASPectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.13</version> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-Java</artifactId> <version>5.1.38</version> </dependency> <!-- 数据库连接池 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.29</version> </dependency> <!-- mybatis相关依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- mybatis与spring对接依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.2</version> </dependency> </dependencies> 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
②创建数据库连接配置文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8 jdbc.username=root jdbc.password=root # 初始化大小,最小,最大 initialSize=10 minIdle=6 maxActive=50 123456789
③创建mybatis配置文件
mybatis文件与之前不同,之前在mybatis-config.XML中配置数据库连接的,现在要把这些放在spring的配置文件中,所以mybatis配置文件中只写setting配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 缓冲配置 --> <setting name="cacheEnabled" value="true"/> <!-- 懒加载 --> <setting name="lazyLoadingEnabled" value="true"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> <setting name="aggressiveLazyLoading" value="false"/> <!-- 缓冲区配置 --> <setting name="localCacheScope" value="SESSION"/> </settings> <!--<environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment>wMgtZbB </environments> --> <!-- 映射文件的配置 <mappers> <package name="com.dao" /> </mappers> --> </configuration> 1234567891011121314151617181920212223242526272829303132
④创建spring配置文件
2)spring配置头文件与约束地址
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 1234567891011121314
2)spring注解开发
<!-- 开启spring 注解扫描 --> <context:component-scan base-package="com.yunhe"/> 12
3)导入properties配置文件
<!-- 加载类路径下的properties配置文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> 12
4)dataSource数据源配置
<!-- datasource数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="initialPoolSize" value="${initialSize}"/> <property name="minPoolSize" value="${minIdle}"/> <property name="maxPoolSize" value="${maxActive}"/> </bean> 12345678910
5)sqlSessionFactory数据会话工厂配置
<!-- 配置SqlSessionFactory对象 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource"/> <!-- 配置mybatis配置文件 --> <property name="configLocation" value="classpath:mybatis.xml"/> <!-- 配置mapper映射文件 --> <property name="mapperlocations" value="classpath:mapper/*.xml"/> </bean> 123456789
6)mapper接口配置
<!-- mybatis.spring自动映射,DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.yunhe.mapper" /> </bean> 1234
7www.devze.com)事务管理器
<!--平台事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> 1234
8)设置事务扫描
<!-- 开启事务控制的注解支持 --> <tx:annotation-driven transaction-manager="transactionManager" /> 12
⑤根据配置文件创建相应的包、接口、实体类
- Account
package com.yunhe.pojo; public class Account { private String name; private double money; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getMoney() { return money; } public void setMoney(double money) { this.money = money; } @Override public String toString() { return "Account{" + "name='" + name + '\'' + ", money=" + money + '}'; } } 123456789101112131415161718192021222324
- AccountMapper
package com.yunhe.mapper; import com.yunhe.pojo.Account; import org.springframework.stereotype.Repository; import java.util.List; @Repository public interface AccountMapper { public List<Account> selectAll(); } 12345678
⑥书写mapper的sql映射配置文件
- AccountMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.yunhe.mapper.AccountMapper"> <select id="selectAll" resultType="com.yunhe.pojo.Account"> select * from account </select> </mapper> 1234567
⑦书写测试代码
import com.yunhe.mapper.AccountMapper; import com.yunhe.pojo.Account; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import java.util.List; public class T { @Test public void asd(){ ApplicationContext ac=new Clas编程sPathXmlApplicationContext("spring.xml"); AccountMapper accountMapper = (AccountMapper) ac.getBean("accountMapper"); List<Account> accounts = accountMapper.selectAll(); System.out.println(accounts); php } } 123456789101112131415
结果:
三、mybatis-spring整合jar包功能
①SqlSessionFactoryBean
在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的。 而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。
要创建工厂 bean,将下面的代码放到 Spring 的 XML 配置文件中:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> </bean> 123
1)DataSource
SqlSessionFactory 有一个唯一的必要属性:用于 JDBC 的 DataSource。这可以是任意的 DataSource 对象,它的配置方法和其它 Spring 数据库连接是一样的。
2)configLocation
一个常用的属性是 configLocation,它用来指定 MyBatis 的 XML 配置文件路径。它在需要修改 MyBatis 的基础配置非常有用。通常,基础配置指的是 或 元素。
需要注意的是,这个配置文件并不需要是一个完整的 MyBatis 配置。确切地说,任何环境配置(),数据源()和 MyBatis 的事务管理器()都会被忽略。SqlSessionFactoryBean 会创建它自有的 MyBatis 环境配置(Environment),并按要求设置自定义环境的值。如果 MyBatis 在映射器类对应的路径下找不到与之相对应的映射器 XML 文件,那么也需要配置文件。这时有两种解决办法:第一种是手动在 MyBatis 的 XML 配置文件中的 部分中指定 XML 文件的类路径;第二种是设置工厂 bean 的 mapperLocations 属性。
3)mapperLocations
mapperLocations 属性接受多个资源位置。这个属性可以用来指定 MyBatis 的映射器 XML 配置文件的位置。属性的值是一个 Ant 风格的字符串,可以指定加载一个目录中的所有文件,或者从一个目录开始递归搜索所有目录。比如:
<!-- 配置SqlSessionFactory对象 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 注入数据库连接池 --> <property name="dataSource" ref="dataSource"/> <!-- 配置mybatis配置文件 --> <property name="configLocation" value="classpath:mybatis.xml"/> <!-- 配置mapper映射文件 --> <property name="mapperLocations" value="classpath:mapper/*.xml"/> </bean> 123456789
②MapperScannerConfigurer
basePackage
MapperScannerConfigurer:有一个重要的属性basePackage用于扫描映射指定包下所有的mapper映射接口,mybatis执行时会与已经加载的mapper对应的xml进行映射调用相应的方法执行sql语句返回结果
<!-- mybatis.spring自动映射,DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <propepythonrty name="basePackage" value="com.yunhe.mapper" /> </bean>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论