本文主要介绍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();
配置加密
在yml配置文件上存在着很多不希望被别人看到的配置,如mysql账号和密码,阿里云密钥等。
如果不加密,可以直接加压jar包就可以看到里面的密码了。
MyBatis-Plus 中自带的 AES 加密功能
我们顺便在一个测试内进行生成就可以了。
首先生成密钥
String key = AES.generateRandomKey();
生成密文
String key = AES.generateRandomKey();
System.out.println("密钥= "+key);
System.out.println("root账号 = " + AES.encrypt("root", key));
System.out.println("mysql密码 = " + AES.encrypt("123456", key));
结果
把这个直接复制到yml,加上前缀mpw:就可以了
现在不给密钥进行单元测试查询操作,失败。
在test加上参数–mpw.key=密钥
测试通过
如果是idea启动就直接在配置加上
如果是命令行就直接在命令行后面加
java -jar xxx.jar --mpw.key=asdasdasd