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

这篇具有很好参考价值的文章主要介绍了mybatisPlus之自动填充功能及防全表更新与删除插件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自动填充功能

基本介绍 

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

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

 具体使用

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

mybatisPlus之自动填充功能及防全表更新与删除插件,mybatisPlus,数据库,mybatis,java,spring,springboot,JVM

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

@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的写法才能和实体类完成映射 

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

mybatisPlus之自动填充功能及防全表更新与删除插件,mybatisPlus,数据库,mybatis,java,spring,springboot,JVM

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

@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】测试插入操作

@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】测试更新操作 

@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拦截器

@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】测试全表更新,会出现抛出异常,防止了全表更新

@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);
}
}

mybatisPlus之自动填充功能及防全表更新与删除插件,mybatisPlus,数据库,mybatis,java,spring,springboot,JVM文章来源地址https://www.toymoban.com/news/detail-606173.html

到了这里,关于mybatisPlus之自动填充功能及防全表更新与删除插件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 禁止浏览器自动填充密码功能,设置自动填充背景色。

    text设置autocomplete=“off” password设置 autocomplete=“new-password” 两个一起设置,就不会自动填充了。 自动填充后,阴影颜色变为黑色。 需要设置为0,不显示阴影。 设置完后,自动填充没有阴影了。

    2024年02月16日
    浏览(39)
  • mybatis-plus 自动填充创建时间/更新时间

    方式一:数据库级别 创建时间create_time字段设置类型为timestamp,默认值为CURRENT_TIMESTAMP; 更新时间update_time字段设置类型为timestamp,默认值为CURRENT_TIMESTAMP,勾选 根据当前时间戳更新 。 实体类createTime字段设置数据类型为Date; 实体类updateTime字段设置数据类型为Date。 注意:

    2024年02月14日
    浏览(106)
  • Mybatis Plus 公共字段自动填充功能

    目录   1、问题引入 2、 基本功能实现 3、功能完善 3.1 ThreadLocal 3.1.1 介绍 3.1.2 常用方法 3.2 思路分析 3.3 代码实现 在我们的项目开发中,我们会发现有一些数据库表字段是每个表都有的,例如 : 创建时间,创建人 ,更新时间,更新人。 而我们目前的针对这些字段我们的目前

    2024年02月05日
    浏览(64)
  • mybatis-plus填充功能,自动设置值

    1、引入依赖 2、编写entity 3、编写处理器 4、测试 官网:自动填充功能 | MyBatis-Plus (baomidou.com)

    2024年02月09日
    浏览(40)
  • MybatisPlus插件功能详细介绍 自动分页 通用分页实体

    本课程全面讲解了Mybatis框架的使用,从快速入门到原理分析再到实战应用。每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握,从而使Mybatis的开发更加的高效,系统学习 通过项目的开发大家应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这

    2024年02月09日
    浏览(40)
  • git自动更新功能

    因为一般Linux系统网页用的 www 或 www-data 用户和用户组,所以要实现自动来去,首先要在www用户权限下生成 ssh密钥 ,不然没有权限,其次就是,要把用root用户拉去的代码,批量改成 www 用户 一切操作在www用户下完成 如果remote- roigin 远程地址是http的,改成ssh的,可以使用ss

    2024年02月04日
    浏览(31)
  • 小程序自动更新功能

    小程序自动更新功能 在 .vue 页面的 script 中添加生命周期,在生命周期内监听页面信息 onLoad onUnload

    2024年02月03日
    浏览(29)
  • 彻底禁用win10自动更新功能及其powershell代码

    以下禁用步骤实际上是找微软提供的方法, 可以禁用也可以恢复启用 ,健康无危害。 目前网络上常见的禁止更新方法有两种, 1、禁用Windows Update相关服务; 2、通过组策略禁止Windows Update更新。 事实证明这两种方法已经摆脱不了win10自动更新的魔爪,而且操作比较复杂对于

    2024年02月04日
    浏览(50)
  • 小程序弹幕自动滚动实时更新数据功能

    需求 最近遇到的需求,写一个弹幕功能 大致就是实现这样的效果 弹幕轮播,上下两排,一共30个弹幕,30个轮播完毕之后获取新的弹幕数据 实现方法  目前我想到的实现方法是用css的动画来实现这个功能 布局层级 给barrageBox盒子一个相对定位 给barrageList绝对定位 先将list盒子

    2024年01月20日
    浏览(47)
  • QT 简单实现自动更新程序(一) 效果展示 功能描述 ftp模式 http模式 配置文件更新 安装包更新

      该系列文章主要讲解自动更新程序相关,会从自动更新原理开始,到ftp与http不同下载方式,再到到如何实现配置文件更新与安装包更新,最后做成一个完整的软件。只是经验分享,描述内容并不绝对,如有误差欢迎指正。以ftp下载,配置文件更新模式为例,实现效果如下

    2024年02月10日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包