Spring整合mybatis
文档: MyBatis-Spring文档地址
pom.xml //pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath/>
</parent>
<groupId>com.lyh</groupId>
<artifactId>MySpringTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>MySpringTest</name>
<description>MySpringTest</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
dao 数据访问层
UserMapper //接口
package com.lyh.dao;
import com.lyh.domain.UserTrue;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Transactional(propagation = Propagation.REQUIRED)
public interface UserMapper {
public List<UserTrue> findAllUser();
public boolean addUser(UserTrue userTrue);
public boolean deleteUser(int id);
}
UserMapperImpl 实现类
package com.lyh.dao;
import com.lyh.domain.UserTrue;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Transactional(propagation = Propagation.REQUIRED)
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
@Override
public List<UserTrue> findAllUser() {
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
return mapper.findAllUser();
}
@Override
public boolean addUser(UserTrue userTrue) {
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
return mapper.addUser(userTrue);
}
@Override
public boolean deleteUser(int id) {
UserMapper mapper = getSqlSession().getMapper(UserMapper.class);
return mapper.deleteUser(id);
}
}
domain 实体类
Hello //测试Set注入
package com.lyh.domain;
public class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show() {
System.out.println("Hello" + name);
}
}
User // 测试构造注入
package com.lyh.domain;
public class User {
private String name;
private String gender;
private Integer age;
public User() {
}
public User(String name, String gender, Integer age) {
this.name = name;
this.gender = gender;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", gender='" + gender + '\'' +
", age='" + age + '\'' +
'}';
}
}
Person //测试Qualifier和Autowired 自动装配
package com.lyh.domain;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class Person {
@Autowired
@Qualifier("user1")
private User user;
private String name;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Student // @Value属性注入
package com.lyh.domain;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("student")
public class Student {
public String name = "StudentA";
@Value("22")
public int age;
public String gender;
@Value("male")
public void setGender(String gender) {
this.gender = gender;
}
}
UserTrue //纯实体类
package com.lyh.domain;
public class UserTrue {
private int id;
private String name;
private String pwd;
public UserTrue() {
}
public UserTrue(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "UserTrue{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
resource层
mybatisconfig.xml // spring配置后不需要mybatis配置文件
<?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>
<typeAliases>
<package name="com.lyh.domain"/>
</typeAliases>
</configuration>
springconfig.xml //spring配置文件
<?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"
xmlns:aop="http://www.springframework.org/schema/aop"
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 http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd"
>
<context:annotation-config/>
<context:component-scan base-package="com.lyh.domain"/>
<bean id="helloTest" class="com.lyh.domain.Hello">
<property name="name" value="Spring"/>
</bean>
<bean id="user1" class="com.lyh.domain.User">
<constructor-arg value="Jam" index="0"/>
<constructor-arg value="male" index="1"/>
<constructor-arg value="22" index="2"/>
</bean>
<bean id="user2" class="com.lyh.domain.User">
<constructor-arg index="0">
<value><![CDATA[-kevin-]]></value>
</constructor-arg>
<constructor-arg value="male" index="1"/>
<constructor-arg value="22" index="2"/>
</bean>
<bean id="person1" class="com.lyh.domain.Person"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/hadoop?serverTimezone=UTC&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatisconfig.xml"/>
<property name="mapperLocations" value="classpath*:*Mapper.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<bean id="userDao" class="com.lyh.dao.UserMapperImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="addUser" propagation="REQUIRED"/>
<tx:method name="deleteUser" propagation="REQUIRED"/>
<tx:method name="update" propagation="REQUIRED"/>
<tx:method name="search*" propagation="REQUIRED"/>
<tx:method name="get" read-only="true"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com.lyh.dao.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
</beans>
UserMapper //接口映射
<?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.lyh.dao.UserMapper">
<select id="findAllUser" resultType="com.lyh.domain.UserTrue">
select *
from hadoop.user;
</select>
<insert id="addUser" parameterType="com.lyh.domain.UserTrue">
insert into hadoop.user
values (#{id}, #{name}, #{pwd});
</insert>
<delete id="deleteUser" parameterType="int">
# 测试事务原子性
delete
from hadoop.user
where id =
#{id};
</delete>
</mapper>
test //单元测试
package com.lyh.myspringtest;
import com.lyh.dao.UserMapper;
import com.lyh.domain.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class test {
@Test
public void springTest() {
ApplicationContext Context = new ClassPathXmlApplicationContext("springconfig.xml");
System.out.println("========================================");
System.out.println("Set注入:");
Hello helloTest = (Hello) Context.getBean("helloTest");
helloTest.show();
System.out.println("========================================");
System.out.println("构造注入:constructor-arg");
User user1 = (User) Context.getBean("user1");
String s = user1.toString();
System.out.println(s);
User user2 = (User) Context.getBean("user1");
String s2 = user1.toString();
System.out.println(s2);
System.out.println("========================================");
System.out.println("使用注解注入:@Autowired");
Person person1 = (Person) Context.getBean("person1");
User user = person1.getUser();
System.out.println(user.toString());
System.out.println("========================================");
System.out.println("使用注解开发:Component Value");
Student student = (Student) Context.getBean("student");
System.out.println(student.name + " age: " + student.age + " gender: " + student.gender);
}
@Test
public void mybatisTest() {
SqlSessionFactory sqlSessionFactory;
String resource = "mybatisconfig.xml";
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<UserTrue> allUser = mapper.findAllUser();
for (UserTrue user : allUser
) {
System.out.println(user.getId() + " " + user.getName() + " " + user.getPwd());
}
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void mybatis_springTest() {
ApplicationContext context = new ClassPathXmlApplicationContext("springconfig.xml");
UserMapper mapper = (UserMapper) context.getBean("userDao");
List<UserTrue> user = mapper.findAllUser();
for (UserTrue u : user) {
System.out.println(u.getId() + u.getName() + u.getPwd());
}
}
@Test
@Transactional(propagation = Propagation.REQUIRED)
public void mybatis_tx() {
ApplicationContext context = new ClassPathXmlApplicationContext("springconfig.xml");
UserMapper mapper = (UserMapper) context.getBean("userDao");
boolean i = mapper.addUser(new UserTrue(6, "tx", "txtxtx"));
System.out.println("i" + i);
boolean i1 = mapper.deleteUser(6);
System.out.println("i1" + i1);
}
}