MybatisPlus核心功能

MybatisPlus核心功能

官方地址:MybatisPlus

1、条件构造器

MybatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求

介绍

Mybatisplus的条件构造器是一种用于构建SQL查询条件的工具。它提供了一种简单而强大的方式来构建SQL查询条件,可以帮助开发人员轻松地构建复杂的查询条件,而不必手动拼接SQL语句。

Mybatisplus的条件构造器主要包括Wrapper、QueryWrapper和UpdateWrapper三个类。其中,Wrapper是一个抽象类,QueryWrapper和UpdateWrapper分别是它的两个实现类。开发人员可以使用这些类来构建查询条件,并将它们传递给Mybatisplus的查询方法或更新方法中,从而实现动态的SQL查询条件。

结构图如下:

使用条件构造器,开发人员可以通过链式调用的方式来添加查询条件,比如eq、ne、gt、ge、lt、le等方法用于添加等于、不等于、大于、大于等于、小于、小于等于等条件。此外,还可以使用like、in、between等方法来添加更复杂的查询条件。同时,条件构造器还支持Lambda表达式,可以通过Lambda表达式来指定查询条件,使得代码更加简洁和易读。

例如:

使用条件构造器(使用的是硬编码,不推荐):

java 复制代码
//1.构建查询条件
QueryWrapper<User> wrapper = new QueryWrapper<User>()
	.select("id","username","info","balance")
	.like("username","o")
	.ge("balance",1000);
//2.查询
List<User> users = userMapper.selectList(wrapper);
users.forEach(System.out::println);
java 复制代码
//1.要更新的数据
User user = new User();
user.setBalance(2000);
//2.更新的条件
QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username","jack");
//3.执行更新
userMapper.update(user,wrapper);

硬编码:指在程序代码中直接使用具体数值、字符串或其他常量,而不是将这些值定义为变量或常量。

坏处:

  1. 可维护性差:硬编码使得代码中的数值和字符串分散在各处,如果需要修改这些数值或字符串,就需要逐个查找并修改,增加了维护的难度
  2. 可读性差:硬编码使得代码的含义不够清晰,阅读代码的人很难理解这些数值或字符串的含义和作用
  3. 难以重用:硬编码的数值和字符串通常只适用于特定的情况,无法被其他模块或方法重用
  4. 难以测试:硬编码使得代码中的数值和字符串难以被模拟或替换,从而增加了单元测试的难度
  5. 安全隐患:硬编码的敏感信息(如密码、API密钥等)容易被恶意获取,造成安全风险

总结条件构造器的用法:

  • QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分
  • UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用
  • 尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码

如图:

2、自定义SQL


如图:

其中${ew.customSqlSegment}是一种特殊的占位符,用于自定义SQL语句中的条件片段。它通常与MyBatisPlus的条件构造器(Wrapper)一起使用,用于动态拼接SQL查询条件

ew是EntityWrapper的缩写,是MyBatisPlus中用于构建查询条件的条件构造器之一

在使用ew构建查询条件时,可以通过ew.customSqlSegment来动态添加自定义的SQL查询条件。

例如,可以通过以下方式使用${ew.customSqlSegment}:

java 复制代码
EntityWrapper<User> wrapper = new EntityWrapper<>();
wrapper.eq("status", 1);
//根据condition1和condition2的值来决定是否添加这些条件
if (condition1) {
    wrapper.and("age > 18");
}
if (condition2) {
    wrapper.and("name = 'Alice'");
}
List<User> userList = userMapper.selectList(wrapper);

3、Service接口

MyBatisPlus中的Service接口是基于MyBatis框架的一个增强版本,它提供了一些方便的方法和功能,使得开发者可以更加方便地进行数据库操作。

在MyBatisPlus中,Service接口通常用于定义业务逻辑层的接口,它通常包含了一些对数据库进行操作的方法,比如增删改查等。开发者可以通过继承MyBatis Plus提供的Service接口来快速地实现这些方法,从而减少重复的代码编写工作。

MyBatisPlus中的Service接口还提供了一些方便的方法,比如分页查询、批量插入、批量更新等,这些方法可以帮助开发者更加方便地进行数据库操作。

如图:

MP的Service使用流程:

  • 自定义Service接口继承IService接口
java 复制代码
public interface IUserService extends IService<User>{}
  • 自定义Service实现类,实现自定义接口并继承ServiceImpl类
java 复制代码
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements IUserService{
}

Service接口方法

  1. 增加数据

save(entity):保存一个实体

saveBatch(entityList):批量保存实体集合

  1. 删除数据

removeById(id):根据ID删除数据

removeByMap(columnMap):根据条件删除数据

remove(queryWrapper):根据条件删除数据

  1. 更新数据

updateById(entity):根据ID更新实体

update(entity, updateWrapper):根据条件更新实体

updateBatchById(entityList):批量更新实体集合

  1. 查询数据

getById(id):根据ID查询数据

list(queryWrapper):根据条件查询数据列表

page(page, queryWrapper):分页查询数据

count(queryWrapper):根据条件查询数据总数

相关推荐
无心水几秒前
【分布式利器:分布式ID】7、分布式数据库方案:TiDB/OceanBase全局ID实战
数据库·分布式·tidb·oceanbase·分库分表·分布式id·分布式利器
帧栈几秒前
并发编程原理与实战(三十九)并发基石ArrayBlockingQueue与LinkedBlockingQueue的底层实现与API设计解析
java
一辉ComeOn3 分钟前
【大数据高并发核心场景实战】缓存层 - 写缓存
java·大数据·redis·缓存
洲星河ZXH3 分钟前
Java,String类
java·开发语言
一只栖枝4 分钟前
MySQL OCP不培训,自学怎么学?
数据库·mysql·备考·考证·ocp
青衫码上行4 分钟前
【JavaWeb 学习 | 第16篇】JPS介绍和基本语法
java·学习·web·jsp
nono牛5 分钟前
C++ 语言全面教程 (基础入门)
java·jvm·c++
冬夜戏雪5 分钟前
【Java学习日记】【2025.12.2】【2/60】
java·开发语言·学习
safestar20126 分钟前
扒开MySQL的引擎盖:InnoDB如何用B+树、缓冲池和日志系统扛起高并发
数据库·b树·mysql
VX:Fegn08958 分钟前
计算机毕业设计|基于springboot + vue房屋租赁管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计