首页 > 其他分享 >【Mybatis-Plus】在项目中非常实用的小技巧

【Mybatis-Plus】在项目中非常实用的小技巧

时间:2024-11-28 09:29:34浏览次数:7  
标签:private class 实用 Plus user Integer Mybatis new public

目录

防止全表更新和删除

逻辑删除

方式一:类中字段配置

方式二:配置文件全局配置

 通用枚举

枚举类的创建

@EnumValue 注解的作用是什么?

自动填充

使用场景

使用步骤

1.在实体类中对应的属性上添加相关注解

2.添加全局处理器

字段类型处理器

字段类型处理器的实现方式


防止全表更新和删除

在实际开发中,全表更新和删除是非常危险的操作,在Mybatis-Plus中,提供了插件来防止这种危险操作的发生。

怎么实现呢?——创建一个拦截器,在config类中创建。

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // BlockAttackInnerInterceptor就是防止全表更新和删除的拦截器
        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

MybatisPlusInterceptor是MyBatis-Plus中用于管理SQL拦截逻辑的核心类

addInnerInterceptor 方法用于向 MybatisPlusInterceptor 添加内部拦截器

BlockAttackInnerInterceptor是MyBatis-Plus提供的一个拦截器,它用于防止全表更新和删除的 SQL 操作。它会拦截 UPDATE 和 DELETE 语句,确保执行这些操作时带有明确的 WHERE 条件,否则会抛出异常,防止误操作。

逻辑删除

方式一:类中字段配置

public class User{
    @TableId
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @TableLogic(value = "1", delval = "0")
    private Integer status;
}

当用mybatis-plus自带的delete去删除记录时,就只是把status置于0

当用mybatis-plus自带的select去查询记录时,就只查询status等于1的数据

方式二:配置文件全局配置

 通用枚举

枚举类的创建

public enum GenderEnum {
    MAN(0,"男"),
    WOMAN(1,"女");
    
    @EnumValue
    private Integer gender;

    private String genderName;

    GenderEnum(Integer gender, String genderName) {
        this.gender = gender;
        this.genderName = genderName;
    }
}

@EnumValue 注解的作用是什么?

让该属性作为插入到数据库中的数据

User user = new User();
user.setName("Joel");
user.setAge(20);
user.setEmail("Joel@123.com");
user.setStatus(1);
user.setGender(GenderEnum.MAN);

userMapper.insert(user);

自动填充

使用场景

数据库中有 create_time 和 update_time 两个字段,希望插入、更新数据的时候,这两个字段自动更新。

使用步骤

1.在实体类中对应的属性上添加相关注解

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

2.添加全局处理器

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

当然,实际开发中注意mysql和java工程环境的时区是否正确一致。

字段类型处理器

在某些场景下,我们在实体类中是使用Map集合作为属性接收前端传递过来的数据,但是这些数据存储在数据库时,我们使用的是json格式的数据进行存储,json本质是一个字符串,就是varchar类型。那怎么做到实体类的Map类型和数据库的varchar类型相互转换呢?这里就需要使用到字段类型处理器来完成。

字段类型处理器的实现方式

@TableName(autoResultMap = true)
public class User {
    @TableId
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @TableLogic(value = "1", delval = "0")
    private Integer status;
    private GenderEnum gender;
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private Map<String, String> contact; //联系方式
}

在字段上添加@TableField(typeHandler = FastjsonTypeHandler.class)是为了将数据插入到数据库中时实现map转成json

@TableName(autoResultMap = true)是为了从数据库中读出时将json转成map

当然,别忘了在pom文件中引入 Fastjson 的依赖哦。

标签:private,class,实用,Plus,user,Integer,Mybatis,new,public
From: https://blog.csdn.net/m0_75276797/article/details/143979508

相关文章

  • 如何使用ChatGPT:机械工程师的实用指南
    机械工程师在日常工作中需要处理设计、分析、文档撰写以及沟通等多种任务。ChatGPT可以作为一名高效的智能助手,帮助简化复杂流程、节省时间和激发创意。以下是针对机械工程师的实用指南,分为五个关键应用场景。1.设计与分析辅助角色:解答设计问题、提供分析建议ChatGPT可......
  • MySQL 性能优化:提升查询效率的实用技巧
    文章目录MySQL性能优化:提升查询效率的实用技巧前言优化方式数据库层面的优化硬件层面的优化慢查询日志分析与优化慢查询日志配置查看慢查询日志SQL语句优化使用`EXPLAIN`分析查询执行计划OrderBy优化Count优化分页查询优化分库分表总结MySQL性能优化:提升......
  • 问EBS R12中怎样实现输出格式是多sheet页excel报表,不用excel模板实现,而是在sqlplus中
    https://www.itpub.net/thread-2094848-1-1.html 来源 手工创建一个EXCEL,放一些数据进去,然后另存为xml表格,用notepad打开看看,里面有代码。把代码用SQL拼接起来。<?xmlversion="1.0"?><?mso-applicationprogid="Excel.Sheet"?><Workbookxmlns="urn:schemas-m......
  • Mybatis PLUS查询对List使用OR模糊查询
    MybatisPLUS查询对List使用OR模糊查询1、版本2、代码3、效果1、版本MybatisPLUS版本:3.5.7注意:版本3.1.2及以下是需要return的因当前为高版本,代码中已将return注释。2、代码QueryWrapper<Object>queryWrapper=newQueryWrapper<>();List<String>value......
  • 自定义MyBatis分页插件和自定义慢SQL统计插件实践
    ......
  • 工作学习笔记(十五)Mybatis-Plus项目中使用eq
    在今天的工作中遇到了一个问题,在这记录一下第一次使用eq()。方法作用它的主要作用是在构建SQL查询语句的条件部分时,添加一个等于的判断条件。例如,当你想从数据库表中查询出某一字段值等于特定值的记录时,就可以使用eq()方法来实现这个条件构建。方法语法及参数说明语法:......
  • mybatis 总结
    properties属性加载properties配置文件使用setting mybatis运行参数typeAliases类型别名typeHandles类型处理器objextFaactory都西昂工厂plusins插件environment环境变量 databaseIdProvider数据库厂商标识maper把sql应色号文件组测给mybatis运行首先获得配置资......
  • 我只用9分钟做了一个5M不到的跨平台掘金桌面端程序,并且支持自动签到,感谢开源项目PakeP
    以上跨平台桌面端程序全都是我只花了9分钟左右的时间做出来的,而且还添加了自定义的功能支持,比如抖音的自动播放和直播抢购,移除YouTube一些广告等,都是支持的,还有掘金的自动签到功能,也仅仅只加载了一个脚本文件就实现了。能这么快实现主要还是归功于开源免费项目PakePlus的支持。......
  • MybatisPlus入门(十二)Mybatis-Plus 代码生成器
    一、代码生成器代码生成器:代码由定义的模版、读取数据库和开发者自定义部分组成。-模板:MyBatisPlus提供,Mabatis-Plus收集了大量开发者写的标准代码,定义了模版,也可以开发者自定义模版。-数据库相关配置:读取数据库获取信息-开发者自定义配置:手工配置实体对象类:代码如下pa......
  • MybatisPlus入门(十一)MybatisPlus-乐观锁
    一、乐观锁修改操作中的问题;乐观锁,琐是用来解决并发问题的。例如秒杀业务,上了100个秒杀单子,如果到了最后一个,8个人一起买,会出现问题,卖出第0号-1号-2号,小型并发解决方案:乐观锁。二、Mybatis-Plus乐观锁实现步骤Mybatis-Plus乐观锁实现步骤:步骤一......