Mybatis Plus 快速开始
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 - 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/
截止目前, 星球 内专栏累计输出 66w+ 字,讲解图 2896+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2300+ 小伙伴加入学习 ,欢迎点击围观
大家好,我是小哈。
前面小节 中,我们已经了解到什么是 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 入门教程》 。
注意 :
全新的
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 实现了基本的增删改查操作。