使用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來復雜關聯查詢。

三表聯查的情況

MPJLambdaWrapper<ToolsUser> userJoinWrapper= JoinWrappers.lambda();userJoinWrapper.select(ToolsUser::getUserId,ToolsUser::getUserName,ToolsUser::getSex,ToolsUser::getEmpId,ToolsUser::getPhoneNumber,ToolsUser::getRoleCode).select(ToolsRole::getRoleName).select(ToolsTenantUserRelation::getTenantUserRelationId);
//							.selectAs(ToolsTenantUserRelation::getTenantUserRelationId,"tenantUserRelationId");//也可以給字段起別名userJoinWrapper.leftJoin(ToolsRole.class,ToolsRole::getRoleCode,ToolsUser::getRoleCode);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.role_name,t2.TENANT_USER_RELATION_ID 
FROMTOOLS_USER tLEFT JOIN TOOLS_ROLE t1 ON ( t1.role_code = t.role_code )LEFT JOIN TOOLS_TENANT_USER_RELATION t2 ON ( t2.user_id = t.USER_ID ) 
WHERE( t2.tenant_id = 1 ) LIMIT 10

這樣可以把role_tool、tools_tenant_user_relation、tools_user表里的想要的數據都可以返回了。
在這里插入圖片描述

做刪除操作時

//			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方法,因為它是專為做刪除定制的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/80074.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/80074.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/80074.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于微信小程序的走失兒童幫助系統-項目分享

基于微信小程序的走失兒童幫助系統-項目分享 項目介紹項目摘要管理員功能圖用戶功能圖系統功能圖項目預覽首頁走失兒童個人中心走失兒童管理 最后 項目介紹 使用者&#xff1a;管理員、用戶 開發技術&#xff1a;MySQLJavaSpringBootVue 項目摘要 本系統采用微信小程序進行開…

P3916 圖的遍歷

P3916 圖的遍歷 題目來源-洛谷 題意 有向圖中&#xff0c;找出每個節點能訪問到的最大的節點 思路 每個節點的最大節點&#xff0c;不是最長距離&#xff0c;如果是每個節點都用dfs去找最大值&#xff0c;顯然1e6*1e6 超時了&#xff0c;只能60分從第一個節點開始遍歷&…

掌握常見 HTTP 方法:GET、POST、PUT 到 CONNECT 全面梳理

今天面試還問了除了 get 和 post 方法還有其他請求方法嗎&#xff0c;一個都不知道&#xff0c;這里記錄下。 &#x1f310; 常見 HTTP 請求方法一覽 方法作用描述是否冪等是否常用GET獲取資源&#xff0c;參數一般拼接在 URL 中? 是? 常用POST創建資源 / 提交數據&#xff…

裸金屬服務器的應用場景有哪些?

隨著云計算技術不斷發展&#xff0c;裸金屬服務器作為一臺既具有傳統物理服務器特點的硬件設備&#xff0c;還具備云計算技術的服務器化服務功能&#xff0c;是硬件和軟件相結合的網絡設備&#xff0c;逐漸被越來越多的企業所關注&#xff0c;那么&#xff0c;裸金屬服務器的應…

【得物】20250419筆試算法題

文章目錄 前言第一題1. 題目描述2. 思路解析3. AC代碼 第二題1. 題目描述2. 思路解析3. AC代碼 第三題1. 題目描述2. 思路解析3. AC代碼 前言 三道題目都比較簡單&#xff0c;大家都可以試著做一下。 第一題 1. 題目描述 題目鏈接&#xff1a;矩陣變換 2. 思路解析 按題…

明遠智睿2351開發板四核1.4G Linux處理器:驅動創新的引擎

在科技日新月異的今天&#xff0c;創新成為了推動社會進步的核心動力。而在這場創新的浪潮中&#xff0c;一款性能卓越、功能全面的處理器無疑是不可或缺的引擎。今天&#xff0c;我們介紹的這款四核1.4G處理器搭配Linux系統的組合&#xff0c;正是這樣一款能夠驅動未來創新的強…

Oracle Database Resident Connection Pooling (DRCP) 白皮書閱讀筆記

本文為“Extreme Oracle Database Connection Scalability with Database Resident Connection Pooling (DRCP)”的中文翻譯加閱讀筆記。覺得是重點的就用粗體表示了。 白皮書版本為March 2025, Version 3.3&#xff0c;副標題為&#xff1a;Optimizing Oracle Database resou…

VS Code + GitHub:高效開發工作流指南

目錄 一、安裝 & 基本配置 1.下載 VS Code 2.安裝推薦插件(打開側邊欄 Extensions) 3.設置中文界面(可選) 二、使用 VS Code 操作 Git/GitHub 1.基本 Git 操作(不輸命令行!) 2.連接 GitHub(第一次使用) 三、克隆遠程倉庫到 VS Code 方法一(推薦): 方…

【LLM】llama.cpp:合并 GGUF 模型分片

GGUF&#xff08;GPT-Generated Unified Format&#xff09;是一種專為大規模語言模型設計的二進制文件格式&#xff0c;支持將模型分割成多個分片&#xff08;*-of-*.gguf&#xff09;。當從開源社區&#xff08;如 HuggingFace 或 ModelScope&#xff09;下載量化模型時&…

Ubuntu 系統下安裝和使用性能分析工具 perf

在 Ubuntu 系統下安裝和使用性能分析工具 perf 的步驟如下&#xff1a; 1. 安裝 perf perf 是 Linux 內核的一部分&#xff0c;通常通過安裝 linux-tools 包獲取&#xff1a; # 更新軟件包列表 sudo apt update# 安裝 perf&#xff08;根據當前內核版本自動匹配&#xff09; …

Buffer of Thoughts: Thought-Augmented Reasoningwith Large Language Models

CODE: NeurIPS 2024 https://github.com/YangLing0818/buffer-of-thought-llm Abstract 我們介紹了思想緩沖(BoT)&#xff0c;一種新穎而通用的思想增強推理方法&#xff0c;用于提高大型語言模型(大型語言模型)的準確性、效率和魯棒性。具體來說&#xff0c;我們提出了元緩沖…

Java面試中問單例模式如何回答

1. 什么是單例模式? 單例模式(Singleton Pattern)是一種設計模式,確保某個類在整個應用中只有一個實例,并且提供全局訪問點。它有以下特點: 確保只有一個實例。提供全局訪問點。防止多次實例化,節約資源。2. 如何實現單例模式? 單例模式有多種實現方式,以下是最常見…

實戰華為1:1方式1 to 1 VLAN映射

本文摘自筆者于2024年出版&#xff0c;并得到廣泛讀者認可&#xff0c;已多次重印的《華為HCIP-Datacom路由交換學習指南》。 華為設備的1 to 1 VLAN映射有1:1和N :1兩種方式。1:1方式是將指定的一個用戶私網VLAN標簽映射為一個公網VLAN標簽&#xff0c;是一種一對一的映射關系…

認識Vue

認識Vue 文章目錄 認識Vue一、vue是什么二、Vue核心特性數據驅動&#xff08;MVVM)組件化指令系統 三、Vue跟傳統開發的區別1. **開發模式&#xff1a;MVVM vs 模板驅動**2. **組件化開發**3. **狀態管理**4. **路由管理**5. **構建與工程化**6. **性能優化**7. **學習曲線**8.…

iOS中使用AWS上傳zip文件到Minio上的oss平臺上

1. 集成AWS相關庫&#xff08;千萬不要用最新的版本&#xff0c;否則會出現風格化虛擬路徑&#xff0c;找不到主機名&#xff09; pod AWSS3, ~> 2.10.0 pod AWSCore, ~> 2.10.0 2. 編寫集成的相關代碼 - (void)uploadFileToMinIO {NSString *endPoint "http://…

usb2.0的硬件知識(一)

一、USB2.0的硬件知識 1.1 USB2.0速率 USB 2.0協議支持3種速率&#xff1a;低速(Low Speed&#xff0c;1.5Mbps)、全速(Full Speed, 12Mbps)、高速(High Speed, 480Mbps)&#xff1b;USB Hub、USB設備&#xff0c;也分為低速、全速、高速三種類型。 1.2 USB2.0硬件線序組成 U…

植物大戰僵尸雜交版v3.6最新版本(附下載鏈接)

B站游戲作者潛艇偉偉迷于4月19日更新了植物大戰僵尸雜交版3.6版本&#xff01;&#xff01;&#xff01;&#xff0c;有b站賬戶的記得要給作者三連關注一下呀&#xff01; 不多廢話下載鏈接放上&#xff1a; 夸克網盤鏈接&#xff1a;&#xff1a;https://pan.quark.cn/s/1af9b…

LeadeRobot具身智能應用標桿:無人機X柔韌具身智能,空中精準作業游刃有余

當前,具身智能已成為全球科技領域的前沿焦點,更受到國家戰略級重視,吸引科技產業巨頭搶灘布局。但同時,具身智能的商業化路徑、規模化應用場景、技術成本等難題也開始在資本界與產業圈引起廣泛討論。 目前,萬勛科技基于Pliabot 柔韌技術已推出多款具身智能柔韌機器人產品,在柔…

服務器上安裝maven

1.安裝 下載安裝包 https://maven.apache.org/download.cgi 解壓安裝包 cd /opt/software tar -xzvf apache-maven-3.9.9-bin.tar.gz 安裝目錄(/opt/maven/) mv /opt/software/apache-maven-3.9.9 /opt/ 3.權限設置 把/opt/software/apache-maven-3.9.9 文件夾重命名為ma…

AI 模型在前端應用中的典型使用場景和限制

典型使用場景 1. 智能表單處理 // 使用TensorFlow.js實現表單自動填充 import * as tf from tensorflow/tfjs; import { loadGraphModel } from tensorflow/tfjs-converter;async function initFormPredictor() {// 加載預訓練的表單理解模型const model await loadGraphMod…