mybatis-plus
xml文件不再默认的resource/mapper/
文件夹的配置:
application.yml
yaml
# 多模块配置
mybatis-plus:
mapper-locations:
- classpath*:com/imooc/news_manager_project/mapper/*.xml
# 单模块配置
mybatis-plus:
mapper-locations:
- com/imooc/news_manager_project/mapper/*.xml
pox.xml
xml
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include> <!-- 包含 Java 目录下的 XML 文件 -->
</includes>
</resource>
<resource>
<directory>src/main/resources</directory> <!-- 保留对 resources 目录的扫描 -->
</resource>
</resources>
</build>
其它操作数据模式
AR模式
java
//需要继承MP的Model类, 同时需要HuMapper 继承BaseMapper
public class Hu extends Model<Hu>
Service通用
java
//UserService
public interface UserService extends IService<User> {
}
//UserServiceImpl
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
逻辑删除
yaml
mybatis-plus:
mapper-locations: classpath*:com/mp/mapper/*.xml
type-aliases-package: com.mp.entity
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
实体类
java
/**
* 逻辑删除
*/
@TableLogic
@TableField(select = false)
private Integer deleted;
自动填充
java
//User实体类
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
MyMetaObjectHandler.java
java
package com.mp.component;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
boolean hasSetter = metaObject.hasSetter("createTime");
if (hasSetter) {
setInsertFieldValByName("createTime", LocalDateTime.now(), metaObject);
}
}
@Override
public void updateFill(MetaObject metaObject) {
boolean hasSetter = metaObject.hasSetter("updateTime");
Object updateTime = getFieldValByName("updateTime", metaObject);
if (hasSetter && updateTime == null) {
System.out.println("走update");
setUpdateFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}else {
System.out.println("不走update");
}
}
}
乐观锁
java
package com.mp.configuration;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfiguration {
/**
* 分页插件
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
/**
* 乐观锁
* @return
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
性能检测
使用 P6Spy
xml
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.8.2</version>
</dependency>
yaml
spring:
datasource:
# driver-class-name: com.mysql.cj.jdbc.Driver
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
# url: jdbc:mysql://mysql2.sqlpub.com:3307/db_user_manager?serverTimezone=Asia/Shanghai
url: jdbc:p6spy:mysql://mysql2.sqlpub.com:3307/db_user_manager?serverTimezone=Asia/Shanghai
username: dotohi
password: UOlfBuHB092V
配置 spy.properties
:
properties
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
#logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
# 自定义日志扫描
module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录SQL
#appender=com.p6spy.engine.spy.appender.slf4j.Slf4JLogger
# 设置p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录log 例外, 可去掉的结果有error,info,batch,debug,statement,commit,rollback,result,resultset
excludecategories=info,debug,result,resultset,batch
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2
#日志输出到文件
logfile=spy.log