mybatisplus全局自动填充配置&自定义类型处理器(代码片段)

Shinka_YXS Shinka_YXS     2022-12-09     523

关键词:

自定义实现类MetaHandler

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

import java.time.ZonedDateTime;

@Component
public class MetaHandler implements MetaObjectHandler 

    /**
     * 新增数据执行
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) 
        setValue("createTime", ZonedDateTime.now(), metaObject);
        setValue("updateTime", ZonedDateTime.now(), metaObject);
    

    /**
     * 更新数据执行
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) 
        setValue("updateTime", ZonedDateTime.now(), metaObject);
    

    private void setValue(String fieldName, Object value, MetaObject metaObject) 
        Object field = getFieldValByName(fieldName, metaObject);
        if (field == null && value != null) 
            setFieldValByName(fieldName, value, metaObject);
        
    


数据源配置类

@Configuration
@EnableConfigurationProperties(MybatisPlusProperties.class)
public class DataSourcePrimaryConfig 

    @Autowired
    private MybatisPlusProperties properties;

    /**
     * 创建 SqlSessionFactory
     */
    @Bean(name = "primarySqlSessionFactory")
    @Primary
    public SqlSessionFactory testSqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource) throws Exception 
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/xxx/**/*.xml"));

        GlobalConfig globalConfig = this.properties.getGlobalConfig();
        // 全局自动填充配置
        globalConfig.setMetaObjectHandler(new MetaHandler());
        bean.setGlobalConfig(globalConfig);

        bean.setVfs(SpringBootVFS.class);
        // 自定义类型处理器的路径
        bean.setTypeHandlersPackage("com.xxx.xxx.common.persistence.typehandler");
        
        return bean.getObject();
    

ZonedDateTime类型处理

package com.xxx.xxx.common.persistence.typehandler;

import org.apache.ibatis.lang.UsesJava8;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.*;
import java.time.ZoneId;
import java.time.ZonedDateTime;

/**
 * mybatis 3.5以上自带的ZonedDateTimeTypeHandler 需要驱动的支持
 * @author Shinka
 * @date 2021/08/26
 */
@UsesJava8
public class ZonedDateTimeTypeHandler extends BaseTypeHandler<ZonedDateTime> 

    private static ZonedDateTime getZonedDateTime(Timestamp timestamp) 
        if (timestamp != null) 
            return ZonedDateTime.ofInstant(timestamp.toInstant(), ZoneId.systemDefault());
        
        return null;
    

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, ZonedDateTime parameter, JdbcType jdbcType)
            throws SQLException 
        ps.setTimestamp(i, Timestamp.from(parameter.toInstant()));
    

    @Override
    public ZonedDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException 
        Timestamp timestamp = rs.getTimestamp(columnName);
        return getZonedDateTime(timestamp);
    

    @Override
    public ZonedDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException 
        Timestamp timestamp = rs.getTimestamp(columnIndex);
        return getZonedDateTime(timestamp);
    

    @Override
    public ZonedDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException 
        Timestamp timestamp = cs.getTimestamp(columnIndex);
        return getZonedDateTime(timestamp);
    


字段注解

@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
protected ZonedDateTime createTime;

@ApiModelProperty(value = "更新时间")
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
protected ZonedDateTime updateTime;

参考

自动填充相关

官方文档 - 自动填充功能

mybatis-plus实现对创建时间和更新时间的自动填充

MyBatis-Plus如何自动填充数据表的创建时间和更新时间

mybatis-plus如何自动填充字段创建时间和修改时间

Mybatis-plus实现主键自增和自动注入时间

MybatisPlus自动维护数据库时间戳

时间类型相关

mybatis属性映射中的ZonedDateTime,用于插入到MS-SQL

mybatis中使用Java8的日期LocalDate、LocalDateTime

自定义类型处理器相关

mybatis typeHandlers 类型处理器(xml配置四)

mybatis学习(一):XML配置-TypeHandler

MyBatis 3.5.5 参考文档 类型处理器(typeHandlers)

基于SpringBoot自定义实现Mybatis-TypeHandler

SpringBoot Mybatis EnumTypeHandler自定义统一处理器

spring boot 与mybatis整合,type-aliases-package、type-handlers-package等配置不起作用,导致类加载失败

更新时自定义的TypeHandler不生效

FastjsonTypeHandler不生效

springboot+mybatis 自定义类型处理器配置无效问题

Springboot整合Mybatis使用TypeHandler来转换数据库中的数据

MyBatis-Plus自动填充功能失效导致的原因及解决

mybatisplus全局自动填充配置&自定义类型处理器(代码片段)

自定义实现类MetaHandlerimportcom.baomidou.mybatisplus.core.handlers.MetaObjectHandler;importorg.apache.ibatis.reflection.MetaObject;importorg.springframework.stereotype.Component;importjava.time.ZonedDateTime;@ComponentpublicclassMetaHandlerimplementsMetaObjectHandler/***新增数据执行... 查看详情

mybatisplus字段自动填充配置(代码片段)

实体类@ApiModelProperty(value="创建时间")@TableField(fill=FieldFill.INSERT)privateDategmtCreate;@ApiModelProperty(value="更新时间")@TableField(fill=FieldFill.INSERT_UPDATE)privateDategmtModified;Handler处理器packag 查看详情

mybatisplus的自动填充功能使用!

有时我们希望在更新数据的时候,自动完成某些字段的值的填充,如创建一个实体的时候,自动生成创建时间,更新的时候自动改变更新时间等。在指定字段标注注解,生成器策略部分也可以配置。//创建时间@TableField(fill=FieldFil... 查看详情

mybatisplus详细教程(代码片段)

目录一、什么是MybatisPlus二、快速入门2.1、创建数据库mybatis_plus2.2、创建user表2.3、插入数据2.4、初始化项目2.5、添加依赖2.6、配置(连接数据库)2.7、编码2.8、开始使用2.9、小结三、配置日志​四、CRUD4.1、插入测试4.2、自定义ID生... 查看详情

[mybatisplus]常用注解_@tablename_@tableid_@tablefield_@tablelogic&&通过全局配置配置主键生成策略

常用注解@TableName设置实体类所对应的表名如果全部表都有某个前缀,难道我们要通过一个一个加注解的方式来解决实体类对应表名问题吗?我们可以通过配置文件来解决这个问题:@TableId将属性所对应的字段指定为... 查看详情

[mybatisplus]常用注解_@tablename_@tableid_@tablefield_@tablelogic&&通过全局配置配置主键生成策略(代码片段)

常用注解@TableName设置实体类所对应的表名如果全部表都有某个前缀,难道我们要通过一个一个加注解的方式来解决实体类对应表名问题吗?我们可以通过配置文件来解决这个问题:@TableId将属性所对应的字段指定为... 查看详情

mybatisplus自动填充

mybatisplus自动填充数据库表的创建时间、修改时间,这些个操作一遍都是自动化完成的,我们不希望手动更新。这时候自动填充便可以发挥作用了。1、方式一数据库级别(注意:不建议此方式,因为工作中不允许你修改数据库)... 查看详情

mybatisplus是啥

参考技术AMyBatis-Plus (opensnewwindow)(简称MP)是一个 MyBatis (opensnewwindow)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响... 查看详情

关于mybatisplus中metaobjecthandler自动填充功能出现的问题及处理

1、自动填充的字段:createdBy,updatedBy,createdDate,updatedDate/***插入使用*/@OverridepublicvoidinsertFill(MetaObjectmetaObject){Stringoperator="bokai";fillValue(metaObject,CREATED_BY,()->operator);fillValue(met 查看详情

springboot----mybatisplus插件

自动填充注解实体字段publicclassUser{@TableField(fill=FieldFill.INSERT)privateDatecreateTime;@TableField(fill=FieldFill.INSERT_UPDATE)privateDateupdateTime;}自定义实现类@ComponentpublicclassMyMetaObjectHandlerimplemen 查看详情

mybatisplus字段自动填充失效,填充值为null的一种解决方法

文章目录问题描述问题剖析解决方法问题描述有一个实体类UserEntity对其属性UserEntity#createTime字段注解了@TableField(fill=FieldFill.INSERT)根据业务需要定义了UserMapper#inserUser()方法,参数注解了@Param(“user”)如下:当调... 查看详情

springboot自动配置原理源码分析+自定义starter启动器+可视化监控+mybatisplus使用(代码片段)

一、springBoot自动化配置原理1.starter管理机制通过依赖了解SpringBoot管理了哪些starter通过依赖spring-boot-dependencies搜索starter-发现非常多的官方starter,并且已经帮助我们管理好了版本。项目中使用直接引入对应的starter即可,... 查看详情

mybatis-plus自动填充功能-踩坑(代码片段)

Mybatis-Plus自动填充功能-踩坑今天柯南君想用MybatisPlus自动填充功能来填充创建时间和修改时间的时候,按照Mybatis-Plus自动填充功能的配置来配置时,发现未生效。第一步:注解填充字段/***创建时间*/@TableField(value... 查看详情

mybatis-plus自动填充功能-踩坑(代码片段)

Mybatis-Plus自动填充功能-踩坑今天柯南君想用MybatisPlus自动填充功能来填充创建时间和修改时间的时候,按照Mybatis-Plus自动填充功能的配置来配置时,发现未生效。第一步:注解填充字段/***创建时间*/@TableField(value... 查看详情

springboot整合mybatis-plus分页自动填充功能(代码片段)

...插件配置类在包dzxx.crud.config中创建分页插件配置类:MybatisPlusConfig,并修改数据库的类型。然后添加@configuration和@mapperScan注解,packagedzxx.crud.config;importcom.baomidou.mybatisplus.annotation.DbType;importcom.baomidou.mybatisplus.exte... 查看详情

mybatisplus高级(代码片段)

...f0c;例如记录的创建时间,更新时间等。我们可以使用MyBatisPlus的自动填充功能,完成这些字段的赋值工作:7.1.1原理实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler,确定填充具体操作注解... 查看详情

初学者必看,springboot+mybatisplus+swagger快速开发套路和总结

快速开发套路和总结​​一、模块开发​​​​快速开发套路​​​​建module​​​​改pom​​​​yml​​​​主启动​​​​二、业务类开发​​​​业务类(手动)​​​​建表写sql​​​​实体类、dao、service​​​​controlle... 查看详情

mybatisplus快速入门(2021.07.16)(代码片段)

目录一、MyBatis-Plus入门1、简介2、创建并初始化数据库3、确认idea配置4、创建项目5、编写代码二、主键策略1、插入操作2、MP的主键策略三、自动填充和乐观锁1、更新操作2、自动填充3、乐观锁4、乐观锁实现流程四、查询1、查询... 查看详情