1. 程式人生 > >使用MyBatis Plus自動新增新增資料庫表中的建立時間、建立者、更新時間、更新者

使用MyBatis Plus自動新增新增資料庫表中的建立時間、建立者、更新時間、更新者

使用到Sringboot、Mybatis Plus、Shiro、Mysql

1、建立一張部門表,表結構

CREATE TABLE `sys_dept` (
  `dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '部門id',
  `parent_id` bigint(20) DEFAULT '0' COMMENT '父部門id',
  `dept_name` varchar(30) DEFAULT '' COMMENT '部門名稱',
  `order_num` int(4) DEFAULT '0' COMMENT '顯示順序',
  `status` tinyint(1) DEFAULT '0' COMMENT '部門狀態(0:正常 1:停用)',
  `create_by` varchar(64) DEFAULT '' COMMENT '建立者',
  `create_time` datetime DEFAULT NULL COMMENT '建立時間',
  `update_by` varchar(64) DEFAULT '' COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新時間',
  `remark` varchar(200) DEFAULT '' COMMENT '備註',
  PRIMARY KEY (`dept_id`)
) ENGINE=MyISAM AUTO_INCREMENT=27 DEFAULT CHARSET=utf8

2、配置檔案中新增下面的程式碼

package com.zjc.config.mybatisplus;

import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import com.zjc.config.mybatisplus.handler.MetaHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.Properties;

@Configuration
public class MyBatisPlusConfig {

    /**
     * 自動填充功能
     * @return
     */
    @Bean
    public GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setMetaObjectHandler(new MetaHandler());
        return globalConfig;
    }

}

3、MetaHandler類的程式碼

/**
 * 處理新增和更新的基礎資料填充,配合BaseEntity和MyBatisPlusConfig使用
 */
@Component
public class MetaHandler implements MetaObjectHandler {

    private static final Logger logger = LoggerFactory.getLogger(MetaHandler.class);

    /**
     * 新增資料執行
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        SysUserEntity userEntity = ShiroUtil.getUser();
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("createBy", userEntity.getLoginName(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
        this.setFieldValByName("updateBy", userEntity.getLoginName(), metaObject);
    }

    /**
     * 更新資料執行
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        SysUserEntity userEntity = ShiroUtil.getUser();
        this.setFieldValByName("updateTime", new Date(), metaObject);
        this.setFieldValByName("updateBy", userEntity.getLoginName(), metaObject);
    }
}

4、使用MyBatis Plus執行正常的增刪改操作,例如下面的新增

@RequiresPermissions("sys:dept:add")
@PostMapping("/add")
@ResponseBody
public R add(@RequestBody SysDeptEntity deptEntity) {
    logger.info("新增資訊={}", deptEntity);
    sysDeptService.save(deptEntity);