Spring整合MyBatis(Maven+spring+MyBatis+mysql)
前言:
接下来我们的项目在我上一篇 Maven+mybatis+mysql项目实践 的基础上进行修改,利用Spring对MyBatis进行整合。
( 文章末尾附上此次实践的demo )
一、回顾 Maven+mybatis+mysql 项目
1、新建maven项目,进行相应配置
参考:http://blog.csdn.net/kevinbetterq/article/details/77967856
2、mybatis访问mysql
- 数据库准备
- 修改pom.xml
- 创建实体类
- 创建访问接口
- 添加映射文件
- 添加MyBatisCfg.xml配置文件
- 添加MyBatisUtil工具类
- 创建Impl类继承接口
(参考:http://blog.csdn.net/kevinbetterq/article/details/77969009)
3、分析
在上面的项目中,我们对数据库的一些配置和启动是在 MyBatisCfg.xml 中指明的。这样对有些映射的注册较为麻烦,接下来我们进行spring的整合
二、Spring与MyBatis整合
1、首先,修改pom.xml
添加以下spring的依赖:
<!-- 添加Spring-core包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!-- 添加spring-context包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!-- 添加spring-tx包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!-- 添加spring-jdbc包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!-- 为了方便进行单元测试,添加spring-test包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!--添加spring-web包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!-- 添加spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!--添加aspectjweaver包 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.5</version>
</dependency>
<!-- 添加mybatis与Spring整合的核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
2、弃用MyBatisCfg.xml,新增 ApplicationContext.xml
作为Spring与MyBatis的配置:
ApplicationContext.xml
<?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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
<!-- 引入db.properties属性文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!--定义一个jdbc数据源,创建一个驱动管理数据源的bean -->
<bean id="jdbcDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!--创建一个sql会话工厂bean,指定数据源 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定数据源 -->
<property name="dataSource" ref="jdbcDataSource" />
<!--类型别名包,默认引入com.lmei.entity下的所有类 -->
<property name="typeAliasesPackage" value="com.qwk.entity"></property>
<!--指定sql映射xml文件的路径 -->
<property name="mapperLocations"
value="classpath:com/qwk/mapper/*Mapper.xml"></property>
</bean>
<!--自动扫描映射接口-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定sql会话工厂,在上面配置过的 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<!-- 指定基础包,即自动扫描com.lmei.dao这个包下的所有接口类 -->
<property name="basePackage" value="com.qwk.dao"></property>
</bean>
<!--自动扫描组件 -->
<context:component-scan base-package="com.qwk">
<context:exclude-filter type="aspectj" expression="com.qwk.dao.*"/>
</context:component-scan>
<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>
</beans>
注意,因为db.properties中的 username 可能会冲突,所以进行一下修改,也可以看到上面的name=”username” value=”${jdbc.username}”,我们也是换成了jdbc.username。
db.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
jdbc.username=root
jdbc.password=123456
3、添加测试类 TestMyBasticSpring.java
package com.qwk.test;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.qwk.dao.BookDaoI;
import com.qwk.entity.Book;
public class TestMyBatisSpring {
@Test
public void test(){
//初始化容器
ApplicationContext ctx=new ClassPathXmlApplicationContext("ApplicationContext.xml");
//获得bean
/* BookDaoI bookDao = ctx.getBean("bookDao",BookDaoI.class);*/
BookDaoI bookDao = ctx.getBean(BookDaoI.class);
//访问数据库
List<Book> books = bookDao.getAllBook();
for (Book book : books) {
System.out.println(book.getBookName());
}
assertNotNull(books);
}
}
项目右键->Run As->Junit Test
这样,Maven+spring+MyBatis+mysql的项目整合就完成了。
Spring的添加其实较为简单,这里给出一个demo,大家可以拿来参考参考:
https://github.com/KevinBetterQ/SpringMVC_Mybatis/tree/0a59f22d4bb43e1554b93ad7cfd54cf3795c962d