lambdaQueryWrapper自定义sql | 您所在的位置:网站首页 › 审计英文怎么读 › lambdaQueryWrapper自定义sql |
今日内容
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 roleList(@RequestParam Map 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 queryWrapper = new QueryWrapper(); queryWrapper.orderByDesc("Id");//降序 if( sheBeiAdd.length()!=0) { //如果username没有数据为"",则不加入条件 queryWrapper.like("SheBeiId", params.get("SheBeiId") + "");//条件构造器 } if( deptId!=-1) { //表格过滤 List depts =sysDeptMapper.deptListByDeptId(deptId.intValue()); depts.add(deptId.intValue()); queryWrapper.in("Memo", depts);//条件构造器 } Page page = new Page( currrentPage, size); // 查询第x页,每页返回x条 //条件构造器+自定义sql+分页,三大技术给你整合好好的,mybatisplus厉害。 IPage iPage =baojingMapper.selectListByWrapper(page,queryWrapper); Map map = new HashMap(); map.put("total",iPage.getTotal()); // map.put("data",iPage.getRecords()); //返回的数据是selectListByWrapper return map; } }mapper.java public interface EaBaojingMapper extends BaseMapper { //参数里面传递的是我们在调用这个方法的包装类型,Wrapper是抽象类,querywrapper继承了他。 IPage selectListByWrapper(Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); }mapper.xml 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}${ew.customSqlSegment}的位置决定了条件构造器的条件在哪。 |
CopyRight 2018-2019 实验室设备网 版权所有 |