Spring 集成Mybatis
引言:将 MyBatis与 Spring进行整合,主要解决的问题就是将 SqISessionFactory对象交由 Spring来管理。所以,该整合只需要将SqISessionFactory的对象生成器SqlSessionFactoryBean注册在Spring容器中,再将其注入给Dao的实现类即可完成整合。
实现思路: 实现Spring与MyBatis的整合常用的方式:扫描的Mapper动态代理。Spring像插线板一样, mybatis 框架是插头,可以容易的组合到一起。插线板spring插上mybatis,两个框架就是一个整体。
2.实现步骤
2.1创建数据库
使用的mysq1库,使用学生表 student(stuid int主键列,自动增长,stuname varchar (45),stusex int ,stunum varchar (45))
2.2创建maven项
2.3 加入依赖
spring依赖,mybatis依赖,mysq1驱动。 junit依赖mybatis- spring依赖(mybatis网站 上提供的,用来在spring项目中,创建mybatis对 象)spring有关事务的依赖。mybatis和spring整合的时候,事 务是自动提交的。
<!--1. spring所需要的jar包:(8+2) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- spring事务依赖jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!-- spring所需要的jar包:2个在这里 -->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>
<!-- 2.mybatis所需要使用的jar包:3个 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 3.spring整合mybatis的中间jar包:4个 -->
<!-- 数据库启动jar包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!-- mybatis支持spring整合的中间件 jar包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!--数据源支持 jar包 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.3</version>
</dependency>
<!-- 4.1 测试类jar包:1个 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.6</version>
<scope>test</scope>
</dependency>
2.4 创建实体类student
根据数据表student的字段,在com.po包下创建持久化类Student,代码来喽:
package com.po;
public class Student {
private int stuid;
private String stuname;
private String stusex;
private String stunum;
public int getStuid() {
return stuid;
}
public void setStuid(int stuid) {
this.stuid = stuid;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public String getStusex() {
return stusex;
}
public void setStusex(String stusex) {
this.stusex = stusex;
}
public String getStunum() {
return stunum;
}
public void setStunum(String stunum) {
this.stunum = stunum;
}
@Override
public String toString() {
return "Student [stuid=" + stuid +",stuname=" + stuname + ",stusex=" + stusex +",stunum=" + stunum+"]";
}
}
2.5 创建Dao接口和mapper文件写sql语句
在com.dao包下创建用于执行业务功能的接口StudentDao,代码来咯:
package com.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import com.po.Student;
@Repository("studentDao")
@Mapper
public interface StudentDao {
public List<Student> selectAllStudent();
public int addStudent(Student student);
public int updateStudent(Student student);
public int deleteStudent(Integer stuid);
}
在com.dao包下创建接口StudentDao,对应的Mapper文件StudentMapper.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.dao.StudentDao">
<!-- 查询所有用户信息 -->
<select id="selectAllStudent" resultType="com.po.Student">
select * from student
</select>
<!-- 添加一个用户 ,#{uname}为com.po.MyUser的属性值 -->
<insert id="addStudent" parameterType="com.po.Student">
insert into student
(stuname,stusex,stunum) values(#{stuname},#{stusex},#{stunum})
</insert>
<!-- 修改一个用户 -->
<update id="updateStudent" parameterType="com.po.Student">
update student set
stuname = #{stuname},stusex = #{stusex},stunum = #{stunum} where stuid
= #{stuid}
</update>
<!-- 删除一个用户 -->
<delete id="deleteStudent" parameterType="Integer">
delete from student where stuid = #{stuid}
</delete>
</mapper>
2.6 写mybatis主配置文件
配置Mybatis,在src/main/resource下创建log4j.properties文件,代码来喽:
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.com.dao=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
创建mybatis-config.xml文件,代码来喽:
<?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>
<mappers>
<!-- 映射文件的位置 -->
<mapper resource="com/dao/StudentMapper.xml" />
</mappers>
</configuration>
2.7 创建实现类
在com.controller包下创建控制器类StudentController(等价于service实现类),代码来喽:
package com.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.dao.StudentDao;
import com.po.Student;
@Controller("studentController")
public class StudentController {
@Autowired
public StudentDao studentdao;
public void AddStudent()
{
Student stu = new Student();
stu.setStuname("张三");
stu.setStusex("1");
stu.setStunum("1234567890");
int row = studentdao.addStudent(stu);
System.out.println("添加了"+row+"条记录");
}
public void DeleteStudent(int stuid)
{
studentdao.deleteStudent(stuid);
}
public void UpdateStudent(Student student)
{
studentdao.updateStudent(student);
}
public void SelectAllStudent()
{
List<Student> list = studentdao.selectAllStudent();
for (Student student : list) {
System.out.println(student);
}
}
}
2.8 创建spring的配置文件
申明数据源DataSource,使用jdbc
声明Sql SessionFac toryBean类,在这个类内部创建的是sqlSess ionFactory对象。
声明MapperscannerConf iguration类,在内部创建dao代理对象,
创建的对象都放在spring容器中。
声明Service对象, 把Dao赋值给service属性
在src/main/resource下创建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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 配置数据源 -->
<bean id="dataSource"
class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName"
value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/dbmis1?characterEncoding=utf8&useSSL=false" />
<property name="username" value="root" />
<property name="password" value="123456" />
<!-- 最大连接数 -->
<property name="maxTotal" value="30" />
<!-- 最大空闲连接数 -->
<property name="maxIdle" value="10" />
<!-- 初始化连接数 -->
<property name="initialSize" value="5" />
</bean>
<!-- 添加事务支持 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开启事务注解 -->
<tx:annotation-driven transaction-manager="txManager" />
</beans>
2.9 测试Dao访问数据库
在src/test/java下新建com.controller包,新建TestStudentController类,代码来咯:
package com.controller;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestStudentController {
@Test
public void AddStudent()
{
ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentController suc = (StudentController)appCon.getBean("studentController");
suc.AddStudent();
}
@Test
public void SelectAllStudent()
{
ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
StudentController suc = (StudentController)appCon.getBean("studentController");
suc.SelectAllStudent();
}
}
在TestStudentController类上点击右键,选择Run As->Junit Test运行测试代码