初识MP

简介: 本文介绍了 MyBatis-Plus 在复杂应用中的使用技巧,涵盖条件构造器(如 QueryWrapper、UpdateWrapper 及其 Lambda 表达式版本)、自定义 SQL 的优化方式,以及分页和多表查询的处理方法。重点比较了 LambdaQueryWrapper 与 QueryWrapper 的适用场景,推荐单表操作优先使用 Lambda 方式以提升类型安全性,而多表联查则更适合使用 QueryWrapper 的灵活性。同时,通过示例说明了如何结合 Wrapper 与自定义 SQL 来构建高效、可维护的数据库操作逻辑。

针对MyBatis-Plus 复杂应用

简单可以直接使用内置方法解决,

复杂一点的(查询、修改、删除的SQL语句都需要指定where条件)

1.使用条件构造器

(本质上就是就是把条件给整合成一个对象,再调用内置方法
1.写死字段名称

  • QueryWrapper:用于查询、删除条件(侧重 WHERE 子句构建)。
  • UpdateWrapper:用于更新条件(可同时设置更新字段和 WHERE 条件)。
  • 使用方法:1.定义方法的对象,2.链式法则


等价于:update emp set salary = salary + 2000 where id in (5, 6, 7);
public void testUpdateWrapper() {
    // 更新id为5, 6, 7的员工的薪水,加2000
    UpdateWrapper<Emp> updateWrapper = new UpdateWrapper<>(); 创建对象
    updateWrapper.in("id", 5, 6, 7)
            .setSql("salary = salary + 2000"); 字段对应的都是sql中的字段名
    empMapper.update(updateWrapper);  //把结果封装传过去,调用的仍是mp的内置方法
}
.in .setsql(是链式的一些用法,不同场景不同用法)

2.使用实体类反射给字段名

  • LambdaQueryWrapper
  • LambdaUpdateWrapper
@Test
public void testLambdaUpdateWrapper() {
    // 更新id为5, 6, 7的员工的薪水,加2000
    LambdaUpdateWrapper<Emp> updateWrapper = new LambdaUpdateWrapper<>();
    updateWrapper.in(Emp::getId, 5, 6, 7) 指的是对象属性????
            .setSql("salary = salary + 2000");
    empMapper.update(updateWrapper);
}

总结 :

  • 核心差异QueryWrapper 用数据库字段名(字符串),LambdaQueryWrapper 用实体类属性(方法引用)
  • Lambda 优势:类型安全,编译期校验,自动处理驼峰映射,适合单表操作。
  • QueryWrapper 优势:灵活,支持多表联查的外部字段,写法更简洁(对熟悉字段名的场景)。

实际开发中,单表操作优先用 LambdaQueryWrapper(减少错误),多表联查用 QueryWrapper(灵活处理跨表字段)。

2.自定义sql(为了解决更新中对于set部分的优化)

  1.融合where条件(使用条件构造器)在service

   2.在mapper自定义方法(不是重写,自定义,参数,包括两部分,条件构造器对象,需修改的属性)

3.创建xml文件 ,进行绑定

示例:

sql示例:update emp set name='zhangsan', age=18 where id in(1,2,3) and salary > 1000 and sex = 1;
(1) 构建wrapper(融合条件)在service层
LambdaQueryWrapper<Emp> wrapper = new LambdaQueryWrapper<Emp>()
    .in(Emp::getId, ids)
    .eq(Emp::getSex, 1)
    .gt(Emp::getSalary, 1000);
    ****************************************************************************
 (2) 修改mapper入参(自定义方法)在mapper层
 void updateSalaryByIds(@Param("ew") LambdaQueryWrapper<Emp> wrapper, 
 @Param("amount") int amount, @Param("age") int age);
*************************************************************************** 
 (3) 动态sql:不影响where部分的语法,只需要调整set的字段  在xml文件中
 <update id="updateBalanceByIds">
    UPDATE emp SET amount = amount- #{amount} , age = #{age} ${ew.customSqlSegment} 固定写法(红色字体)
</update>
***********************************************************************
必须使用 ${} 而非 #{},因为它是直接拼接 SQL 片段,而非预编译参数。
@Param("ew") 固定不能改(用作标识) 通过 @Param 注解指定参数名,确保与 XML 中的 #{参数名} 对应。


分页查询(原来使用mybatis改用mp基础遵循原来的):

1.引入配置文件(分页配置文件)

2.使用page进行分页,并返回结果

3.使用条件进行判断(太麻烦)

多表(两张表)

调用基础方法即可(一个表中包含另一张表,与表中有另一个表中的字段不同)

相关文章
|
存储 缓存 算法
【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍
相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。
985 0
|
SQL 缓存 安全
深入解析MyBatis-Plus LambdaQueryWrapper与QueryWrapper:高效数据查询的秘密
深入解析MyBatis-Plus LambdaQueryWrapper与QueryWrapper:高效数据查询的秘密
15510 2
|
5月前
|
SQL 缓存 Java
【MyBatis】MyBatis框架知识(全体系总结)
MyBatis 是一款轻量级持久层框架,支持SQL与代码分离、动态SQL、灵活映射及一二级缓存。本文系统讲解其核心组件、配置文件、Mapper映射、CRUD、缓存机制、插件扩展(如PageHelper、MyBatis-Plus)及最佳实践,助你高效掌握ORM开发。
1358 3
|
安全 关系型数据库 MySQL
Nacos持久化到本地以及Nacos的集群配置
Nacos持久化到本地以及Nacos的集群配置
783 0
Nacos持久化到本地以及Nacos的集群配置
|
12月前
|
存储 安全 NoSQL
基础的数据结构
线性结构包括动态数组、链表、栈和队列,适用于顺序存储与操作。非线性结构如优先级队列、哈希表、红黑树、跳表和B+树,适用于复杂数据组织与高效查找。不同结构适用于不同场景,如HashMap适合快速查找,B+树用于数据库索引。
|
8月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
本文介绍如何使用MyBatis-Plus(MP)简化单表增删改查操作。通过引入MP依赖并继承BaseMapper,可省略重复SQL代码,实现CRUD功能自动化。结合@TableName、@TableId等注解处理表字段映射异常,并利用QueryWrapper、UpdateWrapper构建复杂查询与更新条件。同时支持自定义SQL与条件构造器结合使用,提升开发效率与代码可读性。
|
12月前
|
存储 新零售 监控
一文揭开神秘的RFID技术面纱
RFID(射频识别)技术是物联网的重要组成部分,通过无线电信号自动识别目标并读写数据。广泛应用于门禁卡、公交卡、无人超市、物流仓储、智慧医疗等领域。本文详解其原理、组成、分类、特点及应用,带你全面了解这项高效、智能的识别技术。
6、Mybatis-Plus wrapper的使用
这篇文章详细介绍了Mybatis-Plus中Wrapper的使用,包括QueryWrapper和UpdateWrapper的基本概念、组装查询、排序、删除、修改条件的方法,以及如何设置条件优先级、组装SELECT子句和实现子查询等高级用法。
|
SQL Java 数据库连接
mybatisplus QueryWrapper or写法
# MyBatis-Plus QueryWrapper的OR写法详解 MyBatis-Plus是一款基于MyBatis的增强工具,提供了丰富的简化操作,使开发者能更高效地进行数据库操作。`QueryWrapper`是MyBatis-Plus中用于构建查询条件的一个核心类,支持多种条件组合,包括AND和OR条件。本文将详细介绍如何使用 `QueryWrapper`实现OR条件的查询。 ## QueryWrapper简介 `QueryWrapper`用于构建动态SQL查询条件,它封装了各种条件构造方法,使得查询条件的构建更加简洁和直观。`QueryWrapper`中提供了丰富的方法来支持多
3235 0