mybatisPlus之自动填充功能及防全表更新与删除插件

简介: mybatisPlus之自动填充功能及防全表更新与删除插件

自动填充功能

基本介绍

Mybatis-plus自动填充功能是指在数据库表进行增、删、改、查操作时,自动将某些字段的值进行填充。这些字段的值可以是当前时间、登录用户ID等。

在项目中有一些属性,如果我们不希望每次都填充的话,我们可以设置为自动填充,比如常见的时间,创建时间和更新时间可以设置为自动填充。

具体使用

【1】在数据库的表中添加两个字段

【2】在实体类中,添加对应字段,并为需要自动填充的属性指定填充时机

1. @Data
2. @NoArgsConstructor
3. @AllArgsConstructor
4. @TableName(autoResultMap = true)
5. public class User extends Model<User> {
6. @TableId
7. private Long id;
8. private String name;
9. private Integer age;
10. private String email;
11. private Integer status;
12. private GenderEnum gender;
13. @TableField(typeHandler = FastjsonTypeHandler.class)
14. private Map<String,String> contact;
15. @TableField(fill = FieldFill.INSERT)
16. private Date createTime;
17. @TableField(fill = FieldFill.INSERT_UPDATE)
18. private Date updateTime;
19. }

   @TableField(fill = FieldFill.INSERT)

   private Date createTime;

   @TableField(fill = FieldFill.INSERT_UPDATE)

   private Date updateTime;

【3】注意只有设置了下划线和小驼峰映射,这种mysql的写法才能和实体类完成映射

mybatis-plus:

 global-config:

   db-config:

     logic-not-delete-value: 0

     logic-delete-value: 5

     logic-delete-field: status

 configuration:

   log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

   map-underscore-to-camel-case: true

【3】编写自动填充处理器,指定填充策略

1. @Component
2. public class MyMetaHandler implements MetaObjectHandler {
3. @Override
4. public void insertFill(MetaObject metaObject) {
5.         setFieldValByName("createTime",new Date(),metaObject);
6.         setFieldValByName("updateTime",new Date(),metaObject);
7.     }
8. 
9. @Override
10. public void updateFill(MetaObject metaObject) {
11.         setFieldValByName("updateTime",new Date(),metaObject);
12.     }
13. }

【4】测试插入操作

1. @Test
2. void testFill(){
3. User user = new User();
4.     user.setName("wang");
5.     user.setAge(35);
6.     user.setEmail("wang@powernode.com");
7.     user.setGender(GenderEnum.MAN);
8.     user.setStatus(1);
9.     HashMap<String, String> contact = new HashMap<>();
10.     contact.put("phone","010-1234567");
11.     contact.put("tel","13388889999");
12.     userMapper.insert(user);
13. }

【5】测试更新操作

1. @Test
2. void testFill2(){
3. User user = new User();
4.     user.setId(6L);
5.     user.setName("wang");
6.     user.setAge(35);
7.     user.setEmail("wang@powernode.com");
8.     user.setGender(GenderEnum.MAN);
9.     user.setStatus(1);
10.     HashMap<String, String> contact = new HashMap<>();
11.     contact.put("phone","010-1234567");
12.     contact.put("tel","13388889999");
13. 
14.     userMapper.updateById(user);
15. }

防全表更新与删除插件

基本介绍

在实际开发中,全表更新和删除是非常危险的操作,在MybatisPlus中,提供了插件和防止这种危险操作的发生。MybatisPlus提供了一个叫做"SqlExplainInterceptor"的拦截器,可以用于防止全表更新和删除操作。

开启后,当数据库操作SQL中出现“UPDATE”或者“DELETE”的时候,拦截器会对SQL进行解析,如果存在没有带条件的“UPDATE”或者“DELETE”语句,拦截器会抛出异常,从而防止全表更新和删除操作。

需要注意的是,此拦截器只能拦截MybatisPlus自动生成的SQL语句,无法拦截手写的SQL语句,因此在编写手写SQL时仍需要注意防止全表更新和删除操作。

具体使用

【1】注入MybatisPlusInterceptor类,并配置BlockAttackInnerInterceptor拦截器

1. @Configuration
2. public class MybatisPlusConfig {
3. @Bean
4. public MybatisPlusInterceptor mybatisPlusInterceptor() {
5. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
6. //分页插件
7.         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
8. //防全表更新与删除插件
9.         interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
10. return interceptor;
11.     }
12. }

【2】测试全表更新,会出现抛出异常,防止了全表更新

1. @SpringBootTest
2. public class QueryTest {
3. 
4. @Autowired
5. private UserService userService;
6. 
7. @Test
8. void allUpdate(){
9. User user = new User();
10.     user.setId(999L);
11.     user.setName("wang");
12.     user.setEmail("wang@powernode.com");
13.     userService.saveOrUpdate(user,null);
14. }
15. }

相关文章
|
3月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
537 1
Spring boot 使用mybatis generator 自动生成代码插件
|
4月前
|
SQL Java 数据安全/隐私保护
发现问题:Mybatis-plus的分页总数为0,分页功能失效,以及多租户插件的使用。
总的来说,使用 Mybatis-plus 确实可以极大地方便我们的开发,但也需要我们理解其工作原理,掌握如何合适地使用各种插件。分页插件和多租户插件是其中典型,它们的运用可以让我们的代码更为简洁、高效,理解和掌握好它们的用法对我们的开发过程有着极其重要的意义。
477 15
|
7月前
|
Java 数据库连接 Spring
MyBatis-Plus关键功能使用
通过本文的详细介绍,您可以系统地了解并掌握MyBatis-Plus的关键功能,进一步提高开发效率和代码质量。
267 23
|
7月前
|
XML SQL Java
十二、MyBatis分页插件
十二、MyBatis分页插件
174 17
|
8月前
|
SQL Java 数据库连接
Mybatis拦截器实现公共字段填充
通过使用MyBatis拦截器,可以实现对公共字段的自动填充,简化代码,提高开发效率。拦截器通过拦截SQL操作,在插入和更新操作时自动填充公共字段,使得开发者不再需要手动设置这些字段。本文详细介绍了实现步骤,并通过示例代码展示了具体实现方法,希望能为您的开发工作提供实用的指导和帮助。
501 13
|
10月前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
1217 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
10月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
1614 5
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
10月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
11月前
|
Java 数据库连接 容器
Mybatis-Plus核心功能
Mybatis-Plus核心功能
149 4
|
12月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用