赞
踩
调试的时候需要看执行的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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。