1、概述
-
Spring 与 MyBatis 整合的思路是将 MyBatis 所产生的对象交予 Spring 管理。
-
将 MyBatis 接口代理对象的创建权交给 Spring 管理。
2、Spring 与 MyBatis 整合步骤
1、引入 Maven 依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.8</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.7</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.8</version>
<scope>test</scope>
</dependency>
2、在src/main/resources
目录下,创建jdbc.properties
配置文件
jdbc_driver = com.mysql.cj.jdbc.Driver
jdbc_url = jdbc:mysql://127.0.0.1:3306/test_1?characterEncoding=UTF-8
jdbc_username = root
jdbc_password =
3、在src/main/resources
目录下,创建 MyBatis 核心配置文件mybatis.xml
在与 Spring 整合的过程中,MyBatis 的核心配置文件如果没有特殊配置的情况下是可以舍弃的,因为相关的配置会在 Spring 核心配置文件中完成,比如:数据源配置(相当于将数据源对象交予 Spring 容器进行管理)等。
如果 MyBatis 中存在特殊配置,也可以在 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>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<package name="com.yscyber.ssm.pojo"/>
</typeAliases>
</configuration>
4、在src/main/resources
目录下,创建 Spring 核心配置文件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"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.yscyber.ssm.service"/>
<!-- 引入 jdbc.properties -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源(交予 Spring 容器管理) -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<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>
<!-- 配置 SqlSessionFactory -->
<!-- id 一般为 sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis.xml"/>
</bean>
<!-- 配置 Mapper 扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.yscyber.ssm.repo"/>
</bean>
</beans>
5、编写 Java 代码
CREATE TABLE xxx(
id INT NOT NULL,
name VARCHAR(3) NOT NULL
);
package com.yscyber.ssm.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Data
@ToString
public class MyObj {
private Integer id;
private String name;
}
package com.yscyber.ssm.repo;
import com.yscyber.ssm.pojo.MyObj;
import java.util.List;
public interface MyObjRepo {
List<MyObj> listAllMyObjs();
}
<?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.yscyber.ssm.repo.MyObjRepo">
<select id="listAllMyObjs" resultType="MyObj" >
SELECT id,name
FROM xxx
</select>
</mapper>
package com.yscyber.ssm.service;
import com.yscyber.ssm.pojo.MyObj;
import java.util.List;
public interface MyObjService {
List<MyObj> listAllObjs();
}
package com.yscyber.ssm.service.impl;
import com.yscyber.ssm.pojo.MyObj;
import com.yscyber.ssm.repo.MyObjRepo;
import com.yscyber.ssm.service.MyObjService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class MyObjServiceImpl implements MyObjService {
@Autowired
private MyObjRepo myObjRepo;
@Override
public List<MyObj> listAllObjs() {
return myObjRepo.listAllMyObjs();
}
}
package com.yscyber.ssm;
import com.yscyber.ssm.pojo.MyObj;
import com.yscyber.ssm.service.MyObjService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class MyTest {
@Autowired
private MyObjService myObjService;
@Test
public void test1() {
List<MyObj> myObjList = myObjService.listAllObjs();
for (MyObj myObj : myObjList) {
System.out.println(myObj);
}
}
}
网友评论