侧边栏壁纸
  • 累计撰写 3 篇文章
  • 累计创建 9 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

mybatisPlus 插件使用

code2fun
2023-04-14 / 0 评论 / 0 点赞 / 2,617 阅读 / 813 字

背景

项目已经在使用mybatisPlus,但是基本使用还是主要基本的mybatis功能加上自动生成功能。一些可以通过mybatisPlus 插件实现,减少开发成本。比如逻辑删除字段、创建修改人、更新时间等。

逻辑删除

 /**
     * 逻辑删除  0未删除1已删除
     */
    @TableLogic
    private Integer deleted;
	
	//仍然通过这种方式
	eq(BasicHteAgent::getDeleted, 0))

1.在代码中,发现部分表没有这个字段,可以加上。变成同意的规范
2.上面这个字段虽然已经加了,但是还是通过代码逻辑判断。可以直接修改注解即可

	@TableLogic(value = "0",delval = "1")
    private Integer deleted;

更新时间、插入时间、修改人、创建人

package com.yumei.cloud.database.mybatisplus;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
public class CustomMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        Date date = new Date();
        metaObject.setValue("createTime", date);
        metaObject.setValue("updateTime", date);
        // TODO: 2023/4/13  需要修改对应的包引用关系,目前公共模块未能拿到对应的用户上下文引用
        metaObject.setValue("creator", AuthUserContext.get().getAccount());
        metaObject.setValue("modifier", AuthUserContext.get().getAccount());

    }

    @Override
    public void updateFill(MetaObject metaObject) {
        metaObject.setValue("updateTime", date);
        // TODO: 2023/4/13  需要修改对应的包引用关系,目前公共模块未能拿到对应的用户上下文引用
        metaObject.setValue("modifier", AuthUserContext.get().getAccount());
    }
}

数据库实体类,实现对应的父类即可

package com.yumei.cloud.database.mybatisplus;

import com.baomidou.mybatisplus.annotation.*;

import java.io.Serializable;
import java.util.Date;

/**
 * 数据库通用字段
 */
public class CommonPO implements Serializable {
    /**
     * 主键di 自增
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;


    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 修改时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date modifyTime;


    /**
     * 创建用户
     */
    @TableField(fill = FieldFill.INSERT)
    private String creator;

    /**
     * 修改用户
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String modifier;


    /**
     * 是否删除   0否1是
     */
    @TableLogic(value = "0",delval = "1")
    private Integer deleted;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getModifyTime() {
        return modifyTime;
    }

    public void setModifyTime(Date modifyTime) {
        this.modifyTime = modifyTime;
    }

    public String getCreator() {
        return creator;
    }

    public void setCreator(String creator) {
        this.creator = creator;
    }

    public String getModifier() {
        return modifier;
    }

    public void setModifier(String modifier) {
        this.modifier = modifier;
    }

    public Integer getDeleted() {
        return deleted;
    }

    public void setDeleted(Integer deleted) {
        this.deleted = deleted;
    }
}

代码已经提交到git,细节点需要优化,代码已经提交 commit细节 其中获取用户上下文的细节需要再进行处理。

  1. 后续只需要继承CommonPO即可。(这块可以在自动生成类模板上加上就可)

其他拓展

mybatis-plus 插件实现的逻辑想要探究的可以翻下源码,看下细节。很多功能都可以通过插件实现,比如多租户,限制单条查询数量等。
简单的说就是在Sql 处理前,重写SQL.

额外要说的点,就是关于安全合规的问题。基于国家法规的要求,用户的个人信息以及敏感字段都需要做加密处理,我们基于插件,实现一个加解密方法,在插入的时候,进行加密,读取的时候进行解密。

0
博主关闭了所有页面的评论