Skip to content

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