入门
环境准备
创建好 SpringBoot + MyBatis 原生项目
准备好一个数据库,及测试数据表;如 user 表
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` ( id BIGINT NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT 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');
|
配置好数据库连接、mybatis扫描器:**@MapperScan("com.lfy.mp.mapper")
**
编写好 实体类
@Data @TableName("`user`") public class User { private Long id; private String name; private Integer age; private String email; }
|
引入依赖
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.12</version> </dependency>
|
进阶
编写Mapper接口
BaseMapper 是 Mybatis-Plus 提供的一个通用 Mapper 接口,它封装了一系列常用的数据库操作方法,包括增、删、改、查等。通过**继承 BaseMapper
**,开发者可以快速地对数据库进行操作,而无需编写繁琐的 SQL 语句。
insert
delete
int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
int deleteById(Serializable id);
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
|
update
int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper<T> whereWrapper);
int updateById(@Param(Constants.ENTITY) T entity);
|
select
T selectById(Serializable id);
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
|
编写Service接口
IService``
是 MyBatis-Plus 提供的一个通用 Service 层接口,它封装了常见的 CRUD 操作,包括插入、删除、查询和分页等。通过继承 IService 接口,可以快速实现对数据库的基本操作,同时保持代码的简洁性和可维护性。
- 泛型
T
为任意实体对象
- 对象
Wrapper
为 条件构造器
- 用法和
BaseMapper
基本一样
https://baomidou.com/guides/data-interface/#service-interface
Wrapper:条件构造器
用来封装查询条件。可以来做条件更新、删除、查询
MyBatis-Plus
提供了一套强大的**条件构造器(Wrapper)
,用于构建复杂的数据库查询条件。Wrapper 类
**允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
在 MyBatis-Plus 中,Wrapper 类是构建查询和更新条件的核心工具。以下是主要的 Wrapper 类及其功能:
- **
AbstractWrapper
**:这是一个抽象基类,提供了所有 Wrapper 类共有的方法和属性。它定义了条件构造的基本逻辑,包括字段(column)、值(value)、操作符(condition)等。所有的 QueryWrapper、UpdateWrapper、LambdaQueryWrapper 和 LambdaUpdateWrapper 都继承自 AbstractWrapper。
- **
QueryWrapper
**:专门用于构造查询条件,支持基本的等于、不等于、大于、小于等各种常见操作。它允许你以链式调用的方式添加多个查询条件,并且可以组合使用 and
和 or
逻辑。
- **
UpdateWrapper
:用于构造更新条件,可以在更新数据时指定条件。与 QueryWrapper 类似,它也支持链式调用和逻辑组合。使用 UpdateWrapper
可以在不创建实体对象的情况下,直接设置更新字段和条件
**。
LambdaQueryWrapper
:这是一个基于 Lambda 表达式的查询条件构造器,它通过 Lambda 表达式来引用实体类的属性,从而避免了硬编码字段名。这种方式提高了代码的可读性和可维护性,尤其是在字段名可能发生变化的情况下。
LambdaUpdateWrapper
:类似于 LambdaQueryWrapper,LambdaUpdateWrapper 是基于 Lambda 表达式的更新条件构造器。它允许你使用 Lambda 表达式来指定更新字段和条件,同样避免了硬编码字段名的问题。
Wrappers:工具类
QueryWrapper<User> queryWrapper = Wrappers.query(); queryWrapper.eq("name", "张三");
LambdaQueryWrapper<User> lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(User::getName, "张三");
UpdateWrapper<User> updateWrapper = Wrappers.update(); updateWrapper.set("name", "李四");
LambdaUpdateWrapper<User> lambdaUpdateWrapper = Wrappers.lambdaUpdate(); lambdaUpdateWrapper.set(User::getName, "李四");
|
插件
插件主体
@Configuration @MapperScan("scan.your.mapper.package") public class MybatisPlusConfig {
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); return interceptor; } }
|
分页插件
于 v3.5.9
起,PaginationInnerInterceptor
已分离出来。如需使用,则需单独引入 mybatis-plus-jsqlparser
依赖 , 具体请查看 安装 一章。
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-jsqlparser</artifactId> </dependency>
|
@Configuration @MapperScan("scan.your.mapper.package") public class MybatisPlusConfig {
@Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } }
|
PaginationInnerInterceptor
提供了以下属性来定制分页行为:
属性名 |
类型 |
默认值 |
描述 |
overflow |
boolean |
FALSE |
溢出总页数后是否进行处理 |
maxLimit |
Long |
|
单页分页条数限制 |
dbType |
DbType |
|
数据库类型 |
dialect |
IDialect |
|
方言实现类 |