5 【拓展篇】
5.1 逻辑删除
前面我们完成了基本的增删改查操作,但是对于删除操作来说,我们思考一个问题,在实际开发中我们真的会将数据完成从数据库中删除掉么?
 当然是不会的,这里我们举个例子:
 在电商网站中,我们会上架很多商品,这些商品下架以后,我们如果将这些商品从数据库中删除,那么在年底统计商品数据信息的时候,这个商品要统计的,所以这个商品信息我们是不能删除的。
 
 如果商城中的商品下架了,这时候我们将商品从数据库删掉
 
 那到了年终总结的时候,我们要总结一下这一年的销售额,发现少了20000,这肯定不合理。所以我们是不能将数据真实删除的。
 这里我们就采取逻辑删除的方案,逻辑删除的操作就是增加一个字段表示这个数据的状态,如果一条数据需要删除,我们通过改变这条数据的状态来实现,这样既可以表示这条数据是删除的状态,又保留了数据以便以后统计,我们来实现一下这个效果。
【1】先在表中增加一列字段,表示是否删除的状态,这里我们使用的字段类型为int类型,通过1表示该条数据可用,0表示该条数据不可用
 
【2】实体类添加一个字段为Integer,用于对应表中的字段
@Data
@AllArgsConstructor
@NoArgsConstructorpublic class User extends Model<User> {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @TableLogic(value = "1",delval = "0")
    private Integer status;
} 
【3】测试逻辑删除效果
@Testvoid logicDelete(){
    userMapper.deleteById(7L);
}
查看拼接的SQL语句,我们发现在执行删除操作的时候,语句变成了修改,是将这条数据的状态由1变为的0,表示这条数据为删除状态
 
 
 我们还可以通过全局配置来实现逻辑删除的效果
 
5.2 通用枚举
首先我们先来回顾一下枚举,什么是枚举呢?
 当我们想要表示一组信息,这组信息只能从一些固定的值中进行选择,不能随意写,在这种场景下,枚举就非常的合适。
 例如我们想要表示性别,性别只有两个值,要么是男性,要么是女性,那我们就可以使用枚举来描述性别。
 【1】我们先在表中添加一个字段,表示性别,这里我们一般使用int来描述,因为int类型可以通过0和1这两个值来表示两个不同的性别
 
 【2】编写枚举类
public enum GenderEnum {
    _MAN_(0,"男"),
    _WOMAN_(1,"女");
    private Integer gender;
    private String genderName;
    GenderEnum(Integer gender, String genderName) {
        this.gender = gender;
        this.genderName = genderName;
    }
} 
【3】实体类添加相关字段
@Data
@AllArgsConstructor
@NoArgsConstructorpublic class User extends Model<User> {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private GenderEnum gender;
    private Integer status;
}
【4】添加数据
@Testvoid enumTest(){
    User user = new User();
    user.setName("liu");
    user.setAge(29);
    user.setEmail("liu@powernode.com");
    user.setGenderEnum(GenderEnum._MAN_);
    user.setStatus(1);
    userMapper.insert(user);
} 
此时我们查看控制台,会发现添加失败了
 
 原因是我们无法将一个枚举类型作为int数字插入到数据库中。不过我们对于枚举类型都给了对应的int的值,所以这里我们只需要进行一个配置,就可以将枚举类型作为数字插入到数据库中,为属性gender,添加上@EnumValue注解
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;
    }
} 
此时我们再次执行添加操作,发现可以成功添加数据,而枚举类型的值也作为数据被插入到数据库中
 
 
5.3 字段类型处理器
在某些场景下,我们在实体类中是使用Map集合作为属性接收前端传递过来的数据的,但是这些数据存储在数据库时,我们使用的是json格式的数据进行存储,json本质是一个字符串,就是varchar类型。那怎么做到实体类的Map类型和数据库的varchar类型的互相转换,这里就需要使用到字段类型处理器来完成。
 【1】我们先在实体类中添加一个字段,Map类型
@Data
@AllArgsConstructor
@NoArgsConstructorpublic class User extends Model<User> {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private GenderEnum gender;
    private Integer status;
    private Map<String,String> contact;**//联系方式**} 
【2】在数据库中我们添加一个字段,为varchar类型
 
【3】为实体类添加上对应的注解,实现使用字段类型处理器进行不同类型数据转换
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(autoResultMap = true)**//查询时将json字符串封装为Map集合**public class User extends Model<User> {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private GenderEnum gender;
    private Integer status;
    @TableField(typeHandler = FastjsonTypeHandler.class)**//指定字段类型处理器
    **private Map<String,String> contact;**//联系方式**} 
【4】字段类型处理器依赖Fastjson这个Json处理器,所以我们需要引入对应的依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.76</version>
</dependency> 
【5】测试添加操作
@Testvoid typeHandler(){
    User user = new User();
    user.setName("zhang");
    user.setAge(28);
    user.setEmail("zhang@powernode.com");
    user.setGender(GenderEnum._MAN_);
    user.setStatus(1);
    HashMap<String, String> contact = new HashMap<>();
    contact.put("phone","010-1234567");
    contact.put("tel","13388889999");
    user.setContact(contact
 
                   
                   
                   
                   本文介绍了MybatisPlus的拓展特性,包括逻辑删除、通用枚举、字段类型处理器、自动填充功能、防全表更新与删除插件、MybatisX快速开发插件、乐观锁、代码生成器、执行SQL分析打印以及多数据源的使用。通过实例展示了如何实现和应用这些功能,提升开发效率和数据安全性。
本文介绍了MybatisPlus的拓展特性,包括逻辑删除、通用枚举、字段类型处理器、自动填充功能、防全表更新与删除插件、MybatisX快速开发插件、乐观锁、代码生成器、执行SQL分析打印以及多数据源的使用。通过实例展示了如何实现和应用这些功能,提升开发效率和数据安全性。
           最低0.47元/天 解锁文章
最低0.47元/天 解锁文章
                           
                       
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                  
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            