都说好记性不如烂笔头,每天写一点,从量变到质变的开始!废话不多说,以下所有内容均来自本人实际操作:
1.开发环境
Windows10+JDK8+IntelliJ IDEA+MySQL+Spring Boot+MyBatis-Plus+Lombok
2.案列需求
结合MyBatis-plus官网了解Spring Boot与MyBatis-Plus的整合及MyBatis-Plus的基本使用
3.脚本准备
CREATE DATABASE mybatisplus;use mybatisplus;
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)
);
DELETE FROM user;
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');
4.创建Spring Boot项目及相关实体类
4.1 pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>mybatis-plus_studed</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mybatis-plus_studed</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
4.2 yml配置文件
spring:
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
logging:
level:
com:
example:
mybatisplus_studed:
mapper : debug
mybatis-plus:
mapper-locations: mapper/*.xml
4.3 User类
package com.example.mybatisplus_studed.entity;
import lombok.Data;
import java.io.Serializable;
@Data
public class User implements Serializable {
private Long id;
private String name;
private Integer age;
private String email;
}
4.4 UserMapper文件
package com.example.mybatisplus_studed.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybatisplus_studed.entity.User;
public interface UserMapper extends BaseMapper<User> {
}
4.5 User.xml文件(没用到可以删除)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisplus_studed.mapper.UserMapper">
</mapper>
4.6 项目结构如下
5.编写测试类
5.1 查看BaseMapper中的方法
5.2 查出所有用户
package com.example.mybatisplus_studed;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.mybatisplus_studed.entity.User;
import com.example.mybatisplus_studed.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
@MapperScan("com.example.mybatisplus_studed.mapper")
class MybatisPlusStudedApplicationTests {
@Autowired
public UserMapper userMapper;
@Test
void selectList() {
List<User> users = this.userMapper.selectList(null);
users.forEach(System.out::println);
}
}
从以上步骤中,我们可以看到集成MyBatis-Plus
非常的简单,只需要引入 starter 工程并配置 mapper 扫描路径即可
5.3 查询id=1的用户
@Test
void selectById() {
User user = this.userMapper.selectById(1);
System.out.println(user);
}
5.4 查询id=1和id=2的用户
@Test
void selectBatchIds() {
List<User> users = this.userMapper.selectBatchIds(Arrays.asList(1, 2));
users.forEach(System.out::println);
}
5.5 查询名字为Jone并且年龄为18的用户
@Test
void selectByMap() {
Map<String,Object> map = new HashMap<>();
//注意这里map中的key为数据库中的属性字段,而不是实体类中的字段
map.put("name","Jone");
map.put("age",18);
List<User> users = this.userMapper.selectByMap(map);
users.forEach(System.out::println);
}
5.6 查询年龄小于20并且名字为"jone"的用户
@Test
void selectOne() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age",20).eq("name","jone");
User user = this.userMapper.selectOne(queryWrapper);
System.out.println(user);
}
5.7 统计所有用户数
@Test
void selectCount() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
Integer count = this.userMapper.selectCount(queryWrapper);
System.out.println(count);
}
5.8 查询年龄大于20并且邮箱含有"t"的用户
@Test
void selectMaps() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age",20).like("email","t");
List<Map<String, Object>> maps = this.userMapper.selectMaps(queryWrapper);
maps.forEach(System.out::println);
}
通过上面的一下查询案例,发现使用MyBatis-Plus的关键就是使用条件构造器,因此需要查看官方文档了解条件构造器
6.条件构造器
7.自定义查询
7.1 修改UserMapper接口,加入两个自定义方法
package com.example.mybatisplus_studed.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.example.mybatisplus_studed.entity.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
List<User> selectAllUser();
List<User> selectMyUsers(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
}
7.2 修改User.xml,添加对应查询配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisplus_studed.mapper.UserMapper">
<select id="selectAllUser" resultType="com.example.mybatisplus_studed.entity.User">
select * from user ;
</select>
<select id="selectMyUsers" resultType="com.example.mybatisplus_studed.entity.User">
select * from user ${ew.customSqlSegment};
</select>
</mapper>
7.3 测试类添加测试方法
@Test
void selectAllUser() {
List<User> maps = this.userMapper.selectAllUser();
maps.forEach(System.out::println);
}
/**
* 查询年龄大于20的用户
*/
@Test
void selectMyUsers() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age",20);
List<User> maps = this.userMapper.selectMyUsers(queryWrapper);
maps.forEach(System.out::println);
}
8.分页查询
8.1 新建一个config包与entity包同级
8.2 在config包下面创建MybatisPlusConfig配置类
package com.example.mybatisplus_studed.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
/**
* 开启分页查询:新的分页插件,一缓和二缓遵循mybatis的规则
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
8.3 测试类中添加测试方法
@Test
void selectPage() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age",10);
Page<User> page = new Page<>(0,2);
Page<User> userPage = this.userMapper.selectPage(page, queryWrapper);
System.out.println("总页数:"+userPage.getPages()+"\n总记录数:"+userPage.getTotal());
List<User> records = userPage.getRecords();
records.forEach(System.out::println);
}
@Test
void selectMapsPage() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age",10);
Page<Map<String,Object>> page = new Page<>(0,2);
Page<Map<String,Object>> userPage = this.userMapper.selectMapsPage(page, queryWrapper);
System.out.println("总页数:"+userPage.getPages()+"\n总记录数:"+userPage.getTotal());
List<Map<String,Object>> records = userPage.getRecords();
records.forEach(System.out::println);
}
到此,已经可以使用MyBatis-Plus愉快的玩耍了!