文章目录
MyBatis-Plus 是一个在 MyBatis 基础上进行增强的持久层框架,主要目标是简化开发,减少重复代码。
1. 环境准备
依赖添加
首先在你的项目中添加 MyBatis-Plus 的相关依赖。
如果是 Maven 项目,pom.xml
中添加以下依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>最新版本号</version>
</dependency>
其他依赖(如 MySQL):
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
配置数据库
在 application.yml
中配置你的数据库连接信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
2. 创建基础实体类
假设我们有一个 User
表:
CREATE TABLE user (
id BIGINT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(30) DEFAULT NULL,
age INT(11) DEFAULT NULL,
email VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (id)
);
对应的实体类 User.java
:
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user")
public class User {
@TableId
private Long id;
private String name;
private Integer age;
private String email;
}
@TableName
:用于指定数据库表名,若类名与表名一致可以省略。@TableId
:标识主键。
3. 编写 Mapper 接口
创建一个 UserMapper
接口,继承 MyBatis-Plus 提供的 BaseMapper
。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
MyBatis-Plus 会自动生成常用的 CRUD 方法,常见方法如下:
insert()
deleteById()
updateById()
selectById()
selectList()
4. Service 层
为了更好地管理业务逻辑,可以创建 Service 层。MyBatis-Plus 提供了 IService
和 ServiceImpl
作为基础类。
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
}
实现类:
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
ServiceImpl
类提供了基本的增删改查功能。
5. 控制器层
编写控制器层来处理客户端的请求:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
// 查询所有用户
@GetMapping("/list")
public List<User> list() {
return userService.list();
}
// 根据ID查询用户
@GetMapping("/{id}")
public User getById(@PathVariable("id") Long id) {
return userService.getById(id);
}
// 新增用户
@PostMapping("/add")
public boolean add(@RequestBody User user) {
return userService.save(user);
}
// 修改用户
@PutMapping("/update")
public boolean update(@RequestBody User user) {
return userService.updateById(user);
}
// 删除用户
@DeleteMapping("/delete/{id}")
public boolean delete(@PathVariable("id") Long id) {
return userService.removeById(id);
}
}
6. 分页功能
MyBatis-Plus 提供了简单的分页功能,只需添加 Page
参数即可。
依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
Controller 中添加分页查询:
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
// 分页查询
@GetMapping("/page")
public Page<User> page(@RequestParam(defaultValue = "1") int current,
@RequestParam(defaultValue = "10") int size) {
Page<User> page = new Page<>(current, size);
return userService.page(page);
}
}
7. 条件构造器
MyBatis-Plus 提供了非常强大的条件构造器 QueryWrapper
,可用于复杂查询。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@GetMapping("/search")
public List<User> search(@RequestParam String name, @RequestParam Integer age) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", name).eq("age", age);
return userService.list(queryWrapper);
}
8. 配置乐观锁
乐观锁可以通过版本号字段实现。首先在实体类中添加 @Version
注解。
import com.baomidou.mybatisplus.annotation.Version;
@Data
@TableName("user")
public class User {
@TableId
private Long id;
private String name;
private Integer age;
private String email;
@Version
private Integer version;
}
然后在 application.yml
中启用乐观锁插件:
mybatis-plus:
configuration:
optimistic-locker: true
9. 常见问题
-
MyBatis-Plus 自定义 SQL 查询
如果需要自定义 SQL,可以在UserMapper
接口中添加注解或者编写 XML 文件:@Select("SELECT * FROM user WHERE age > #{age}") List<User> selectByAge(@Param("age") Integer age);
-
事务管理
可以通过 Spring 的@Transactional
注解来管理事务。@Transactional public boolean saveUser(User user) { return userService.save(user); }
MyBatis-Plus 极大简化了数据库操作的开发工作,提供了 CRUD 方法、分页、条件构造器、乐观锁等常用功能,同时也可以支持自定义 SQL 查询。
10. 代码生成器
下面是一个详细的 MyBatis-Plus 代码生成器教程,从创建数据库表开始,到生成代码的步骤:
1. 创建数据库表
首先,你需要在你的数据库中创建一个表。例如,我们创建一个名为 user
的表:
CREATE DATABASE mybatis_plus_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE mybatis_plus_db;
CREATE TABLE user (
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
name VARCHAR(50) NOT NULL COMMENT '用户名',
age INT(11) DEFAULT NULL COMMENT '年龄',
email VARCHAR(100) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
) COMMENT='用户表';
2. 引入依赖
在你的 Maven 项目的 pom.xml
中添加 MyBatis-Plus 和代码生成器的依赖:
<?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>
<groupId>com.example</groupId>
<artifactId>mybatis-plus-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<slf4j.version>1.7.36</slf4j.version>
</properties>
<dependencies>
<!-- MyBatis-Plus 核心包 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- MyBatis-Plus 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version> <!-- 或者根据需求使用最新的版本 -->
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
</dependencies>
</project>
3. 配置数据库连接
在 application.yml
或 application.properties
中配置你的数据库连接:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_plus_db?useSSL=false&serverTimezone=UTC
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
4. 编写代码生成器
在你的项目中创建一个新的 Java 类,例如 CodeGenerator
,用来生成代码:
package com.example;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import java.sql.Types;
import java.util.Collections;
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus_db" +
"?useUnicode=true&characterEncoding=UTF-8" +
"&useSSL=true&serverTimezone=Asia/Shanghai",
"root", "password123")
// 全局配置
.globalConfig(builder -> {
builder.author("username")
// 代码生成后不打开文件夹
.disableOpenDir()
// 时间日期格式,默认为 "yyyy-MM-dd"
.commentDate("yyyy-MM-dd HH:mm:ss")
// 文件生成位置
.outputDir(System.getProperty("user.dir") + "/src/main/java");
})
// 包配置
.packageConfig(builder -> {
// 包路径
builder.parent("com.example")
// entity 命名(controller/service/mapper 一样适用)
.entity("pojo")
// 路径配置信息
.pathInfo(Collections.singletonMap(OutputFile.xml,
System.getProperty("user.dir") + "/src/main/resources/com/username/MybatisPlus"));
})
// 策略配置
.strategyConfig(builder -> {
// 精准添加生成代码的表(也可以进行模糊匹配 like/模糊排除表 noLike/精准排除 addExclude)
builder.addInclude("user", "user_id_card")
// 实体类配置
.entityBuilder()
// 开启 lombok 生成 @Getter@Setter
.enableLombok()
// 字段注解
.enableTableFieldAnnotation()
// 雪花算法
.idType(IdType.ASSIGN_ID)
// 表字段自动填充
.addTableFills(new Column("created_time", FieldFill.INSERT))
.addTableFills(new Column("modified_time", FieldFill.INSERT_UPDATE))
.build()
// 控制器配置
.controllerBuilder()
.enableRestStyle()
.mapperBuilder()
.build();
})
// 使用默认 Velocity 引擎模板生成代码
.templateEngine(new VelocityTemplateEngine())
.execute();
}
}
5. 运行代码生成器
确保你已连接到数据库,并在你的 IDE 中运行 CodeGenerator
类。生成的代码会自动输出到你指定的目录(如 src/main/java
)。
6. 查看生成的代码
在 src/main/java
目录下,你会看到生成的实体类、Mapper 接口、Service 接口及其实现类、Controller 等文件。