mybatis-plus構造器查詢

文章目錄

  • Hutool工具包Vo與entity轉換
  • 多表分頁查詢
  • 構造器:查詢
  • 構造器:拼接
  • 構造器:刪除操作
  • 構造器:修改操作
  • 查詢關鍵字


Hutool工具包Vo與entity轉換

BeanUtils:copyProperties(vo, entity),vo轉實體類。

LambdaQueryWrapper 構造不同類型的查詢條件,
orderByDesc 方法用于降序排序。

需要注意:

? 使用 LambdaQueryWrapper 時,實體類 和 **數據庫表 **之間映射關系。

實體類必須使用 @TableName 注解,指定表名。

多表分頁查詢

IPage<DeviceItemResp> devicePages = tDevicesMapper.selectJoinPage(userPage, DeviceItemResp.class,new MPJLambdaWrapper<TDevices>().select(TDevices::getSn)    // 查詢出指定字段.select(TDevices::getName).selectAs(TDevices::getBlueContent, DeviceItemResp::getBluetooth).innerJoin(TuserDevice.class, TuserDevice::getDeviceSn, TDevices::getSn).eq(TuserDevice::getUserId, userId).orderByDesc(TDevices::getCreateDate));// new MPJLambdaWrapper<TDevices>(): 
// MPJLambdaWrapper 是一個條件構造器,用于構建查詢條件。
// new MPJLambdaWrapper<TDevices>() 創建了一個 TDevices 實體類的條件構造器對象。
// .selectAs() 方法用于指定查詢的字段,并將其作為另一個字段的別名。這里使用 TDevices::getBlueContent 方法引用來查詢 TDevices 實體類的 blueContent 字段,并將其作為 DeviceItemResp 類中的 bluetooth 字段的別名。/***  .selectAs() 方法用于指定查詢的字段,并將其作為另一個字段的別名。*  這里使用 TDevices::getBlueContent 方法引用來查詢 TDevices 實體類的 blueContent 字段,并將其作為 DeviceItemResp 類中的 bluetooth 字段的別名。** .innerJoin() 方法用于指定聯合查詢的表和關聯條件。這里使用 TuserDevice.class 表示聯合查詢的表是 TuserDevice,并通過 TuserDevice::getDeviceSn 和 TDevices::getSn 方法引用來指定關聯條件。** .eq() 方法指定查詢的相等條件,這里使用 TuserDevice::getUserId 方法引用來查詢 TuserDevice 表中的 userId 字段,并與變量 userId 進行相等比較。** .orderByDesc() 按照 createDate 字段進行降序排序。** 以上就是這段代碼的詳細解釋。它主要實現了一個聯合查詢,并通過條件構造器指定了查詢字段、關聯表和條件,并對結果進行了分頁和排序。*/

構造器:查詢

// 簡化構造器LambdaQueryWrapper<ThingInfoPO> lambdaQueryWrapper =Wrappers.lambdaQuery(.class).eq(::getCode, code);// 1、根據指定條件進行查詢一條記錄。
LambdaQueryWrapper<SaveDevice> queryWrapper =  new LambdaQueryWrapper<>();queryWrapper.eq(SaveDevice::getDeviceUid, registerDTO.getDeviceUid());SaveDevice saveDevice = saveDeviceMapper.selectOne(queryWrapper);// 1.1 查詢指定名稱的用戶列表
List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getName, "John").orderByDesc(User::getAge));// 1.2 批量查詢LambdaQueryWrapper<PlantLabelConfigPo> queryWrapper =Wrappers.lambdaQuery(PlantLabelConfigPo.class).in(PlantLabelConfigPo::getId, listLabelId);// 1.3 查詢出指定字段,修改時間不在某個區間的值。
LocalDateTime now = LocalDateTime.now();LocalDateTime localDateTime = now.minusHours(1);Date oneHourBefore = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());this.listObjs(new LambdaQueryWrapper<DeviceDetailLowFrequency>().notBetween(DeviceDetailLowFrequency::getUpdateTime, oneHourBefore, new Date()).select(DeviceDetailLowFrequency::getSn), Object::toString);

構造器:拼接

// 1、構造器拼接SQL語句
LambdaQueryWrapper<ThingInfoPO> wrapper =buildThingInfoQuery(tenantId).eq(ThingInfoPO::getCode, thing.getCode());// 2、拼接構造條件
private LambdaQueryWrapper<ThingInfoPO> buildThingInfoQuery(@Nullable Long tenantId) {LambdaQueryWrapper<ThingInfoPO> wrapper = new QueryWrapper<ThingInfoPO>().lambda();if (tenantId != null) {wrapper.eq(ThingInfoPO::getTenantId, tenantId);}return wrapper;}

構造器:刪除操作

// 1、刪除所有名字為 Jack 的用戶記錄
int rows = userMapper.delete(new LambdaQueryWrapper<User>().eq(User::getName, "Jack"));// 2、批量刪除
LambdaQueryWrapper<PlantLabelInfoPo> wrapper = new QueryWrapper<PlantLabelInfoPo>().lambda();wrapper.in(PlantLabelInfoPo::getPlantLabelId, idList);plantLabelInfoDao.delete(wrapper);

構造器:修改操作

// 更新所有名字為 John 的用戶記錄,設置年齡為 30
int rows = userMapper.update(new User(), new LambdaQueryWrapper<User>().eq(User::getName, "John").set(User::getAge, 30));// 根據指定條件進行修改。
UpdateWrapper<SaveDevice> wrapper = new UpdateWrapper<>();wrapper.eq("device_uid", registerDTO.getDeviceUid());wrapper.set("psk", psk);
saveDeviceMapper.update(null, wrapper);// 更新多個字段.
LambdaUpdateWrapper<DeviceDetail> updateWrapper = new LambdaUpdateWrapper<>();updateWrapper.eq(DeviceDetail::getSn, req.getSn());deviceDetail.setUpdateBy(CurrentUser.getUser());deviceDetail.setUpdateTime(new Date());// 更新實體類中所有字段,會覆蓋數據庫字段。謹慎使用。
deviceDetailMapper.update(new DeviceDetail(), updateWrapper);

查詢關鍵字

查詢方式說明
setSqlSelect設置 SELECT 查詢字段
whereWHERE 語句,拼接 +?WHERE 條件
andAND 語句,拼接 +?AND 字段=值
andNewAND 語句,拼接 +?AND (字段=值)
orOR 語句,拼接 +?OR 字段=值
orNewOR 語句,拼接 +?OR (字段=值)
eq等于 =
allEq基于 map 內容等于 =
ne不等于 <>
gt大于 >
ge大于等于 >=
lt小于 <
le小于等于 <=
like模糊查詢 LIKE
notLike模糊查詢 NOT LIKE
inIN 查詢
notInNOT IN 查詢
isNullNULL 值查詢
isNotNullIS NOT NULL
groupBy分組 GROUP BY
havingHAVING 關鍵詞
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 條件語句
notExistsNOT EXISTS 條件語句
betweenBETWEEN 條件語句
notBetweenNOT BETWEEN 條件語句
addFilter自由拼接 SQL
last拼接在最后,例如:last(“LIMIT 1”)
/*** 屏幕尺寸*/
@Max(message = "尺寸最大值不超過10", value = 10)
@Min(message = "尺寸最小值不低于4", value = 4)
private Integer screenSize;/*** 運行的系統平臺*/@EnumVale(value = {"system_linux", "system_android", "system_none"}, message = "運行的系統平臺不允許填入其他值")@NotBlank(message = "運行的系統平臺數據不為空")private String system;// 使用Sa-token實現單點登錄
QueryDSL僅僅是一個通用的查詢框架,專注于通過 JavaAPI 構建類型安全的 Sql 查詢,也可以說 QueryDSL 是基于各種 ORM 框架以及 Sql 之上的一個通用的查詢框架,QueryDSL 的查詢,類是于 SQL 查詢,很全面只不過一個是用 SQL 一個是用代碼來代替 SQL

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

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

相關文章

在裝有 PostgreSQL 14 的 Red Hat8上安裝 `pg_cron`

要在裝有 PostgreSQL 14 的 Red Hat、CentOS、Fedora 或 Amazon Linux 上安裝 pg_cron&#xff0c;請遵循以下步驟。這些步驟假定您已經安裝了 PostgreSQL Global Development Group (PGDG) 的 PostgreSQL 版本。 安裝 pg_cron 擴展 使用 yum 安裝 pg_cron 擴展&#xff1a;s…

(四)Tiki-taka算法(TTA)求解無人機三維路徑規劃研究(MATLAB)

一、無人機模型簡介&#xff1a; 單個無人機三維路徑規劃問題及其建模_IT猿手的博客-CSDN博客 參考文獻&#xff1a; [1]胡觀凱,鐘建華,李永正,黎萬洪.基于IPSO-GA算法的無人機三維路徑規劃[J].現代電子技術,2023,46(07):115-120 二、Tiki-taka算法&#xff08;TTA&#xf…

基于SSH的java記賬管理系統

基于SSH的java記賬管理系統 一、系統介紹二、功能展示四、其他系統實現五、獲取源碼 一、系統介紹 項目類型&#xff1a;Java EE項目 項目名稱&#xff1a;基于SSH的記賬管理系統 項目架構&#xff1a;B/S架構 開發語言&#xff1a;Java語言 前端技術&#xff1a;HTML、CS…

初識優先級隊列與堆

1.優先級隊列 由前文隊列queue可知&#xff0c;隊列是一種先進先出(FIFO)的數據結構&#xff0c;但有些情況下&#xff0c;操作的數據可能帶有優先級&#xff0c;一般出隊列時&#xff0c;可能需要優先級高的元素先出隊列&#xff0c;在此情況下&#xff0c;使用隊列queue顯然不…

git常用命令指南

目錄 一、基本命令 1、創建分支 2、切換分支 3、合并分支 4、初始化空git倉庫 二、文件操作 1、創建文件 2、添加多個文件 3、查看項目的當前狀態 4、修改文件 5、刪除文件 6、提交項目 三、實際操作 1、創建目錄 2、進入新目錄 3、初始化空git倉庫 4、創建文…

C++STL的string模擬實現

文章目錄 前言string的成員變量成員函數構造函數拷貝構造賦值重載 模擬實現string各種接口print迭代器普通迭代器const迭代器 string比較大小push_backinsert 和 eraseinserterase reserve和resizereserveresize swapfindcout和cincoutcin 前言 今天要講string的底層實現&…

總線(什么是南北橋?您都用過哪些總線?)

什么是總線&#xff1f; 計算機系統中的總線&#xff08;Bus&#xff09;是指計算機設備和設備之間傳輸信息的公共數據通道&#xff0c;是連接計算機硬件系統內多種設備的通信線路&#xff0c;它的一個重要特征是由總線上的所有設備共享&#xff0c;因此可以將計算機系統內的多…

python基于輕量級GhostNet模型開發構建23種常見中草藥圖像識別系統

輕量級識別模型在我們前面的博文中已經有過很多實踐了&#xff0c;感興趣的話可以自行移步閱讀&#xff1a; 《移動端輕量級模型開發誰更勝一籌&#xff0c;efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2駕駛危險行為識別模型對比開發測試》 《基…

Vue 核心 數據監聽 computed | watch

Vue 核心 數據監聽 computed | watch 一、今日學習目標 1.指令補充 指令修飾符v-bind對樣式增強的操作v-model應用于其他表單元素 2.computed計算屬性 基礎語法計算屬性vs方法計算屬性的完整寫法成績案例 3.watch偵聽器 基礎寫法完整寫法 4.綜合案例 &#xff08;演示&…

缺陷責任期與質量保修期如何快速區分?

缺陷責任期 《建設工程質量保證金管理辦法》第二條對缺陷給出了定義&#xff0c;是指建設工程質量不符合工程建設強制性標準、設計文件&#xff0c;以及承包合同的約定。缺陷責任期是指承包人對工程質量瑕疵擔保的期限&#xff0c;由發承包雙方在合同中進行約定&#xff0c;期…

制造業數字化轉型該怎么做?這篇1.6萬字的文章終于講透了!

制造業數字化轉型該怎么做&#xff1f;下面通過 1.6W 字干貨內容&#xff0c;全面講透制造業數字化轉型。 &#xff08;為防后續找不到&#xff0c;建議大家先點贊收藏~&#xff09; 引言&#xff1a; 1、發達國家制造業回流力度加大&#xff0c;中國制造業戰略地位提升。 …

selenium 解決 id定位、class定位中,屬性值帶空格的解決辦法

一、前置說明 selenium遇到下面這種元素&#xff1a; <th id"demo id" class"value1 value2 value3 ">1、雖然id一般不會有空格&#xff0c;但是前端錯誤的這種寫法(如下圖)&#xff0c;會造成使用id定位不到元素&#xff0c;如&#xff1a; find…

面試遇到的一些問題(二)

1、v-if v-show 區別,他們的生命周期區別 v-show: (類似于display:none/black 的切換)不管初始值是true 或false 都會進行渲染,狀態改變也不會銷毀和重新生成。不會影響生命周期 v-if : 是根據條件,dom進行刪除插入操作。 依附于普通元素時:會觸發父組件的beforeUpdate和u…

IOday6作業

1>使用有名管道&#xff0c;完成兩個進程的相互通信 //create.c #include<myhead.h>int main(int argc, const char *argv[]) {if((mkfifo("myfifo1",0664)) -1){perror("mkfifo");return -1;}if((mkfifo("myfifo2",0664)) -1){perror…

MYSQL練題筆記-高級查詢和連接-這系列最后一題以及下個系列(子查詢)的第一題

今天做了下面兩題&#xff0c;到第三題的時候想了下但是沒有太多的思路&#xff0c;然后看題解的時候實在是覺得自己不會&#xff0c;打算明天看吧。 1.按分類統計薪水相關的表和題目如下 我是想著簡化問題&#xff0c;先找出薪水低于30000的員工&#xff0c;然后找這些員工的上…

JAVA 鎖

樂觀鎖 樂觀鎖是一種樂觀思想&#xff0c;即認為讀多寫少&#xff0c;遇到并發寫的可能性低&#xff0c;每次去拿數據的時候都認為別人不會修改&#xff0c;所以不會上鎖&#xff0c;但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據&#xff0c;采取在寫時先讀出…

Sam Altman當選“TIME時代周刊”2023年度最佳CEO!還有梅西、Taylor Swift當選...

TIME時代周刊昨日在官網公布了2023年最佳CEO—— Sam Altman當選! 此外&#xff0c;Taylor Swift當選年度最佳人物&#xff0c;梅西當選年度最佳運動員。 Sam Altman的當選可謂是實至名歸&#xff01;沒有誰能比火爆全球的ChatGPT背后&#xff0c;OpenAI的CEO更“成功”了。 …

ssh安裝及問題解決

ssh安裝及遇到的問題 ssh分為客戶端 openssh-client 和服務器 openssh-server&#xff0c;可以利用以下命令確認是否安裝&#xff1a; dpkg -l | grep ssh我用ubantu安裝的&#xff0c;所以默認安裝了客戶端 安裝客戶端和服務器端的命令分別為&#xff1a; sudo apt-get ins…

金融量化交易:使用Python實現遺傳算法

大家好&#xff0c;遺傳算法是一種受自然選擇過程啟發的進化算法&#xff0c;用于尋找優化和搜索問題的近似解決方案。本文將使用Python來實現一個用于優化簡單交易策略的遺傳算法。 1.遺傳算法簡介 遺傳算法是一類基于自然選擇和遺傳學原理的優化算法&#xff0c;其特別適用…

MySQL 教程 2.1

MySQL 插入數據 MySQL 表中使用 INSERT INTO 語句來插入數據。 你可以通過 mysql> 命令提示窗口中向數據表中插入數據&#xff0c;或者通過PHP腳本來插入數據。 語法 以下為向MySQL數據表插入數據通用的 INSERT INTO SQL語法&#xff1a; INSERT INTO table_name (colu…