第一种方式new一个MetaObjectHandler重写insertFill和updateFill方法
package com.msb.msbdongbaoums.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.time.LocalDateTime;
/**
* @program: takeOut
* @ClassName MyConfig
* @description:
* @author: MSY
* @create: 2022-06-01 10:44
* @Version 1.0
**/
@Configuration
@Slf4j
public class MyConfig {
@Bean
public MetaObjectHandler metaObjectHandler(){
return new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
log.info("开始处理 insert方式 公共字段");
metaObject.setValue("createTime", LocalDateTime.now());
metaObject.setValue("updateTime", LocalDateTime.now());
// metaObject.setValue("createUser", BaseContext.getCurrentId());
// metaObject.setValue("updateUser", BaseContext.getCurrentId());
}
@Override
public void updateFill(MetaObject metaObject) {
//验证LoginFilter 的doFilter
// MyMetaObjectHandler的updateFill
// EmployeeController的update方法使用同一线程
Long sameId = Thread.currentThread().getId();
log.info("doFilter updateFill update sameId = {}", sameId);
log.info("开始处理 update方式 公共字段");
metaObject.setValue("updateTime", LocalDateTime.now());
// metaObject.setValue("updateUser", BaseContext.getCurrentId());
}
};
}
}
第二种方式:官方的写法
package com.msb.msbdongbaoums.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
}
}
导入依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
配置application.yml
server:
port: 8080
spring:
application:
name: reggie_take_out
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3307/takeout?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
mybatis-plus:
configuration:
#在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: ASSIGN_ID
filepath:
upload: d:\imgs\
写自动生成代码的类
package com.xxx.xxxxgenerator;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import java.io.File;
import java.util.ArrayList;
public class DongBaoGenerator {
public static void main(String[] args) {
// 构建一个代码生成对象
AutoGenerator mpg = new AutoGenerator();
// 1. 全局配置
GlobalConfig gc = new GlobalConfig();
String separator = File.separator;
gc.setOutputDir("H:\\Internet_cat\\msb-dongbao-mall-parentv1\\xxx-xxxbao-service\\xxx-xxxbao-ums\\src\\main\\java");
gc.setAuthor("小白浩、");
gc.setOpen(false);//打开目录
gc.setFileOverride(true);//是否覆盖
gc.setServiceName("%sService");//去Service的I前缀。
gc.setIdType(IdType.ID_WORKER);
gc.setDateType(DateType.ONLY_DATE);
gc.setSwagger2(false);
mpg.setGlobalConfig(gc);
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/msb_dongbao_test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 包设置
PackageConfig pc = new PackageConfig();
pc.setParent("com.msb.msbdongbaoums");
pc.setEntity("pojo");
pc.setMapper("mapper");
pc.setController("controller");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("ums_member");//表名
strategy.setNaming(NamingStrategy.underline_to_camel);// 下划线转他驼峰
strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 列 下划线转脱发
strategy.setEntityLombokModel(true);//lombok 开启
strategy.setLogicDeleteFieldName("deleted");
// 自动填充
TableFill gmtCreate = new TableFill("create_time", FieldFill.INSERT);
TableFill gmtModify = new TableFill("update_time",FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<TableFill>();
tableFills.add(gmtCreate);
tableFills.add(gmtModify);
strategy.setTableFillList(tableFills);
//乐观锁
strategy.setVersionFieldName("version");
// restcontroller
strategy.setRestControllerStyle(true);
strategy.setControllerMappingHyphenStyle(true);// localhost:xxx/hello_2
mpg.setStrategy(strategy);
mpg.execute();
}
}