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月前
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
15天前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
95 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
5天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
14天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
Java 数据库连接 容器
Mybatis-Plus核心功能
Mybatis-Plus核心功能
|
2月前
|
SQL Java 数据库连接
解决mybatis-plus 拦截器不生效--分页插件不生效
本文介绍了在使用 Mybatis-Plus 进行分页查询时遇到的问题及解决方法。依赖包包括 `mybatis-plus-boot-starter`、`mybatis-plus-extension` 等,并给出了正确的分页配置和代码示例。当分页功能失效时,需将 Mybatis-Plus 版本改为 3.5.5 并正确配置拦截器。
607 6
解决mybatis-plus 拦截器不生效--分页插件不生效
|
2月前
|
SQL 存储 Java
原生JDBC简单实现Mybatis核心功能
本文介绍了在Vertx项目中使用Tdengine时,因缺乏异步JDBC驱动而采用同步驱动结合`vertx.executeBlocking`实现异步查询的方法。文中详细描述了自行开发的一个简易JDBC工具,该工具实现了SQL参数绑定与返回值映射至实体类的功能,简化了原生JDBC的繁琐操作。通过具体示例展示了其实现过程及代码细节,并与原生JDBC进行了对比,突显了其便捷性和实用性。
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
3月前
|
供应链 前端开发 Java
服装库存管理系统 Mybatis+Layui+MVC+JSP【完整功能介绍+实现详情+源码】
该博客文章介绍了一个使用Mybatis、Layui、MVC和JSP技术栈开发的服装库存管理系统,包括注册登录、权限管理、用户和货号管理、库存管理等功能,并提供了源码下载链接。
服装库存管理系统 Mybatis+Layui+MVC+JSP【完整功能介绍+实现详情+源码】
|
3月前
|
Java 数据库 Spring
MyBatisPlus分页插件在SpringBoot中的使用
这篇文章介绍了如何在Spring Boot项目中配置和使用MyBatis-Plus的分页插件,包括创建配置类以注册分页拦截器,编写测试类来演示如何进行分页查询,并展示了测试结果和数据库表结构。
MyBatisPlus分页插件在SpringBoot中的使用