Mybatis Plus公共字段自动填充

本文介绍了如何在Java项目中通过MybatisPlus和ThreadLocal技术解决重复的公共字段赋值问题,包括在实体类中使用@TableField注解设置自动填充策略,以及如何在元数据对象处理器中利用ThreadLocal获取和设置登录用户ID,以简化代码并提高开发效率。
摘要由CSDN通过智能技术生成

目录

一、问题分析

1.多次编写相同的字段赋值代码,会让代码杂糅

2.考虑将公共字段放在某个地方统一处理,来简化开发

二、实现步骤 

1.在实体类属性上加入@TableField注解,在注解中设置属性,指定自动填充的策略

2.按照mybatis plus框架要求编写元数据对象处理器(一个类)

三、什么是ThreadLocal?

1.ThreadLocal并不是一个线程(Thread),而是线程(Thread)的局部变量

2.ThreadLocal常用方法

3.获取当前登录用户id

四、通过ThreadLocal获取创建用户和更新用户的实现步骤

1.编写BaseContext工具类,基于ThreadLocal封装的工具类

2.设置当前登录用户id

3.在MyMetaobjectHandler的方法中调用BaseContext获取登录用户的id         ​

4.代码:元数据对象处理器(MyMetaObjecthandler)


一、问题分析

1.多次编写相同的字段赋值代码,会让代码杂糅

    当我们进行系统的某些管理功能时,比如员工管理中的新增员工,虽然前台页面没有显示某些字段,但数据库表中存在的一些不为空字段仍然需要我们赋值。因此就需要我们在controller中设置创建时间、创建人、修改时间、修改人等字段;员工管理中的编辑员工,需要设置修改时间和修改人等字段。这些字段属于公共字段,也就是很多数据库表中都有这些字段,很多功能中都会用到这些字段。如果功能太多,然后又在每个功能中都编写相同的赋值代码,会让代码杂糅。

2.考虑将公共字段放在某个地方统一处理,来简化开发

    使用Mybatis Plus提供的公共字段自动填充功能,在插入或更新的时候为指定字段赋予指定的值,统一对这些字段进行处理。

controller中新增员工的代码:

   /**
     * 新增员工
     *
     * @param employee 新增的员工信息
     * @return 结果信息
     */
    @PostMapping    
    //@RequestBody:将json格式的数据封装到Employee对象中
    public R<String> save(HttpServletRequest request, @RequestBody Employee employee) {
        log.info("新增员工,员工信息:{}", employee.toString());

        //设置初始密码123456,需要进行md5加密处理
        employee.setPassword(DigestUtils.md5DigestAsHex("123456".getBytes()));

        //LocalDateTime.now()获取当前系统时间
        employee.setCreateTime(LocalDateTime.now());       //设置创建时间
        employee.setUpdateTime(LocalDateTime.now());       //设置更新时间
        //获取当前登录用户
        Long empId = (Long) request.getSession().getAttribute("employee");
        //获取登录用户的id
        employee.setCreateUser(empId);  //设置创建人
        employee.setUpdateUser(empId);  //设置更新人

        employeeService.save(employee);
        return R.success("新增员工成功");
    }

二、实现步骤 

1.在实体类属性上加入@TableField注解,在注解中设置属性,指定自动填充的策略

(1)哪些属性是公共字段,就在哪些属性上加上该注解,

(2)填充的策略:FieldFill(java提供的api,是一个枚举)

(3)代码:员工实体类

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 员工实体类
 */
@Data
public class Employee implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;    //主键

    private String username;    //用户名

    private String name;    //姓名

    private String pass
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值