Spring Boot整合MyBatis-Plus

本文介绍如何在SpringBoot项目中集成MyBatis-Plus,并通过具体案例演示基本的CRUD操作,包括查询、分页等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

都说好记性不如烂笔头,每天写一点,从量变到质变的开始!废话不多说,以下所有内容均来自本人实际操作:

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愉快的玩耍了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值