Mybatis Plus多源数据库和自动更新updateTime问题
多源数据库配置
1、依赖配置
implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.2'
implementation 'com.baomidou:dynamic-datasource-spring-boot-starter:3.5.2'
2、配置文件
spring:
datasource:
dynamic:
primary: master #设置默认的数据源或者数据源组,默认值即为master
strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
datasource:
master:
url: jdbc:mysql://localhost:3306/db1?autoReconnect=true&failOverReadOnly=false&characterEncoding=utf8&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&useSSL=false
username: test
password: test
driver-class-name: com.mysql.cj.jdbc.Driver
db2:
url: jdbc:mysql://localhost:3306/db2?useSSL=false&autoReconnect=true&statementInterceptors=brave.mysql.TracingStatementInterceptor&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: test
password: test
3、数据库切换
@DS("master")
@Mapper
public interface UserMapper extends BaseMapper<UserEntity> {
}
4、debug日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
自动更新数据库的updateTime字段
1、实体类字段
@Data
public class UserEntity {
@TableId(type = AUTO)
private Integer id;
@TableField("user_id")
private String userId;
/**
* 创建时间
*/
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
2、配置
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Date;
@Configuration
public class MybatisConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MetaObjectHandler() {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
};
}
}
3、使用方式
@DS("master")
@Mapper
public interface UserMapper extends BaseMapper<UserEntity> {
}
public interface UserRepository extends IService<UserEntity> {
void update(UserEntity entity);
}
@Slf4j
@Repository
@RequiredArgsConstructor
public class UserRepositoryImpl extends ServiceImpl<UserMapper, UserEntity> implements UserRepository {
@Override
public void update(UserEntity entity) {
this.update(entity, new LambdaUpdateWrapper<UserEntity>()
.eq(UserEntity::getUserId, userId));
}
}
注意,以下方式是无法自动更新时间的
this.update(new LambdaUpdateWrapper<UserEntity>()
.eq(UserEntity::getUserId, userId)
.set(UserEntity::getNickName, "nickName"));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端