文章目录
-
- MyBatis整合步骤
- 目录
- pom.xml
- application.yml
- spboot程序入口
- [实体类 User](#实体类 User)
- [mapper 接口](#mapper 接口)
- [resources 文件夹下的 mapper.xml](#resources 文件夹下的 mapper.xml)
- [service ( @Transactional 就能添加事务)](#service ( @Transactional 就能添加事务))
- controller
- 添加AOP
- 声明式事务整合配置
- AOP整合配置
MyBatis整合步骤
- 导入依赖:在您的Spring Boot项目的构建文件(如pom.xml)中添加MyBatis和数据库驱动的相关依赖。例如,如果使用MySQL数据库,您需要添加MyBatis和MySQL驱动的依赖。
- 配置数据源:在
application.properties或application.yml中配置数据库连接信息,包括数据库URL、用户名、密码、mybatis的功能配置等。 - 创建实体类:创建与数据库表对应的实体类。
- 创建Mapper接口:创建与数据库表交互的Mapper接口。
- 创建Mapper接口SQL实现: 可以使用mapperxml文件或者注解方式
- 创建程序启动类
- 注解扫描:在Spring Boot的主应用类上添加
@MapperScan注解,用于扫描和注册Mapper接口。 - 使用Mapper接口:在需要使用数据库操作的地方,通过依赖注入或直接实例化Mapper接口,并调用其中的方法进行数据库操作。
目录

pom.xml
xml
<?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 http://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>3.0.5</version>
</parent>
<groupId>com.atguigu</groupId>
<artifactId>boot-mybatis</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.1</version>
</dependency>
<!-- 数据库相关配置启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- druid启动器的依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>1.2.20</version>
</dependency>
<!-- 驱动类-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
<!-- springboot 使用aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
<!--
SpringBoot应用打包插件
1、在SpringBoot项目中添加 spring-boot-maven-plugin 插件,
是为了:支持将项目打包成可执行的可运行jar包,
2、如果不添加 spring-boot-maven-plugin 插件配置,
使用常规的 java -jar 命令来运行打包后的SpringBoot项目,是无法找到应用程序的入口点,
因此导致无法运行。
-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml
yml
# druid连接池
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 使用druid连接池
druid:
url: jdbc:mysql:///mybatis-example
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# mabatis的配置,这里彻底舍弃了mybatis-config.xml
# 需要指定xxxMapper.xml的位置、settings的配置、别名的配置,等等
mybatis:
mapper-locations: classpath:/mappers/*.xml # 需要指定xxxMapper.xml的位置(在 Main.java 中通过@MapperScan("com.atguigu.mapper") 指定mapper接口所在的位置)
type-aliases-package: com.atguigu.pojo
configuration:
map-underscore-to-camel-case: true
auto-mapping-behavior: full
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
spboot程序入口
@MapperScan("com.atguigu.mapper")
使用 @MapperScan("com.atguigu.mapper") 指定 mapper接口 所在位置
java
package com.atguigu;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.atguigu.mapper") // mapper接口所在的位置
@SpringBootApplication
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}
实体类 User
java
package com.atguigu.pojo;
import lombok.Data;
@Data
public class User {
private int empId;
private String empName;
private double empSalary;
}
mapper 接口
java
package com.atguigu.mapper;
import com.atguigu.pojo.User;
import java.util.List;
public interface UserMapper {
List<User> queryAllUser();
int delete(int i);
}
resources 文件夹下的 mapper.xml
xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTO Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mapper.UserMapper">
<select id="queryAllUser" resultType="user">
select * from t_emp;
</select>
<delete id="delete">
delete from t_emp where emp_id = #{id}
</delete>
</mapper>
service ( @Transactional 就能添加事务)
java
package com.atguigu.service;
import com.atguigu.mapper.UserMapper;
import com.atguigu.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
@Transactional
public void delete(Integer id){
int rows = userMapper.delete(id);
System.out.println("rows= " + rows);
int i = 1 / 0;
}
public List<User> findAll(){
List<User> list = userMapper.queryAllUser();
return list;
}
}
controller
java
package com.atguigu.controller;
import com.atguigu.mapper.UserMapper;
import com.atguigu.pojo.User;
import com.atguigu.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("list")
public List<User> query(){
List<User> list = userService.findAll();
return list;
}
@GetMapping("delete/{id}")
public String deleteFn(@PathVariable Integer id){
userService.delete(id);
return "success";
}
}
添加AOP
java
package com.atguigu.advice;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class LogAdvice {
@Before("execution(* com.atguigu.service.*.*(..))")
public void before(JoinPoint joinPoint){
String className = joinPoint.getSignature().getDeclaringType().getSimpleName();
String methodName = joinPoint.getSignature().getName();
System.out.println("开始执行 - className = " + className + ", methodName = " + methodName);
}
}
浏览器访问 http://localhost:8080/user/list
因为添加了 AOP,
所以,就会打印 开始执行 - className = UserService, methodName = findAll


声明式事务整合配置
依赖导入:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
因为,SpringBoot项目会自动配置一个 DataSourceTransactionManager,
所以,我们只需在方法(或者类)加上 @Transactional 注解,
就自动纳入 Spring 的事务管理了
java
@Transactional
public void update(){
User user = new User();
user.setId(1);
user.setPassword("test2");
user.setAccount("test2");
userMapper.update(user);
}
AOP整合配置
依赖导入:
xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
直接使用aop注解即可:
java
@Component
@Aspect
public class LogAdvice {
@Before("execution(* com..service.*.*(..))")
public void before(JoinPoint joinPoint){
System.out.println("LogAdvice.before");
System.out.println("joinPoint = " + joinPoint);
}
}