5.mybatisPlus自定义SQL

2023-11-15

今日内容

MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,比如多表查询。

那么那么今天说说MP怎么自定义sql语句吧。另外,除了下文提到的通过queryWrapper实现筛选以外,调用查询时,如果你需要做分页,通过mybatisPlus提供的分页接口IPage,能够避免自己手写分页的sql语句,这么好用的东西,你还不入坑吗?

QueryWrapper\Wrapper联系

在这里插入图片描述

在这里插入图片描述

总结:QueryWrapper是Wrapper下面的类。 -->完全可以用到多态;令QueryWrapper实例指向Wrapper对象。 记住:多态,参数类型是Wrapper类型,调用者传递QueryWrapper类型。

因为官方文档里面写的参数类型都是父级类型,不要再说看不懂官方文档。

wapper介绍 :
Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper : 看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
————————————————
版权声明:本文为CSDN博主「简素@」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43048586/article/details/90025128

使用 Wrapper 自定义SQL

需求来源:

在使用了mybatis-plus之后, 自定义SQL的同时也想使用Wrapper的便利应该怎么办? 在mybatis-plus版本3.0.7得到了完美解决 版本需要大于或等于3.0.7, 以下两种方案取其一即可

mybatisPlus的条件构造器进行简单的操作还行,但是我的复杂操作如多表查询,条件构造器就显得捉襟见肘了。

还有一个更重要的原因:我想用他的分页插件。 如果我使用mybatis写法就不能使用mybatisPlus的分页插件了。

自定义SQL-官方文档

在这里插入图片描述

${ew.sqlSegment} 是补充条件的—QueryWrapper的条件构造器的条件。

官方文档写的有点笼统,现在我们看看网友的详细写法:

Mybatis-plus中自定义的sql语句调用QueryWrapper实现查询

这个只是讲述了自定义sql,没有涉及自定义sql和分页一起的使用。

网址案例通过测试是成功的。

但这往往不够,实际我们会使用更多复杂的sql语句。会往自定义sql语句里面传递值,会需要分页。

自定义SQL/分页/条件构造器一起使用返回分页数据

[MyBatis-Plus 分页查询以及自定义sql分页(很好的文档)]

这是三大技术点整合,看见分页技术就知道结果一定是返回分页的数据的。

当然,如果是自定义SQL和条件构造器两个技术整合,我们返回的是集合。

记住:分页不过也是limit语句,也是sql语句罢了,不要想太神。

注意:这个条件构造器与两外两个技术整合一起使用的前提有点苛刻,要求返回数据model格式必须是和这个表的字段对应,然后在表明的后面帮我们添加一系列条件。–${ew.sqlSegment} 是补充条件的,他的位置决定你的条件构造器的条件加到哪里。

但是,可能有时候我们的sql语句过于复杂,在多表查询的时候需要你传递一个参数或几个参数。放心,条件构造器该用就用,判断好位置就行;这几个参数该传就传,和mybatis操作一样。

web核辐射真实案例

controller

在这里插入图片描述

 //初始化页面
    @GetMapping("/baoJingList")
    @ResponseBody
   // @RequiresPermissions("fushe:baojing:baojing")
    Map<String,Object> roleList(@RequestParam Map<String, Object> params){
        Long currrentPage =Long.parseLong(params.get("page")+"");
        Long size =Long.parseLong(params.get("limit")+"");
        String sheBeiAdd = params.get("SheBeiId")+"";
        Long deptId = Long.parseLong(params.get("deptId")+"");

        QueryWrapper<EaBaojing> queryWrapper =  new QueryWrapper<>();
        queryWrapper.orderByDesc("Id");//降序
        if( sheBeiAdd.length()!=0) { //如果username没有数据为"",则不加入条件
            queryWrapper.like("SheBeiId", params.get("SheBeiId") + "");//条件构造器
        }
        if( deptId!=-1) {
            //表格过滤
            List<Integer> depts =sysDeptMapper.deptListByDeptId(deptId.intValue());
            depts.add(deptId.intValue());
            queryWrapper.in("Memo", depts);//条件构造器
        }

        Page<EaBaojing> page = new Page( currrentPage, size);  // 查询第x页,每页返回x条
        //条件构造器+自定义sql+分页,三大技术给你整合好好的,mybatisplus厉害。
        IPage<EaBaojing> iPage =baojingMapper.selectListByWrapper(page,queryWrapper);


        Map<String,Object> map = new HashMap<>();
        map.put("total",iPage.getTotal());  //
        map.put("data",iPage.getRecords()); //返回的数据是selectListByWrapper
        return map;
    }

}

mapper.java

public interface EaBaojingMapper extends BaseMapper<EaBaojing> {

    //参数里面传递的是我们在调用这个方法的包装类型,Wrapper是抽象类,querywrapper继承了他。
    IPage<EaBaojing> selectListByWrapper(Page<EaBaojing> page, @Param(Constants.WRAPPER) Wrapper<EaBaojing> queryWrapper);

}

mapper.xml

    <select id="selectListByWrapper" resultType="com.hdeasy.fushe.entity.EaBaojing">
    SELECT * FROM (
       SELECT a.id, a.fushe,a.baojingtype,a.content,a.yujing,a.baojing,a.riqi,a.memo,b.shebeiname
               AS shebeiid FROM ea_baojing  a LEFT JOIN ea_shebei b ON a.shebeiid = b.address
          )c ${ew.customSqlSegment}
    </select>

${ew.customSqlSegment}的位置决定了条件构造器的条件在哪。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5.mybatisPlus自定义SQL 的相关文章

  • idea mybatisplus 插件使用

    在plugin中安装mybatisplus 插件 使用 配置数据库 生成代码 表新增字段 xff0c 重新生成实体类覆盖 因业务需求 xff0c 表中可能会时不时增加一些字段 xff0c 大多情况下实体类中不会添加表中没有的字段 xff0c
  • MyBatisPlus中的likeLeft和likeRight

    在使用MyBatisPlus来匹配身份证后6位时遇到了likeLeft和likeRight的问题 xff1a likeLeft时匹配最左边还是匹配最右边 xff1f 所以来一个简单的测试 xff08 通过打印 成功 失败 来判断 xff09
  • Spring Boot整合Mybatis-Plus快速入门(二)

    之前快速搭建项目中 创建的类名与表名以及属性名都是一致的 所以mybatis plus可以根据类名以及属性名进行对应的操作 那么如果表名与属性名中不一致或属性名与列名不一致时我们应该怎么处理呢 这里mybatis plus为我们提供了很多注
  • 3、MyBatisPlus的CRUD 接口

    MyBatisPlus的CRUD 接口 一 insert 1 插入操作 2 主键策略 二 update 1 根据Id更新操作 2 自动填充 3 乐观锁 三 select 1 根据id查询记录 2 通过多个id批量查询 3 简单的条件查询 4
  • 【Mybatis-Plus】分页简单使用

    大纲 一 前期准备 1 创建测试表 用户并插入数据 2 导入mybatis plus依赖 3 连接数据库 application yaml 4 生成实体类 5 配置类 二 Mybatis Plus帮助文档分析 三 功能实现 1 总览目录结构
  • @TableField介绍和使用

    1 TableField exist false 注解加载bean属性上 表示当前属性不是数据库的字段 但在项目中必须使用 这样在新增等使用bean的时候 mybatis plus就会忽略这个 不会报错 否则会报一个如下的异常 Error
  • BindingException: Invalid bound statement (not found)

    org apache ibatis binding BindingException Invalid bound statement not found com UserInfoMapper listByRole 报错描述 程序一直可以正常
  • 5.Mybatis-plus_乐观锁和悲观锁

    乐观锁 故名思意十分乐观 它总是认为不会出现问题 无论干什么不去上锁 如果出现了问题 再次更新值测试 悲观锁 故名思意十分悲观 它总是认为总是出现问题 无论干什么都会上锁 再去操作 乐观锁实现方式 取出记录时 获取当前 version 更新
  • Java使用Mybatis-Plus实现根据参数动态拼接查询条件

    在编写代码的过程中我们常常会遇到下面的业务场景 我们需要根据传进来的参数来去进行拼接查询 例如当前端传过来的参数是base 那么我们就需要在Mybatis Plus的条件构造其中写出如下语句 public PageUtils queryBa
  • spring boot 2.0.3 mybatis升级mybatis-plus

    项目原来是使用mybtais durid 现升级为mybatis plus2 3 durid mysql 官方文档地址 请注意 mybatis plus3 0 的配置有变化 请查看官网文档 可能是旧的 或demo 步骤如下 1 引入pom
  • (3)MyBatis-Plus待开发

    常用注解 TableName MyBatis Plus在确定操作的表时 由BaseMapper的泛型决定即实体类型决定 且默认操作的表名和实体类型的类名一致 如果不一致则会因找不到表报异常 向表中插入一条数据 Test public voi
  • Mybatis-Plus eq、ne、gt、lt、ge、le分别代表含义

    Mybatis Plus eq ne gt lt ge le分别代表含义 eq 就是 equal等于 ne就是 not equal不等于 gt 就是 greater than大于 lt 就是 less than小于 ge 就是 greate
  • MyBatis-Plus系列(一)--MyBatis-Plus集成Druid环境搭建

    一 简介 Mybatis Plus是一款 MyBatis 动态 sql 自动注入 crud 简化 增 删 改 查 操作中间件 启动加载 XML 配置时注入 mybatis 单表 动态 SQL 操作 为简化开发工作 提高生产率而生 Mybat
  • mybatisPlus-wrapper使用

    创建测试类 import com baomidou mybatisplus core conditions query QueryWrapper import com plus mybatis mapper UserMapper impor
  • MyBatis-Plus-Generator代码生成器(Version 3.5.1+)使用

    这几天研究了一下MyBatis Plus Generator新版本3 5 1 的使用 做个笔记方便自己使用 maven配置
  • Mybatis-Plus中update更新操作用法

    目录 一 前言 二 update 1 关于修改的4个条件构造器 2 UpdateWrapper 用法示例 3 LambdaUpdateWrapper 用法示例 4 UpdateChainWrapper 用法示例 5 LambdaUpdate
  • mybatis-plus 新增/修改实现自动填充指定字段

    需要修改的字段在模型类上添加 TableField fill FieldFill xxx 注解 FieldFill的选项 哪个字段在什么时候填充需要手动设置注解 新建一个MetaObjectHandler的实现类MyMetaObjectHa
  • SpringBoot-基础篇复习(全)

    本文包含SpringBoot基础篇的所有知识点 大家一起来学习吧 开启一段新的旅程 加油吧 springboot是由Picotal团队提供的全新框架 用来简化spring的搭建和开发过程的配置 因为spring的配置比较繁琐 故引入了spr
  • mybatisPlus 将List<String>字段转成json字符串,使用JacksonTypeHandler以及自定义类型处理器实现

    文章目录 场景 使用JacksonTypeHandler实现类型转换 自定义StringListTypeHandler处理器实现 场景 项目中经常需要将List转成json存储到配置文件中 mybatisPlus默认实现了JacksonTy
  • SpringBoot中整合MybatisPlus快速实现Mysql增删改查和条件构造器

    场景 Mybatis Plus 简称MP 是一个Mybatis的增强工具 只是在Mybatis的基础上做了增强却不做改变 MyBatis Plus支持所有Mybatis原生的特性 所以引入Mybatis Plus不会对现有的Mybatis构

随机推荐

  • 线性表技巧之Note001-链表的最后一个节点

    找到单链表的尾节点 通常我们遍历单链表的代码如下 list 指向单链表的头节点 因此 list gt next 指向链表的第一个节点 LNode node list gt next while node NULL node node gt
  • Qt项目环境构建

    工欲善其事必先利其器 使用Qt来进行开发 得先配置好一个合适的环境 下面是我关于Qt项目环境构建的一些小结 Qt的项目构建主要依赖 pro文件 和 pri文件 include包含文件 提供pro的复用性高的东西给多个项目包含 所以新建一个Q
  • mysql query 查询_mysql提供了explain query_sql进行查询分析

    mysql提供了explain query sql进行查询分析 下边是一些参数说明 ID Query Optimizer 所选定的执行计划中查询的序列号 Select type 所使用的查询类型 主要有以下这几种查询类型 DEPENDENT
  • 面试时这样介绍算法,想不高薪都难,排序算法(冒泡排序)

    算法背景 冒泡排序是一种简单的排序算法 它重复地遍历要排序的数列 一次比较两个元素 如果他们的顺序错误就把他们交换过来 遍历数列的工作是重复地进行直到没有再需要交换 也就是该数列已经排序完成 这个算法的名字由来是因为越大的元素会经由交换慢慢
  • OpenCV-Python自适应直方图均衡类CLAHE及方法详解

    一 引言 对比度受限的自适应直方图均衡在OpenCV中是通过类CLAHE来提供实现的 老猿没研究过C 中的应用 但OpenCV Python中应用时与普通的Python类构建对象的机制有所不同 老猿做了相关测试 在此简单介绍一下 二 CLA
  • 为什么 API 治理需要内部倡导

    API 治理旨在帮助人们通过 API 实现最大价值 但是 只有了解 API 是什么以及 API 的重要性 并且认识到 API 治理是在帮助他们而不是监管他们 才能实现这一目标 这就是为什么在任何 API 治理举措中都必须包括内部 API 倡
  • 修改mesh的clolors属性

    using UnityEngine using System Collections public class ExampleClass MonoBehaviour void Start Mesh mesh GetComponent
  • Android开发笔记 自定义AlertDialog

    近期有个需求需要在自定义AlertDialog上添加一个输入框 并拿到输入的信息发送给后台 开发中有遇到些之前没有接触过的问题 所以记录下来 如果需要自定义的话 AlertDialog mDialog new AlertDialog Bui
  • linux中安装gitlab,修改密码

    安装分为远程下载安装和本地安装 远程的总提示我阿里云版本不对 所以我使用的是本地安装 1 清华的gitlab安装包下载地址 https mirrors tuna tsinghua edu cn gitlab ce yum el7 C M O
  • python爬取汽车之家_python爬取 汽车之家(汽车授权经销商)

    一 爬虫的目标 打开汽车之家的链接 https www autohome com cn beijing 出现如下页面 我们的目标是 点击找车 然后出现如下图 我们要把图中的信息抓取到 二 实现过程 我们选择 宝马5系 然后点击找车 注意宝马
  • 华为二面被问Redis分布式锁,您是不是有点小瞧我了?

    之前写了两篇有关线程安全的文章 你管这叫线程安全 NET八股文 线程同步技术解读 分布式锁是 线程同步 的延续 最近首度应用 分布式锁 现在想想 分布式锁不是孤立的技能点 这其实就是跨主机的线程同步 进程内 跨进程 跨主机 Lock Mon
  • 蓝桥杯 Day11 java组 DFS

    所谓暴力法 是把所有可能的情况都罗列出来 然后逐一检查 从中找到答案 暴力法往往是 低效 的代名词 不过相对其他 高效 算法 暴力法不仅简单且编码量一般都更短更好写 所以当拿到一个题目后 首先想想如何用暴力法解决 如果暴力法的代码能满足题目
  • Angular中页面传参获取参数

    今天使用html传参数 始终获取不到参数值 研究了半天 终于解决 以下是angular获取页面传参参数方法 在angular中有一项服务为 location 使用这项服务可以获取页面参数 location的方法不止这一个 还可以获取很多 在
  • Leetcode之循环轮转矩阵

    题目 给你一个大小为 m x n 的整数矩阵 grid 其中 m 和 n 都是 偶数 另给你一个整数 k 矩阵由若干层组成 如下图所示 每种颜色代表一层 矩阵的循环轮转是通过分别循环轮转矩阵中的每一层完成的 在对某一层进行一次循环旋转操作时
  • “1448万,一条命”:在生命面前,金钱显得太刺眼

    1 前段时间 美国上市了一种治疗小儿脊髓性肌肉萎缩的药 引起了非常激烈的讨论 为什么会有这么大的争议呢 因为这种药特别贵 标价210万美元 人民币约1448万元 仅仅一支药 就相当于北京三环一套房 小儿脊髓性肌肉萎缩这个病到底有多恐怖呢 得
  • Leetcode题解——30. 包含min函数的栈(辅助栈思想)

    题目地址 剑指 Offer 30 包含min函数的栈 力扣 LeetCode 目录 一 算法思想 二 代码实现 三 拓展思考 首先说结论 这道题虽然难度不大 但是算法思想很重要 是辅助栈应用的生动实例 所以 这里小编不再重点将代码 而是讲思
  • Java零基础教程专栏——数组

    目录 数组 静态初始化数组 数组的访问 数组的动态初始化 元素默认值规则 数组的遍历 数组遍历 求和 冒泡排序 数组的逆序交换 练习题 题目1 训练 训练提示 解题方案 操作步骤 参考答案 题目2 训练 训练提示 解题方案 操作步骤 参考答
  • umi中AssertionError [ERR_ASSERTION]: filePath not found of

    看到了吗 兄弟姐妹们 这个问题整了一天才整的出来 错误的原因主要是由于npm安装的依赖和yarn安装的依赖起了冲突 如果是使用npm i 进行安装的依赖 在使用yarn start进行启动的时候就会出现这个问题 解决办法 1 不知道冲突的是
  • 程序员MM一年的工作总结

    11月8号就是 工作 一周年纪念日了 是该对这过去的一年做个总结了 当初来这个公司因为它是第一个递橄榄枝给我的地方 为了尽量少的减少毕业和工作之间的空档时间 就接受了 我在这一年中改变很大 这样的改变是综合的 1 技术 这里所说的技术应该算
  • 5.mybatisPlus自定义SQL

    今日内容 MP自带的条件构造器虽然很强大 有时候也避免不了写稍微复杂一点业务的sql 比如多表查询 那么那么今天说说MP怎么自定义sql语句吧 另外 除了下文提到的通过queryWrapper实现筛选以外 调用查询时 如果你需要做分页 通过