Mybatis Plus 快速开始

更新时间 2023-01-10 15:36:57

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书活动

目前, 星球 内第一个项目:全栈前后端分离博客项目,演示地址:http://116.62.199.48/, 1.0 版本已经更新完毕,正在更新 2.0 版本。采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 224 小节,累计 35w+ 字,讲解图:1544 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 1000+ 小伙伴加入,欢迎点击围观

大家好,我是小哈。

前面小节 中,我们已经了解到什么是 Mybatis Plus, 以及和 Mybatis 的区别。本章节中,我们将上手学习如何使用它操作数据库。

一、数据库安装

本教程以 MySQL 数据库作为演示,所以第一步,你需要先确保你的机器已安装好 MySQL 。不知道如何安装的童鞋,可自行百度一下。

TIP : 也可以使用 Docker 安装 MySQL 环境,可参考小哈之前的一篇文章:《Docker 安装 MySQL 环境》

二、新建测试库与表

MySQL 安装成功后,新建一个名为 test 的测试数据库,并创建一张用户表,Schema 建表脚本如下:

DROP TABLE IF EXISTS t_user;

CREATE TABLE `t_user` (
  `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `name` varchar(30) NOT NULL DEFAULT '' COMMENT '姓名',
  `age` int(11) NULL DEFAULT NULL COMMENT '年龄',
  `gender` tinyint(2) NOT NULL DEFAULT 0 COMMENT '性别,0:女 1:男',
  PRIMARY KEY (`id`)
) COMMENT = '用户表';

三、新建 Spring Boot 示例项目

数据库准备好了,我们来新建一个 Spring Boot 示例项目,用来讲解如何使用 Mybatis Plus,先放一张示例项目目录结构截图:

TIP : 不懂 Spring Boot 的童鞋,可以参考小哈之前发布的文章:《Spring Boot 入门教程》

Spring Boot 整合 mybatis-plus 项目结构Spring Boot 整合 mybatis-plus 项目结构

注意 :

全新的 MyBatis-Plus 3.0 版本基于 JDK8,提供了 lambda 形式的调用,所以安装集成 Mybatis-Plus 3.0 要求如下:

  • JDK 8+;
  • Maven or Gradle, 本文以 maven 作为版本管理工具;

四、添加 Mybatis Plus 依赖

pom.xml 文件中添加以下依赖:

<!-- mybatis-plus 依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

<!-- 单元测试依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

<!-- lombok 依赖(免写 setXXX/getXXX 方法) -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.10</version>
</dependency>

<!-- mysql 依赖 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

PS: 小哈在写此教程的时候,MyBatis-Plus 的最新版本为 3.5.1

警告: 引入 MyBatis-Plus 之后请不要再次引入 MyBatis 以及 MyBatis-Spring,以避免因版本差异导致的问题。

五、添加配置

接下来,在 applicaiton.yml 配置文件中添加 MySQL 数据库的相关配置(数据库驱动、连接、用户名和密码):

# 数据库配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
    username: root
    password: xxxx

然后,在项目根目录下新建一个 config 包,并创建 MybatisPlusConfig 配置类:

/**
 * @Author: 犬小哈
 * @From: 公众号:小哈学Java, 网站:www.quanxiaoha.com
 * @Date: 2022-12-15 18:29
 * @Version: v1.0.0
 * @Description: TODO
 **/
@Configuration
@MapperScan("com.quanxiaoha.mybatisplusdemo.mapper")
public class MybatisPlusConfig {
}

TIP : @MapperScan 注解用于告诉 Mybatis Plus 框架需要扫描的 mapper 类的包路径,mapper 类主要用于操作数据库,学习过 Mybatis 的童鞋应该都非常清楚,这里提一嘴是防止可能会有些没学过 Mybatis 的小伙伴。

六、添加实体类

前面已经建好了用户表,下面编写用户表对应的数据库实体类 User.java :

@Data
@Builder
@TableName("t_user")
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private Integer gender;
}
  • @TableName("t_user") 注解用于指定表名;
  • @TableId(type = IdType.AUTO) 注解指定了字段 id 为表的主键,同时指定主键为自增类型。

TIP: @Data@Builder 是 Lombok 注解,偷懒用的,加上它即可编译自动生成 getXXX/setXXX 等相关方法,不了解的小伙伴可自行搜索一下如何使用。

七、添加 Mapper 类

在项目根目录下创建 mapper 包,并新建 UserMapper 接口,同时继承自 BaseMapper, 代码如下:

public interface UserMapper extends BaseMapper<User> {
    
}

BaseMapper 接口由 Mybatis Plus 提供,封装了一些常用的 CRUD 操作,使得我们无需像 Mybatis 那样编写 xml 文件,就拥有了基本的 CRUD 功能,点击 BaseMapper 接口,源码如下:

public interface BaseMapper<T> extends Mapper<T> {
    // 新增数据
    int insert(T entity);
	// 根据 ID 删除
    int deleteById(Serializable id);
	// 删除数据
    int deleteByMap(@Param("cm") Map<String, Object> columnMap);
	// 删除数据
    int delete(@Param("ew") Wrapper<T> queryWrapper);
	// 根据 ID 批量删除数据
    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
	// 根据 ID 更新
    int updateById(@Param("et") T entity);
	// 更新数据
    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
	// 根据 ID 查询
    T selectById(Serializable id);
	// 根据 ID 批量查询
    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
	// 查询数据
    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
	// 查询一条数据
    T selectOne(@Param("ew") Wrapper<T> queryWrapper);
	// 查询记录总数
    Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
	// 查询多条数据
    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
	// 查询多条数据
    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
	// 查询多条数据
    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
	// 分页查询
    <E extends IPage<T>> E selectPage(E page, @Param("ew") Wrapper<T> queryWrapper);
	// 分页查询
    <E extends IPage<Map<String, Object>>> E selectMapsPage(E page, @Param("ew") Wrapper<T> queryWrapper);
}

可以先简单看一眼,有个印象就行,后续章节中将学习如何使用它们。

八、简单的 CRUD

在单元测试包下,创建一个测试类 MybatisPlusBaseMapperTests,编写几个 CURD 的测试方法,测试代码如下:

@SpringBootTest
class MybatisPlusBaseMapperTests {

    @Autowired
    private UserMapper userMapper;

    /**
     * 查询数据
     */
    @Test
    public void testSelectUser() {
        System.out.println(("----- 开始测试 mybatis-plus 查询数据 ------"));
        //  selectList() 方法的参数为 mybatis-plus 内置的条件封装器 Wrapper,这里不填写表示无任何条件,全量查询
        List<User> userList = userMapper.selectList(null);

        userList.forEach(System.out::println);
    }

    /**
     * 新增一条数据
     */
    @Test
    public void testInsertUser() {
        System.out.println(("----- 开始测试 mybatis-plus 插入数据 ------"));
        User user = User.builder()
                .name("犬小哈教程 www.quanxiaoha.com")
                .age(30)
                .gender(1)
                .build();

        userMapper.insert(user);
    }

    /**
     * 删除数据
     */
    @Test
    public void testDeleteUser() {
        System.out.println(("----- 开始测试 mybatis-plus 删除数据 ------"));
        // 根据主键删除记录
        userMapper.deleteById(1);

        // 根据主键批量删除记录
        userMapper.deleteBatchIds(Arrays.asList(1, 2));
    }

    /**
     * 更新数据
     */
    @Test
    public void testUpdateUser() {
        System.out.println(("----- 开始测试 mybatis-plus 更新数据 ------"));
        User user = User.builder()
                .id(1L)
                .name("犬小哈教程 www.quanxiaoha.com")
                .build();

        userMapper.updateById(user);
    }
}

九、结语

本小节中,我们学习了 Spring Boot 中如何快速整合集成 Mybatis-Plus, 同时在本地搭建了一个 MySQL 环境,演示了如何通过 Mybatis-Plus 实现了基本的增删改查操作。