Skip to content

MyBatis Plus

MyBatis-Plus 🚀 为简化开发而生

添加依赖

引入 MyBatis-Plus Starter 依赖

Spring Boot2

xml
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.15</version>
</dependency>

Spring Boot3

xml
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>3.5.15</version>
</dependency>

application.yml

yml
mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      logic-delete-field: isDelete # 全局逻辑删除的实体字段名
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹

java
@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

加了@MapperScan mapper接口就不用加@Mapper

java
public interface AppMapper extends BaseMapper<App> {

}
java
public interface AppService extends IService<App> {

}
java
@Service
public class AppServiceImpl extends ServiceImpl<AppMapper, App> implements AppService {
    
}

其他

分页

配置
java
/**
 * MyBatis Plus 配置
 *
 */
@Configuration
@MapperScan("com.bingli.duskeval.mapper")
public class MyBatisPlusConfig {
    /**
     * 拦截器配置
     * @return
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 如果配置多个插件, 切记分页最后添加
        return interceptor;
    }
}
自定义 Mapper 方法中使用分页

你可以通过以下方式在 Mapper 方法中使用分页:

IPage<UserVo> selectPageVo(IPage<?> page, Integer state);

// 或者自定义分页类

MyPage selectPageVo(MyPage page);

// 或者返回 List

List<UserVo> selectPageVo(IPage<UserVo> page, Integer state);

对应的 XML 配置:

xml
<select id="selectPageVo" resultType="xxx.xxx.xxx.UserVo">

    SELECT id,name FROM user WHERE state=#{state}

</select>

逻辑删除

实体类要加@TableLogic

java
@TableName(value ="app")
@Data
public class App {
    /**
     * 是否删除
     */
    @TableLogic
    private Integer isDelete;
}

乐观锁(高并发核心)

实体字段
java
@Version
private Integer version;
配置
java
interceptor.addInnerInterceptor(
        new OptimisticLockerInnerInterceptor()
);