写在前面:
本文主要介绍mybatis-plus的配置,以后在有的时候在补充。欢迎交流。
本文主要介绍mybatis-plus的配置,以后在有的时候在补充。欢迎交流。
文章目录
- 日志输出
- 自动填充
- 分页
- 全局字段配置
- 多数据源
日志输出
调试的时候需要看执行的sql,这时候就很需要日志来记录查看了。
mybatis-plus的日志配置在yml里面
mybatis-plus:
configuration:
# 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 这个配置会将执行的sql打印到日志文件
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
输出到日志文件的时候需要配合着logging配置
logging:
config: classpath:config/logback-spring.xml
level:
com:
example:
mapper: debug
自动填充
自动填充bean
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MyMetaObjectHandler());
return globalConfig;
}
这里有2种写法,注释掉的是低版本的。高版本从3.3.0开始可以使用。不过3.3.0不要使用。有bug。
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
* 新增填充创建时间
*
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
// this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
// this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
this.fillStrategy(metaObject,"createTime",LocalDateTime.now());
this.fillStrategy(metaObject,"updateTime",LocalDateTime.now());
}
/**
* 更新填充更新时间
*
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
// this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
this.fillStrategy(metaObject,"updateTime",LocalDateTime.now());
}
}
那么如何设置哪些进行自动填充呢
在实体类上
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
枚举类型,不过也可以直接不写这个属性。
-
DEFAULT:默认不处理
-
INSERT:插入时自动填充字段
-
UPDATE:更新时自动填充字
-
INSERT_UPDATE:插入和更新时自动填充字段
分页
插件bean
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
全局字段配置
mybatis-plus:
global-config:
db-config:
# 主键ID类型
id-type: none
# 逻辑删除字段名称
logic-delete-field: deleted
# 逻辑删除-删除值
logic-delete-value: 1
# 逻辑删除-未删除值
logic-not-delete-value: 0
多数据源
官方文档
依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
boot3需要
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
<version>${version}</version>
</dependency>
spring:
datasource:
dynamic:
primary: db1 # 配置默认数据库
datasource:
db1: # 数据源1配置
url:
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
db2: # 数据源2配置
url:
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
durid:
initial-size: 1
max-active: 20
min-idle: 1
max-wait: 60000
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 去除druid配置
service/mapper层加注解@DS
@DS 可以注解在方法上和类上,同时存在方法注解优先于类上注解。
注解在 service 实现或 mapper 接口方法上,不要同时在 service 和 mapper 注解。
@DS("db2")
public interface Mapper extends BaseMapper<User> {
}
@Service
@DS("db2")
public class ServiceImpl extends ServiceImpl<ModelMapper, Model> implements IModelService {}
@DS("db2")
List<User> selectAll();