MyBatis-Plus 是一个 MyBatis 的增强工具,它提供了许多便捷功能,简化了 CRUD 操作,提升了开发效率。该工具不仅简化了开发流程,还提供了自动填充、逻辑删除和乐观锁等高级功能。本文将详细介绍 MyBatis-Plus 的使用方法、环境搭建以及高级功能解析,帮助开发者更好地理解和使用 MyBatis-Plus。
MyBatis-Plus简介MyBatis-Plus 是一个 MyBatis 的增强工具,它在 MyBatis 的基础上提供了大量的便捷功能,使得 CRUD 操作更加简单高效。该工具不仅简化了开发流程,还提升了开发效率,从而降低了开发难度。
MyBatis-Plus的基本概念MyBatis-Plus 是一个 MyBatis 的增强工具,旨在简化开发、提升效率。它主要通过扩展 MyBatis 提供的 API 和功能,提供了许多便捷的工具和特性,例如:
- CRUD 操作简化:简化了常见的 CRUD(增删改查)操作,提供了更简洁的 API。
- 条件构造器:提供了一种链式调用方式,便于构建复杂的查询条件。
- 分页插件:内置了分页插件,可以方便地进行分页操作。
- 逻辑删除:支持逻辑删除,即不删除数据库中的记录,而是在记录上添加一个标志位来表示删除状态。
- 乐观锁:提供了乐观锁机制,支持在数据更新过程中防止数据冲突。
- 自动生成器:提供了自动生成代码的功能,可以快速生成实体类、Mapper 接口等。
MyBatis-Plus 在 MyBatis 的基础上主要提供了以下功能特点:
- 自动创建CRUD方法:使用 MyBatis-Plus,用户无需手动编写每个 CRUD 方法,通过继承
BaseMapper
接口,MyBatis-Plus 自动为实体类生成相应的 CRUD 方法。 - 链式查询:提供了一种链式查询的方式,可以在查询条件中进行多层嵌套,便于构建复杂的查询逻辑。
- 自定义Sql执行器:支持自定义 SQL 执行器,可以通过
Executor
接口实现自定义的 SQL 查询和更新逻辑。 - 分页插件:内置了分页插件,简化了分页查询的操作,只需调用
Page
对象即可实现分页。 - 逻辑删除:支持逻辑删除,即不删除数据库中的记录,而是在记录上添加一个标志位来表示删除状态。
- 乐观锁:提供了乐观锁机制,支持在数据更新过程中防止数据冲突。
- 自动填充:支持自动填充字段,例如填充创建时间、更新时间等。
MyBatis-Plus 的主要优势在于其简化了开发流程,提升了开发效率,降低了开发难度。具体优势包括:
- 简化开发:通过自动创建 CRUD 方法、链式查询等功能,大幅简化了开发流程。
- 提升效率:提供了丰富的便捷功能,减少了开发人员的手动编写代码的工作量。
- 降低难度:通过自动填充、逻辑删除等功能,降低了开发难度,使得开发更加便捷。
- 易维护:通过自动生成代码和内置插件,使得代码更加易维护,减少了手工编码带来的维护成本。
MyBatis-Plus 的应用场景广泛,尤其适用于需要进行 CRUD 操作的场景。例如:
- 用户管理模块:用户注册、登录、信息修改等操作。
- 商品管理系统:商品增删改查、库存管理等。
- 订单管理系统:订单生成、修改、删除等操作。
- 博客系统:文章发布、编辑、删除等操作。
- 后台管理系统:权限管理、日志管理等。
在开始使用 MyBatis-Plus 之前,需要搭建好开发环境,并引入 MyBatis-Plus 的依赖,配置数据库连接。
开发环境配置- 开发工具:建议使用 IntelliJ IDEA 或 Eclipse 等现代集成开发环境(IDE)。
- 语言环境:Java 开发环境。
- 运行环境:JDK 1.8 及以上版本。
- 构建工具:Maven 或 Gradle。
- 数据库:支持 MySQL、Oracle、SQL Server、PostgreSQL、SQLite、Derby 等主流数据库。
在 pom.xml 文件中添加 MyBatis-Plus 的依赖,以下是 Maven 依赖配置示例:
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
对于 Gradle 项目,可以在 build.gradle
文件中添加如下依赖:
dependencies {
implementation('com.baomidou:mybatis-plus-boot-starter:3.4.3')
implementation('mysql:mysql-connector-java:8.0.23')
implementation('org.springframework.boot:spring-boot-starter-jdbc')
implementation('org.springframework.boot:spring-boot-starter-web')
}
数据库连接配置
在 application.yml
或 application.properties
文件中配置数据库连接信息。以下是 application.yml
示例:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatisplus
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
通过以上步骤,MyBatis-Plus 环境搭建完成。接下来可以开始使用 MyBatis-Plus 进行开发。
MyBatis-Plus基本使用MyBatis-Plus 提供了一系列便捷的功能,使得 CRUD 操作更加简单高效。本节将详细介绍如何定义实体类与 Mapper 接口,以及如何进行 CRUD 操作和条件构造器的使用。
实体类与Mapper接口的定义实体类是 MyBatis-Plus 操作数据库的基础,通常对应数据库中的表。实体类需要遵循一些命名规范,并且可以添加一些注解来增强功能。
实体类定义
以下是用户实体类 User
的定义示例:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableLogic
private Integer deleted;
// Getter and Setter methods
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
}
@TableName
注解用于指定实体类对应的数据库表名。@TableId
注解用于指定主键字段,并且可以通过type
属性指定主键生成策略,例如IdType.AUTO
表示自增。private
字段表示实体类的属性。
Mapper接口定义
Mapper 接口继承 BaseMapper
接口,MyBatis-Plus 会自动生成相应的 CRUD 方法。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
BaseMapper<User>
表示该接口对应User
实体类。
MyBatis-Plus 提供了丰富的 CRUD 方法,包括新增、删除、更新、查询等操作。
新增操作
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void insertUser(User user) {
userMapper.insert(user);
}
}
insert
方法用于插入一条新的用户记录。
删除操作
public void deleteUserById(Long id) {
userMapper.deleteById(id);
}
deleteById
方法用于根据主键删除一条用户记录。
更新操作
public void updateUser(User user) {
userMapper.updateById(user);
}
updateById
方法用于更新一条用户记录,需要注意的是,需要传入完整的用户对象。
查询操作
public User getUserById(Long id) {
return userMapper.selectById(id);
}
public List<User> getAllUsers() {
return userMapper.selectList(null);
}
selectById
方法用于根据主键查询一条用户记录。selectList
方法用于查询所有用户记录,参数可以传入查询条件。
MyBatis-Plus 提供了 QueryWrapper
和 UpdateWrapper
等条件构造器,用于构建复杂的查询条件。
查询条件构造器
public List<User> getUsersByName(String name) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", name);
return userMapper.selectList(wrapper);
}
QueryWrapper
构建查询条件,eq
方法用于构建等于条件。
更新条件构造器
public void updateUsersByName(String name, Integer age) {
UpdateWrapper<User> wrapper = new UpdateWrapper<>();
wrapper.eq("name", name).set("age", age);
userMapper.update(null, wrapper);
}
UpdateWrapper
构建更新条件,set
方法用于设置更新值。
MyBatis-Plus 提供了一些高级功能,例如分页插件、逻辑删除、乐观锁等,这些功能可以进一步提升数据库操作的效率和安全性。
分页插件的使用MyBatis-Plus 内置了分页插件,可以方便地进行分页操作。
分页插件配置
在 application.yml
中配置分页插件:
mybatis-plus:
global-config:
db-config:
id-type: AUTO
sequence:
type: snowflake
value: 001
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.example.demo.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
分页查询示例
public List<User> getUsersByPage(int currentPage, int pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
QueryWrapper<User> wrapper = new QueryWrapper<>();
List<User> users = userMapper.selectPage(page, wrapper).getRecords();
return users;
}
Page
构造器需要传入当前页码和每页大小。selectPage
方法返回Page
对象,通过getRecords
方法获取分页后的用户列表。
逻辑删除
逻辑删除是指不物理删除数据库中的记录,而是通过添加一个标志位来表示删除状态。MyBatis-Plus 支持逻辑删除,可以通过注解配置。
import com.baomidou.mybatisplus.annotation.TableLogic;
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableLogic
private Integer deleted;
// Getter and Setter methods
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
}
@TableLogic
注解用于指定逻辑删除字段。
乐观锁
乐观锁是指在数据更新过程中,检查数据是否被其他事务修改过。MyBatis-Plus 支持乐观锁,可以通过注解配置。
import com.baomidou.mybatisplus.annotation.Version;
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@Version
private Integer version;
// Getter and Setter methods
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
}
@Version
注解用于指定乐观锁字段。
逻辑删除与乐观锁示例
public void deleteLogicById(Long id) {
userMapper.deleteById(id);
}
public void updateUserWithVersion(User user) {
userMapper.updateById(user);
}
deleteById
方法用于逻辑删除用户记录。updateById
方法用于更新用户记录,并自动更新乐观锁字段。
MyBatis-Plus 提供了自动填充和序列表的功能,可以方便地填充某些字段和生成序列号。
自动填充
自动填充是指在插入或更新数据时,自动填充某些字段,例如创建时间和更新时间。
自动填充配置
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableFieldFill;
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableLogic
private Integer deleted;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
// Getter and Setter methods
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}
@TableField(fill = FieldFill.INSERT)
表示在插入数据时自动填充字段。@TableField(fill = FieldFill.UPDATE)
表示在更新数据时自动填充字段。
序列表使用
序列表用于生成唯一的序列号,可以用于自增主键等场景。
序列表配置
在 application.yml
中配置序列表:
mybatis-plus:
global-config:
db-config:
id-type: NONE
sequence:
type: snowflake
value: 001
id-type: NONE
表示使用自定义的序列号生成策略。sequence.type
表示序列号生成的类型,例如snowflake
。sequence.value
表示序列号生成的值。
自动填充与序列表示例
public void insertUser(User user) {
userMapper.insert(user);
}
public void updateUser(User user) {
userMapper.updateById(user);
}
insert
方法用于插入用户记录,自动填充createTime
字段。updateById
方法用于更新用户记录,自动填充updateTime
字段。
MyBatis-Plus 可以与 Spring Boot 无缝集成,提供了便捷的配置和使用方式,使得开发更加高效。本节将介绍如何在 Spring Boot 项目中引入 MyBatis-Plus,并配置 MapperScannerConfigurer
,最后通过一个用户管理模块的实战案例来展示 MyBatis-Plus 的使用。
在 Spring Boot 项目中引入 MyBatis-Plus 需要添加相关的依赖,并进行相应的配置。
依赖管理
在 pom.xml
文件中添加 MyBatis-Plus 的依赖:
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
``
对于 Gradle 项目,可以在 `build.gradle` 文件中添加如下依赖:
```gradle
dependencies {
implementation('com.baomidou:mybatis-plus-boot-starter:3.4.3')
implementation('mysql:mysql-connector-java:8.0.23')
implementation('org.springframework.boot:spring-boot-starter-jdbc')
implementation('org.springframework.boot:spring-boot-starter-web')
}
数据库连接配置
在 application.yml
文件中配置数据库连接信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatisplus
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
hibernate:
dialect: org.hibernate.dialect.MySQL5InnoDBDialect
MyBatis-Plus配置
在配置文件中配置 MyBatis-Plus 的相关设置:
mybatis-plus:
global-config:
db-config:
id-type: AUTO
sequence:
type: snowflake
value: 001
mapper-locations: classpath*:mapper/*.xml
type-aliases-package: com.example.demo.entity
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
配置MapperScannerConfigurer
在 Spring Boot 项目中可以通过 @MapperScan
注解扫描 Mapper 接口。
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@MapperScan
注解用于指定 Mapper 接口的扫描路径。
实体类与Mapper接口
定义实体类和对应的 Mapper 接口:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
@TableLogic
private Integer deleted;
// Getter and Setter methods
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getDeleted() {
return deleted;
}
public void setDeleted(Integer deleted) {
this.deleted = deleted;
}
}
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
}
- 实体类
User
用于映射数据库表。 - Mapper 接口
UserMapper
继承BaseMapper
接口,自动生成对应的 CRUD 方法。
接下来通过一个用户管理模块的实战案例来展示 MyBatis-Plus 的使用。
用户管理模块实现
定义用户服务类 UserService
:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void insertUser(User user) {
userMapper.insert(user);
}
public void deleteUserById(Long id) {
userMapper.deleteById(id);
}
public void updateUser(User user) {
userMapper.updateById(user);
}
public User getUserById(Long id) {
return userMapper.selectById(id);
}
public List<User> getAllUsers() {
return userMapper.selectList(null);
}
public List<User> getUsersByName(String name) {
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", name);
return userMapper.selectList(wrapper);
}
}
insertUser
方法用于插入用户记录。deleteUserById
方法用于根据主键删除用户记录。updateUser
方法用于更新用户记录。getUserById
方法用于根据主键查询用户记录。getAllUsers
方法用于查询所有用户记录。getUsersByName
方法用于查询指定姓名的用户记录。
用户控制器类 UserController
定义用户控制器类 UserController
:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public void insertUser(@RequestBody User user) {
userService.insertUser(user);
}
@DeleteMapping("/{id}")
public void deleteUserById(@PathVariable Long id) {
userService.deleteUserById(id);
}
@PutMapping("/{id}")
public void updateUser(@PathVariable Long id, @RequestBody User user) {
user.setId(id);
userService.updateUser(user);
}
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
@GetMapping("/name/{name}")
public List<User> getUsersByName(@PathVariable String name) {
return userService.getUsersByName(name);
}
}
insertUser
方法用于插入用户记录。deleteUserById
方法用于根据主键删除用户记录。updateUser
方法用于更新用户记录。getUserById
方法用于根据主键查询用户记录。getAllUsers
方法用于查询所有用户记录。getUsersByName
方法用于查询指定姓名的用户记录。
测试用户管理模块
通过 Postman 或者其他工具进行测试,可以验证用户管理模块的功能是否正常。
测试插入用户
POST /users
Content-Type: application/json
{
"name": "张三",
"age": 22,
"email": "zhangsan@example.com"
}
测试查询所有用户
GET /users
测试查询指定主键的用户
GET /users/1
测试查询指定姓名的用户
GET /users/name/张三
测试更新用户
PUT /users/1
Content-Type: application/json
{
"name": "李四",
"age": 23,
"email": "lisi@example.com"
}
测试删除用户
DELETE /users/1
通过以上步骤,用户管理模块的实现完成,可以验证通过 MyBatis-Plus 实现的 CRUD 操作是否正常。
常见问题与解决方案在使用 MyBatis-Plus 过程中,可能会遇到一些常见问题,这些问题通常可以通过查阅相关文档或通过调试来解决。
MyBatis-Plus运行时常见错误NullPointerException
java.lang.NullPointerException
- 原因:通常是因为注入的 Mapper 接口为空,检查注入是否正确。
- 解决方案:检查
@MapperScan
注解是否正确配置,确保 Mapper 接口被正确扫描到。
MapperException
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.reflection.SystemMetaObject cannot be cast to java.lang.String
- 原因:通常是 Mapper 接口的 XML 文件配置错误或 SQL 语法错误。
- 解决方案:检查 Mapper 接口对应的 XML 文件配置,确保 SQL 语句正确。
SQLGrammarException
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column 'age' at row 1
- 原因:通常是 SQL 语句中列的数据类型与插入的数据不匹配。
- 解决方案:检查插入的数据类型是否符合数据库表的定义,调整插入的数据或修改数据库表的定义。
SQLTimeoutException
java.sql.SQLTimeoutException: Statement execute timed out
- 原因:通常是查询或更新操作超时。
- 解决方案:增加查询或更新操作的超时时间,优化 SQL 语句。
MybatisPlusException
com.baomidou.mybatisplus.exceptions.MybatisPlusException:
Error: Can not found column : id in table : user
- 原因:通常是 Mapper 方法的 SQL 语句与数据库表的字段定义不匹配。
- 解决方案:检查 Mapper 方法的 SQL 语句是否正确,确保 SQL 语句中的字段名与数据库表的字段名一致。
- 检查依赖:确认项目依赖是否完整,是否正确引入了 MyBatis-Plus 的相关依赖。
- 检查配置:确认配置文件中的数据库连接信息是否正确,MyBatis-Plus 的相关配置是否正确。
- 检查日志:查看应用程序的日志输出,找到错误的日志信息,根据日志信息进行问题定位。
- 检查代码:确认实体类和 Mapper 接口的定义是否正确,Mapper 接口的 XML 文件配置是否正确。
- 调试工具:使用调试工具(如 IntelliJ IDEA 的调试功能)进行调试,逐步排查问题。
- 查阅文档:查阅 MyBatis-Plus 的官方文档,查找相关问题的解决方案。
- 使用
@TableField
注解:合理使用@TableField
注解,例如通过fill
属性自动填充字段。 - 逻辑删除:对于需要撤销的记录,使用逻辑删除而非物理删除,以保留数据的历史信息。
- 乐观锁:在数据更新操作中使用乐观锁,防止数据冲突。
- 分页插件:使用内置的分页插件简化分页操作,避免手动编写复杂的分页逻辑。
- 自动生成代码:利用 MyBatis-Plus 的自动生成器生成 CRUD 方法,减少手动编码。
- 链式查询:利用链式查询方式构建复杂的查询条件,提高代码可读性。
- 优化 SQL 语句:优化 SQL 语句,避免不必要的查询和更新操作,提高数据库性能。
- 依赖注入:通过 Spring 的依赖注入功能,合理配置 Mapper 接口,确保代码的可维护性。
- 使用@Transactional:在适当的地方使用
@Transactional
注解,确保事务的正确处理。 - 使用
@TableLogic
注解:在需要逻辑删除的字段上使用@TableLogic
注解,确保逻辑删除功能的正确实现。
通过以上最佳实践,可以更好地利用 MyBatis-Plus 的功能,提升开发效率和代码质量。
共同学习,写下你的评论
评论加载中...
作者其他优质文章