当前位置: 首页 > news >正文

使用Mybaitis-plus提供的各种的免写SQL的Wrapper的使用方式

文章目录

  • 内连接
  • JoinWrappers.lambda和 new MPJLambdaWrapper 生成的MPJLambdaWrapper对象有啥区别?
  • LambdaQueryWrapper 和 QueryWrapper的区别?
  • LambdaQueryWrapper和MPJLambdaQueryWrapper的区别?
  • 在作单表更新时建议使用:LambdaUpdateWrapper
  • MPJLambdaWrapper和MPJLambdaQueryWrapper的区别?
  • 做删除操作时

内连接

代码:

        MPJLambdaWrapper<ToolsMenu> menuJoinWrapper = JoinWrappers.lambda("m1",ToolsMenu.class);//这里的m1 表示inner join 前面的表的别名menuJoinWrapper.selectAll(ToolsMenu.class,"m1");menuJoinWrapper.innerJoin(ToolsMenu.class,"m2",ToolsMenu::getMenuId,ToolsMenu::getMenuParentId);//这里的m2 表示inner join 后面的表的别名menuJoinWrapper.eq("m2",ToolsMenu::getMenuCode, "tenantManagement");final List<ToolsMenu> list = this.list(menuJoinWrapper);

解析后的SQL语句如下:

SELECTm1.MENU_ID,m1.menu_code,m1.menu_name,m1.menu_describe,m1.menu_parent_id,m1.menu_type,m1.create_date,m1.update_date,m1.menu_order,m1.menu_url,m1.dir_or_menu,m1.is_show,m1.create_user,m1.update_user 
FROMTOOLS_MENU m1INNER JOIN TOOLS_MENU m2 ON ( m2.MENU_ID = m1.menu_parent_id ) 
WHERE( m2.menu_code = ? )

其他的左连接,右连接类似上面的写法。

JoinWrappers.lambda和 new MPJLambdaWrapper 生成的MPJLambdaWrapper对象有啥区别?

MPJLambdaWrapper<ToolsLogin> wrapper = new MPJLambdaWrapper<ToolsLogin>();
MPJLambdaWrapper<ToolsLogin> wrapper = JoinWrappers.lambda(ToolsLogin.class);

在这里插入图片描述

LambdaQueryWrapper 和 QueryWrapper的区别?

在这里插入图片描述

LambdaQueryWrapper和MPJLambdaQueryWrapper的区别?

在这里插入图片描述

在作单表更新时建议使用:LambdaUpdateWrapper

LambdaUpdateWrapper<KldModel> wrapper = new LambdaUpdateWrapper<>();wrapper.eq(KldModel::getOwnId, id).set(KldModel::getIsDelete, 1);kldModelService.update(wrapper);

优点:1.可以指定更新的where条件,2.可以通过特有的set方法有针对性只更新某一个或多个字段

MPJLambdaWrapper和MPJLambdaQueryWrapper的区别?

在这里插入图片描述
举例:

userJoinWrapper.select(ToolsUser::getUserId,ToolsUser::getUserName,ToolsUser::getSex,ToolsUser::getEmpId,ToolsUser::getPhoneNumber,ToolsUser::getRoleCode).select(ToolsTenantUserRelation::getTenantUserRelationId);
//							.selectAs(ToolsTenantUserRelation::getTenantUserRelationId,"tenantUserRelationId");//也可以给字段起别名userJoinWrapper.leftJoin(ToolsTenantUserRelation.class,ToolsTenantUserRelation::getUserId,ToolsUser::getUserId);userJoinWrapper.eq(ToolsTenantUserRelation::getTenantId, tenantId);

对应的SQL:

SELECTt.USER_ID,t.user_name,t.sex,t.emp_id,t.phone_number,t.role_code,t1.TENANT_USER_RELATION_ID 
FROMTOOLS_USER tLEFT JOIN TOOLS_TENANT_USER_RELATION t1 ON ( t1.user_id = t.USER_ID ) 
WHERE( t1.tenant_id = ? )

//这样可以查到不同表里的字段,此时使用MPJLambdaQueryWrapper就不行,必须使用MPJLambdaWrapper来复杂关联查询。

做删除操作时

//			DeleteJoinWrapper<ToolsLogin> deleteQuery = JoinWrappers.delete(ToolsLogin.class); //推荐的方式(首推)
//			LambdaQueryWrapper<ToolsLogin> deleteQuery = new LambdaQueryWrapper<>(); //不推荐,但是也可以MPJLambdaWrapper<ToolsLogin> deleteQuery = new MPJLambdaWrapper<>();//推荐的方式deleteQuery.lt(ToolsLogin::getExpireTime, expireTime.getTime());loginService.remove(deleteQuery);

但是需要注意一点的是:在做删除时,千万注意不要添加以下的内容:
// deleteQuery.select();//可能是在其他地方拷贝过来的。注意一定要删掉
// deleteQuery.selectAll();//可能是在其他地方拷贝过来的 。注意一定要删掉
所以建议使用DeleteJoinWrapper做删除,因为它里面不涉及select或者selectAll方法,因为它是专为做删除定制的。

相关文章:

  • VLAN虚拟局域网
  • llama-webui docker实现界面部署
  • BEVDet4D: Exploit Temporal Cues in Multi-camera 3D Object Detection
  • QT 的.pro 转 vsproject 工程
  • 从多个Excel批量筛查数据后合并到一起
  • 方案精读:2024 华为数字政府智慧政务一网统管解决方案【附全文阅读】
  • Kubernetes集群超配节点容量
  • C++计算 n! 中末尾零的数量
  • 文档安全管理策略
  • 【c语言】深度理解指针4——sizeof和strlen
  • 【Linux网络编程十】网络原理之IP协议【网络层】
  • 【pytorch】torch.nn.Unfold操作
  • 【自然语言处理与大模型】模型压缩技术之量化
  • 21-算法打卡-哈希表-三数之和-leetcode(15)-第二十一天
  • Spring Data
  • AR行业应用案例与NXP架构的结合
  • C语言 数据结构 【堆】动态模拟实现,堆排序,TOP-K问题
  • 【技术派后端篇】基于 Redis 实现网站 PV/UV 数据统计
  • DeepSeek与多元工具协同:创新应用模式与发展前景探究
  • linux安装mysql数据库
  • GDP增长6.0%,一季度浙江经济数据出炉
  • 河南社旗县委书记张荣印转任南阳市人大常委会农工委主任
  • 马上评|古籍书店焕新归来,“故纸陈香”滋养依旧
  • 外交部:中方在乌克兰问题上一直积极致力于劝和促谈
  • 江西修水警方:一民房内发生刑案,犯罪嫌疑人已被抓获
  • 杨小伟被查,国家广播电视总局党组:坚决拥护党中央决定