欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

5.mybatisPlus自定义SQL

程序员文章站 2022-07-13 09:32:57
...

今日内容

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

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

QueryWrapper\Wrapper联系

5.mybatisPlus自定义SQL

5.mybatisPlus自定义SQL

总结: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-官方文档

5.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

5.mybatisPlus自定义SQL

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}的位置决定了条件构造器的条件在哪。

相关标签: 我的项目