🍬🍬🍬文章目录
查询
其他
本文基于MybatisPlus3.0.6,首先建议要好好看文档:MyBatis-Plus文档
大前提:CURD的执行接口需要有Wrapper传参,比如list(Wrapper<T> queryWrapper)、page(IPage<T> page、Wrapper<T> queryWrapper)、listObjs(Wrapper<T> queryWrapper)
等
以下代码我把LambdaQueryWrappe
r和QueryWrapper
混用的,实际上用哪个都行。用Lambda的好处是降低代码的耦合性(不需要把字段名写死),但是不利于添加函数处理。(懂的不要奇怪,不懂的留言或者进群讨论)
查询
🍬 01. 只查询指定字段
select(字段1,字段2…)
publicList<ClientBanner>getListById(String businessId){LambdaQueryWrapper<ClientBanner> wrapper=newLambdaQueryWrapper();// 商家图片,未删除,可用状态
wrapper.eq(ClientBanner::getBusinessId,businessId).eq(ClientBanner::isDelState,false).eq(ClientBanner::isUsable,true).select(ClientBanner::isDelState,ClientBanner::getBusinessId);// 只查询指定字段List<ClientBanner> list=this.list(wrapper);return list;}
控制台打印
:==>Preparing:SELECT del_state,business_id FROM client_bannerWHERE business_id=?AND del_state=?AND usable=?:==>Parameters:55456(String),false(Boolean),true(Boolean):<==Total:2
不用LambdaQueryWrapper的方式为:02. 对查询字段进行函数处理
🍬 02. 对查询字段进行函数处理
使用QueryWrapper,传入数据库字段的时候加上"left(content,2) content"
这种函数处理 (别忘了起别名)
publicIPage<ClientEncyArticles>listBySplitPage(SplitPageDTO dto){QueryWrapper<ClientEncyArticles> wrapper=newQueryWrapper<ClientEncyArticles>();
wrapper.eq("del_state",false).orderByDesc("create_time").select("id","author","left(content,2) content","cover_picture","create_time");IPage<ClientEncyArticles> page=this.page(newPage<>(dto.getPage(), dto.getPageSize()), wrapper);return page;}
控制台打印
:==>Preparing:SELECT id,author,left(content,2),cover_picture,create_time FROM client_ency_articlesWHERE del_state=? ORDER BY create_time DESC LIMIT?,?:==>Parameters:false(Boolean),0(Long),10(Long):<==Total:10
🍬 03. 排除/过滤字段查询
文档提到:过滤查询字段(主键除外),入参不包含 class 的 调用前需要wrapper内的entity属性有值!指定字段查询和过滤字段查询这两类方法重复调用以最后一次为准 (指定查询和过滤查询不会同时存在)
- 即过滤查询不能过滤主键
- 使用过滤查询时需要传clsss参数或者用setEntity方法,目的就是把实体传过去。看下面代码
使用select(i->!i.())
(如果不加!
就是指定字段查询,这种指定字段查询不如01. 只查询指定字段 和02. 对查询字段进行函数处理 简便)
.select(i->!i.getProperty().equals("delState"));
.select(i->!i.getColumn().equals("del_state"));
publicIPage<ClientEncyArticles>listBySplitPage(SplitPageDTO dto){ClientEncyArticles cc=newClientEncyArticles();QueryWrapper<ClientEncyArticles> wrapper=newQueryWrapper<ClientEncyArticles>();
wrapper.eq("del_state",false)//.setEntity(new ClientEncyArticles()) //如果下边参数不写ClientEncyArticles.class,这里要加setEntity.orderByDesc("create_time")// .select(ClientEncyArticles.class,i->!i.getColumn().equals("del_state")); // 填的是数据库字段名.select(ClientEncyArticles.class,i->!i.getProperty().equals("delState"));// 填的是实体类字段名,个人认为用这个好一些IPage<ClientEncyArticles> page=this.page(newPage<>(dto.getPage(), dto.getPageSize()), wrapper);return page;}
控制台打印
==>Preparing:SELECT id,author,type,content,cover_picture,create_time FROM client_ency_articlesWHERE del_state=?AND del_state=? ORDER BY create_time DESC LIMIT?,?==>Parameters:false(Boolean),false(Boolean),0(Long),10(Long)<==Total:10
😁欢迎加入QQ群交流: [游戏-Web-开发技术栈 ☄️] '300567032’
点击下方图标一键加入!
其他
🍬自定义where后的所有内容,直接写sql
文档-last函数:无视优化规则直接拼接到sql的最后。
最终可以这样:按照本文上边的查询用法,相当于自定义了sql的select部分;剩下的直接用last函数开搞,整体相当于是手写SQL
(不知道mybatisplus具体的优化规则是什么样的,偶尔使用、自己注意下sql的效率应该没什么问题)
不过,如果真要这么用,可能还不如直接写SQL顺手
🍬单独set某个字段
update()
函数 (文档链接)
源码
示例
😁欢迎加入QQ群交流: [游戏-Web-开发技术栈 ☄️] '300567032’
点击下方图标一键加入!