一、概述
官方描述: :::info MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 :::
MyBatis Plus官网:https://baomidou.com/
二、安装
相关依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</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>
详细配置参考: