Spring篇--09 Spring与MyBatis的整合
一、编程步骤
step1:导包
spring-webmvc,mybatis,mybatis-spring,spring-jdbc,dbcp,mysql-connector,junit
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lcz</groupId>
<artifactId>mybatis_day01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.8.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>
step2:添加spring的配置文件
注:mybatis的配置信息可以添加到spring的配置文件当中。(只需要配置SqlSessionFactoryBean)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:lang="http://www.springframework.org/schema/lang"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.2.xsd
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
">
<!-- 配置连接池 -->
<util:properties id="config" location="classpath:db.properties"/>
<!--配置连接池 -->
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="#{config.driver}"/>
<property name="url" value="#{config.url}"/>
<property name="username" value="#{config.username}"/>
<property name="password" value="#{config.password}"/>
</bean>
<!-- 配置SqlSessionFactoryBean -->
<!-- spring集成mybatis,不再需要mybatis的配置文件,使用SqlSessionFactoryBean来代替mybatis的配置文件 -->
<bean id="ssfb" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入连接池 -->
<!-- 不再使用mybatis自带的连接池,而是使用spring管理的连接池 -->
<property name="dataSource" ref="ds"/>
<!-- 映射文件的位置 -->
<property name="mapperLocations" value="classpath:entity/*.xml"/>
</bean>
step3:实体类
step4:映射文件
step5:Mapper映射器
这三步同上述
step6:在spring的配置文件中,添加MapperScannerConfigure。该bean负责负责调用SqlSessio的getMapper方法,创建符合Mapper映射器要求的对象。注:该bean会将这个对象添加到spring容器里面,
<!-- 配置MapperScannerConfigurer -->
<!-- MapperScannerConfigure负责扫描指定包下所有的Mapper映射器,然后生成符合这些接口要求的对象
(其实就是调用SqlSession的getMapper方法。)另外,还会将这些对象添加到spring容器里面。(默认id是首字母小写的接口名)
@Respository来设置id -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- Mapper映射器所在的包 -->
<property name="basePackage" value="dao"/>
</bean>
</beans>
step7:测试类
package test;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import dao.EmpDao;
import entity.Emp;
public class TestCase {
private EmpDao dao;
@Before
public void init() {
ApplicationContext ac=new ClassPathXmlApplicationContext("spring_mvc.xml");
dao = ac.getBean("eDao",EmpDao.class);
}
@Test
public void test1() {
Emp emp=new Emp();
emp.setName("rose");
emp.setAge(24);
dao.save(emp);
}
@Test
public void test2() {
List<Emp> emps = dao.findAll();
System.out.println(emps);
}
}
二、只扫描特定的Mapper映射器
step1:开发一个注解,比如@MyBatisRepository
package annotations;
public @interface MyBatisRepository {
}
step2:将该注解添加到需要扫描的映射器
@Repository("eDao")
@MyBatisRepository
public interface EmpDao {
public void save(Emp emp);
public List<Emp> findAll();
public Emp findById(int id);
public void modify(Emp e);
public void delete(int id);
}
step3:配置MapperScannerConfigurer,设置annotationClass,指定注解类
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- Mapper映射器所在的包 -->
<property name="basePackage" value="dao"/>
<!-- 只扫描特定的接口 -->
<property name="annotationClass" value="annotations.MyBatisRepository"/>
</bean>