网站首页 > 开源技术 正文
MyBatis-Plus 是基于 MyBatis 的增强工具,为简化 MyBatis 的开发提供了诸多功能扩展。它的目标是减少重复代码、提高开发效率,提供了 CRUD(Create, Read, Update, Delete)操作的简化方法以及多种实用插件。以下是 MyBatis-Plus 的核心插件及其使用介绍:
1.分页插件(PaginationInterceptor)
分页是开发中常见的需求,MyBatis-Plus 提供了简单易用的分页插件。
配置分页插件:
在 Spring Boot 项目中,配置分页插件很简单:
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
分页查询示例:
// 使用Page对象进行分页查询
Page<User> page = new Page<>(1, 10); // 第1页,每页10条数据
IPage<User> userPage = userMapper.selectPage(page, null);
selectPage方法通过 Page 对象自动封装了分页的参数。
2.乐观锁插件(OptimisticLockerInterceptor)
乐观锁用于在更新数据时避免脏数据的出现,MyBatis-Plus 支持乐观锁插件,它主要通过版本号 version 来控制。
配置乐观锁插件:
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
使用乐观锁:
在实体类中增加 @Version 注解标记乐观锁字段,通常是 version 字段。
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;
@Data
public class User {
private Long id;
private String name;
@Version
private Integer version; // 版本号
}
更新时自动处理版本号:
// 假设当前version为1
User user = userMapper.selectById(1L);
user.setName("New Name");
userMapper.updateById(user); // 执行后,version会自动更新
MyBatis-Plus 会在更新时自动检查 version,如果 version 不匹配,则更新失败。
3.逻辑删除插件(LogicDelete)
逻辑删除是一种常见的数据处理方式,MyBatis-Plus 支持通过逻辑删除插件将删除操作转换为更新操作,使数据不会真正从数据库中删除。
配置逻辑删除插件:
MyBatis-Plus 默认已经支持逻辑删除,无需额外插件配置。只需要在实体类中配置 @TableLogic 注解。
使用逻辑删除:
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;
@Data
public class User {
private Long id;
private String name;
@TableLogic
private Integer deleted; // 逻辑删除字段,1表示已删除,0表示未删除
}
调用逻辑删除:
// 调用逻辑删除
userMapper.deleteById(1L); // 实际上是更新deleted字段为1,而不是物理删除
4.自动填充插件(MetaObjectHandler)
自动填充插件用于在插入或更新数据时,自动设置一些特定字段的值(如创建时间、更新时间)。
实现自动填充功能:
首先需要自定义一个类,实现 MetaObjectHandler 接口,定义填充逻辑。
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 插入时自动填充字段
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
// 更新时自动填充字段
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
实体类中配置自动填充字段:
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class User {
private Long id;
private String name;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime; // 插入时自动填充
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime; // 插入和更新时自动填充
}
5.SQL 性能分析插件(SqlExplainInterceptor)
为了提高开发效率和排查 SQL 问题,MyBatis-Plus 提供了 SQL 性能分析插件,可以在开发环境中输出执行的 SQL 及其消耗时间。
配置 SQL 性能分析插件:
import com.baomidou.mybatisplus.extension.plugins.SqlExplainInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public SqlExplainInterceptor sqlExplainInterceptor() {
return new SqlExplainInterceptor();
}
}
该插件主要用于开发环境,不建议在生产环境中使用。
6.防止全表更新与删除插件(BlockAttackInterceptor)
MyBatis-Plus 提供了防止全表更新或删除的插件,防止误操作导致整个表的数据被更新或删除。
配置防止全表更新与删除插件:
import com.baomidou.mybatisplus.extension.plugins.BlockAttackInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public BlockAttackInterceptor blockAttackInterceptor() {
return new BlockAttackInterceptor();
}
}
启用后,当执行 update(null) 或 delete(null)(即没有 where 条件)时会抛出异常。
7.多租户插件(TenantLineInnerInterceptor)
多租户插件允许你在多租户环境中为每个 SQL 自动添加租户 ID,以实现数据隔离。
配置多租户插件:
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisPlusConfig {
@Bean
public TenantLineInnerInterceptor tenantLineInnerInterceptor() {
return new TenantLineInnerInterceptor(new TenantLineHandler() {
@Override
public Expression getTenantId() {
// 实现返回当前租户 ID 的逻辑
return new LongValue(1L); // 例如租户 ID 为1
}
@Override
public boolean ignoreTable(String tableName) {
// 可以指定某些表不进行多租户处理
return "user".equals(tableName);
}
});
}
}
通过这些插件,MyBatis-Plus 可以显著简化开发过程,减少重复代码,提高效率,同时保障安全性和性能。如果需要使用更多插件或自定义功能,MyBatis-Plus 还提供了丰富的扩展接口供开发者使用。
- 上一篇: 如何在文档中去掉页码的详细步骤解析
- 下一篇: 基于ssm框架的少儿编程在线培训系统+vue
猜你喜欢
- 2024-11-13 程序员们,你们有Clean下自己Code吗?
- 2024-11-13 索引表、数据页、执行计划、IO统计、B+Tree的运行逻辑
- 2024-11-13 MyBatis Plus中的Lambda查询实践(mybatis plus lambda)
- 2024-11-13 基于ssm框架的少儿编程在线培训系统+vue
- 2024-11-13 如何在文档中去掉页码的详细步骤解析
- 2024-11-13 快讯!福建省最快10号可查询高考录取结果,附查询入口
- 2024-11-13 如何轻松设置浏览器主页以提升上网体验
- 2024-11-13 基于Web的数字家庭网站+vue(web of science)
- 2024-11-13 数据字典使用过程(数据字典用法)
- 2024-11-13 如何在Word文档中彻底删除页码的详细步骤
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)