首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >mybatisPlus之自动填充功能及防全表更新与删除插件

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

作者头像
一个风轻云淡
发布2023-10-15 11:14:21
发布2023-10-15 11:14:21
1K0
举报
文章被收录于专栏:java学习javajava学习java

自动填充功能

基本介绍 

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

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

 具体使用

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

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

代码语言:javascript
复制
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(autoResultMap = true)
public class User extends Model<User> {
    @TableId
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private Integer status;
    private GenderEnum gender;
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private Map<String,String> contact;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

    @TableField(fill = FieldFill.INSERT)     private Date createTime;     @TableField(fill = FieldFill.INSERT_UPDATE)     private Date updateTime; 

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

代码语言:javascript
复制
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】编写自动填充处理器,指定填充策略

代码语言:javascript
复制
@Component
public class MyMetaHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        setFieldValByName("createTime",new Date(),metaObject);
        setFieldValByName("updateTime",new Date(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName("updateTime",new Date(),metaObject);
    }
}

 【4】测试插入操作

代码语言:javascript
复制
@Test
void testFill(){
    User user = new User();
    user.setName("wang");
    user.setAge(35);
    user.setEmail("wang@powernode.com");
    user.setGender(GenderEnum.MAN);
    user.setStatus(1);
    HashMap<String, String> contact = new HashMap<>();
    contact.put("phone","010-1234567");
    contact.put("tel","13388889999");
    userMapper.insert(user);
}

【5】测试更新操作 

代码语言:javascript
复制
@Test
void testFill2(){
    User user = new User();
    user.setId(6L);
    user.setName("wang");
    user.setAge(35);
    user.setEmail("wang@powernode.com");
    user.setGender(GenderEnum.MAN);
    user.setStatus(1);
    HashMap<String, String> contact = new HashMap<>();
    contact.put("phone","010-1234567");
    contact.put("tel","13388889999");

    userMapper.updateById(user);
}
 防全表更新与删除插件
 基本介绍

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

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

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

具体使用

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

代码语言:javascript
复制
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //防全表更新与删除插件
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
        return interceptor;
    }
}

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

代码语言:javascript
复制
@SpringBootTest
public class QueryTest {

    @Autowired
    private UserService userService;

@Test
void allUpdate(){
    User user = new User();
    user.setId(999L);
    user.setName("wang");
    user.setEmail("wang@powernode.com");
    userService.saveOrUpdate(user,null);
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 自动填充功能
    • 基本介绍 
    •  具体使用
    •  防全表更新与删除插件
    •  基本介绍
    • 具体使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档