一、概述

官方描述: :::info MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 :::

MyBatis Plus官网:https://baomidou.com/

二、安装

相关依赖:

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>3.4.1</version>
  5. </dependency>

三、使用

实体模型

首先创建一张用户表:

CREATE TABLE `test``user` (
    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '用户名',
    `pass_word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '密码',
    `user_sex` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '性别',
    `nick_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '昵称',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';

INSERT INTO `test`.`user`(`user_name`, `pass_word`, `user_sex`, `nick_name`) VALUES ('xiaoyu', 'a123456', 'MAN', 'yu');
INSERT INTO `test`.`user`(`user_name`, `pass_word`, `user_sex`, `nick_name`) VALUES ('qiaoer', 'b123456', 'WOMAN', 'qiao');

为其创建模型:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;
    private String userName;
    private String passWord;
    private UserSexEnum userSex;
    private String nickName;
}

可以继承MP的Model类,其已经实现了 Serializable 接口:

import com.baomidou.mybatisplus.extension.activerecord.Model;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User extends Model<User> {
    private Long id;
    private String userName;
    private String passWord;
    private UserSexEnum userSex;
    private String nickName;
}

性别枚举:

public enum UserSexEnum {
    MAN, WOMAN
}

Mapper

在启动类中设置Mapper扫描路径:

@SpringBootApplication
@MapperScan("com.example.mybatisplus.mapper")
public class MybatisPlusApplication {
    public static void main(String[] args) {
        SpringApplication.run(MybatisPlusApplication.class, args);
    }
}

创建Mapper,继承自 BaseMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybatisplus.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    @Select("SELECT count(*) FROM user")
    int count();
}

:::info 注:可以直接在 Mapper 类上面添加注解 @Mapper ,如果配置 @Mapper 可以省略 @MapperScan 。 :::

在控制器中使用Mapper:

@RestController
public class UserController {
    @Autowired
    UserMapper userMapper;

    @GetMapping("list")
    public List<User> getList() {
        List<User> userList = userMapper.selectList(null);

        return userList;
    }

    @GetMapping("count")
    public int count() {
        return userMapper.count();
    }
}

Service

创建Service接口,继承自 IService

public interface UserService extends IService<User> {
}

实现Service接口,继承自 ServiceImpl

@Service
@Transactional
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

在控制器中使用Service:

@RestController
public class UserController {
    @Autowired
    UserService userService;

    @GetMapping("list")
    public List<User> getList() {
        return userService.list();
    }

    @GetMapping("count")
    public int count() {
        return userService.count();
    }
}

四、配置

使用MyBatis Plus可以零配置,默认就开启了下划线到驼峰的自动转换。当然也可以手动配置,示例如下:

mybatis-plus:
  # 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
  # 如果是放在resource目录 classpath:/mapper/*Mapper.xml
  mapper-locations: classpath:/mapper/*Mapper.xml
  #实体扫描,多个package用逗号或者分号分隔
  typeAliasesPackage: com.yourpackage.*.entity
  global-config:
    db-config:
      #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
      id-type: 3
      #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
      field-strategy: 2
      #驼峰下划线转换
      db-column-underline: true
      #数据库大写下划线转换
      capital-mode: true
      #mp2.3+ 全局表前缀 mp_
      table-prefix: mp_
      #刷新mapper 调试神器
      refresh-mapper: true
      # Sequence序列接口实现类配置
      key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
      #逻辑删除配置
      logic-delete-value: 1
      logic-not-delete-value: 0
      db-type: mysql
    refresh: true
    field-strategy: 1
  configuration:
    #配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
    map-underscore-to-camel-case: true
    cache-enabled: false
    #配置JdbcTypeForNull, oracle数据库必须配置
    jdbc-type-for-null: 'null'

其中 configuration 字段可以使用 MyBatis 原生配置。

MyBatis Plus配置文件可以沿用MyBatis的配置方式,指定配置文件路径即可:

mybatis-plus:
  config-location: classpath:mybatis-plus/mybatis-config.xml

mybatis-config.xml 举例:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="cacheEnabled" value="true"/>
    </settings>

    <typeAliases>
        <typeAlias alias="Integer" type="java.lang.Integer"/>
        <typeAlias alias="Long" type="java.lang.Long"/>
        <typeAlias alias="HashMap" type="java.util.HashMap"/>
        <typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap"/>
        <typeAlias alias="ArrayList" type="java.util.ArrayList"/>
        <typeAlias alias="LinkedList" type="java.util.LinkedList"/>
    </typeAliases>
</configuration>

详细配置参考: