一、MyBatis-Plus介绍
官网 https://baomidou.com/
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变(无侵入式),为简化开发、提高效率而生。
MyBatis-Plus为简化开发而生。
二、MyBatis-Plus入门案例
2.1 基础环境准备
User表
-- 创建表
DROP TABLE IF EXISTS user;
CREATE TABLE user(
id BIGINT(20) NOT NULL COMMENT '主键ID',
name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
-- 插入数据
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
2.2 SpringBoot整合MyBatis-Plus
2.2.1 导入依赖和配置yml
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.10</version>
<relativePath/>
</parent>
...
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- springboot整合mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--springboot测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
application.yml
#配置数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis-plus?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
#日志
logging:
level:
cn.msk1024: trace
2.2.2 准备接口和实体类
User实体类
package cn.msk1024.domain;
import ...
@Data
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
UserMapper接口
package cn.msk1024.mapper;
import ...
/**
* 我们自己的持久层接口继承BaseMapper接口,泛型指定为实体类User
* BaseMapper接口由mybatis-plus提供,内置了很多CRUD操作。
*/
public interface UserMapper extends BaseMapper<User> {
}
2.2.3 启动类
@SpringBootApplication
@MapperScan("cn.msk1024.mapper") //扫描持久层接口
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2.2.4 测试基于mapper的CRUD接口
@SpringBootTest
public class MybatisPlusTest {
@Autowired
private UserMapper userMapper;
//基于id查询
@Test
public void testSelectById() {
User user = userMapper.selectById(1L);
System.out.println(user);
}
//查询所有
@Test
public void testSelectAll() {
//查询所有,没有查询条件所以传入null
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
//还有很多select方法,都需要Wrapper的支持,这里先不进行测试
/*
// 根据 entity 条件,查询一条记录
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
// 根据 entity 条件,查询全部记录
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 查询(根据 columnMap 条件)
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
// 根据 Wrapper 条件,查询全部记录
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 entity 条件,查询全部记录(并翻页)
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录(并翻页)
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询总记录数
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
*/
}
/**
* 插入一条记录
* int insert(T entity);
*/
@Test
public void testInsert() {
User u = new User();
u.setId(6L);
u.setName("张三");
u.setAge(30)