MybatisPlus全局自动填充配置 & 自定义类型处理器
Posted Shinka_YXS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MybatisPlus全局自动填充配置 & 自定义类型处理器相关的知识,希望对你有一定的参考价值。
自定义实现类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属性映射中的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等配置不起作用,导致类加载失败
springboot+mybatis 自定义类型处理器配置无效问题
以上是关于MybatisPlus全局自动填充配置 & 自定义类型处理器的主要内容,如果未能解决你的问题,请参考以下文章
MybatisPlus全局自动填充配置 & 自定义类型处理器
MybatisPlus全局自动填充配置 & 自定义类型处理器
[MyBatisPlus]常用注解_@TableName_@TableId_@TableField_@TableLogic&&通过全局配置配置主键生成策略
[MyBatisPlus]常用注解_@TableName_@TableId_@TableField_@TableLogic&&通过全局配置配置主键生成策略