【Java EE】Mybatis-Plus

1. 開始

? ? ? ? 先進行和以前一樣的項目配置、數據庫連接配置,在這些基礎上,額外引入 Mybatis-Plus 依賴即可。

        <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.11</version></dependency>

? ? ? ? 編寫實體類,一定要按照命名規范,一一對應表的字段。

@Getter
@Setter
@ToString
public class User {private Integer id;private String userName;private String password;private Integer deleteFlag;private Date createTime;private Date updateTime;
}

? ? ? ? 做好上面的準備后,就可以使用 Mybatis-Plus 編寫 Mapper 層了。

2. 使用 Mybatis-Plus 編寫 Mapper 層

????????

?????????

? ? ? ? 現在,如果直接調用 BaseMapper 中的方法會報錯,因為數據庫中的表名是 user_info,而實體類的名稱是 User。因此按照規范命名尤為重要。不過,Mybatis-Plus 也提供了補救方法:在實體類上添加?@TableName("user_info") 注解來手動標識。

? ? ? ? 類似地,在屬性上添加?@TableField() 注解手動標識屬性對應的表字段名。

3. 條件構造器

? ? ? ? QueryWrapper:用于構造 select 和 delete 語句的 where 條件。

? ? ? ? 例如:

select id, user_name, password from user_info
where id=1 and user_name="%S%"
        // 構造條件QueryWrapper<User> qw = new QueryWrapper<User>().select("id", "user_name", "password") // 填入的均為數據表字段名.eq("id", 1).like("user_name", "S");// 調用 select 方法userMapper.selectList(qw);

? ? ? ? lt:less than,小于

? ? ? ? le:less than or equal to,小于或等于

? ? ? ? gt:greater than,大于

? ? ? ? ge:greater?than or equal to, 大于或等于

? ? ? ? eq:equals,等于

? ? ? ? nq:not equals,不等于

? ? ? ? 注意,構造條件其實就是在拼接 sql,括號內填入的均是數據表字段名。此時 mybatisplus 將查詢出來的數據賦值給 java 對象時,TableField 注解將不起作用,因此要求 Java 對象屬性名與數據表字段名相同,或滿足自動駝峰轉換的規范。

? ? ? ? UpdateWrapper:用于構造更新語句。

? ? ? ? 例如:

update user_info set delete_flag=0 where id in (1,2) 
        UpdateWrapper<User> uw = new UpdateWrapper<User>().set("delete_flag", 1).in("id", List.of(1,2));userMapper.update(uw);

? ? ? ? 或:

        UpdateWrapper<User> uw = new UpdateWrapper<User>().setSql("delete_flag = 1").in("id", List.of(1,2));userMapper.update(uw);

? ? ? ? LambdaQueryWrapper:使用上面的方法構造條件有兩個缺點,第一是沒法使用 TableField 注解,第二是所有字段名都是用字符串寫死的,后續一旦修改會比較麻煩。為了解決這個問題,Mybatis-Plus 提供了基于 Lambda 的條件構造器,通過 Lambda 表達式來引用實體類的屬性,避免硬編碼,并能很好利用編譯器為我們檢查。

        QueryWrapper<User> qw = new QueryWrapper<>();qw.lambda().select(User::getId, User::getUserName, User::getPassword).eq(User::getId, 1);List<User> userList = userMapper.selectList(qw);

4. 自定義 SQL

? ? ? ? 首先,mybatisplus 支持全部 mybatis 自定義 sql 的方式(mybatisplus 只對?mybatis 做升級而不做改動)。在這個基礎上,mybatisplus 的 Wrapper 也為自定義 sql 提供了支持。

例 1:

? ? ? ? SQL 語句:

select id, user_name from user_info where id = 1

?????????Mapper 層:

@Mapper
public interface UserMapper extends BaseMapper<User> {// 上層代碼調用該方法時,需傳入 Wrapper 實例作為條件構造參數List<User> selectByCondition(@Param("ew") Wrapper<User> ew);
}
    <select id="selectByCondition" resultType="com.boilermaker.mybatispluslearning.model.User">select id, user_name from user_info ${ew.customSqlSegment}</select>

? ? ? ? 測試:

    @Testvoid selectByCondition() {// 構造 Wrapper 對象,作為參數傳入 Mapper 層QueryWrapper<User> qw = new QueryWrapper<User>().eq("id" ,1);// 調用 Mapper 層userMapper.selectByCondition(qw).forEach(System.out::println);}

例 2:

? ? ? ? SQL 語句:

update book_info set price = price + 10 where id in (1,2,3)

? ? ? ? Mapper 層:

@Mapper
public interface BookMapper extends BaseMapper<Book> {void updateByCondition(@Param("addPrice") int addPrice, @Param("ew") Wrapper<Book> ew);
}
    <update id="updateByCondition">update book_infoset price = price + #{addPrice} ${ew.customSqlSegment}</update>

? ? ? ? 測試:

    @Testvoid updateByCondition() {// 構造 Wrapper 實例,作為第二個參數傳入QueryWrapper<Book> qw = new QueryWrapper<Book>().in("id", List.of(1,2,3));// 調用 Mapper 層bookMapper.updateByCondition(10, qw);}

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

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

相關文章

各版本操作系統對.NET支持情況(250707更新)

借助虛擬機和測試機&#xff0c;檢測各版本操作系統對.NET的支持情況。 安裝操作系統后&#xff0c;安裝相應運行時并能夠運行星塵代理或幸運四葉草為通過條件。 測試平臺&#xff1a;VMware Workstation 鏡像來源&#xff1a;MSDN I Tell You 參考&#xff1a; .NET Fram…

5-Kafka-replication(副本機制)概念

&#x1f504; Kafka 副本機制&#xff08;Replication&#xff09; 核心概念概念說明Replica (副本)分區的完整拷貝&#xff0c;分布在不同 BrokerReplication Factor副本總數&#xff08;含 Leader&#xff09;&#xff0c;生產環境建議 ≥3Leader Replica處理所有讀寫請求&a…

langgraph的ReAct應用

一、什么是langgraph的ReActLangGraph 中的 ReAct&#xff08;Reasoning Acting&#xff09;代理是一種結合推理與行動能力的 AI 代理架構&#xff0c;通過動態決策鏈實現復雜任務處理。以下是其核心要點及實踐指南。1、ReAct 代理的核心原理1.1工作流程&#xff1a;ReAct 代理…

一個編輯功能所引發的一場知識探索學習之旅(JavaScript、HTML)

文章目錄一個編輯功能所引發的一場知識探索學習之旅&#xff08;JavaScript、HTML&#xff09;1. 一個編輯功能案例2. 知識點探索學習3. 參考資料一個編輯功能所引發的一場知識探索學習之旅&#xff08;JavaScript、HTML&#xff09; 1. 一個編輯功能案例 HTML&#xff1a; &l…

kali制作Windows木馬

環境描述&#xff1a;攻擊機&#xff1a;Kali-2025實驗靶機&#xff1a;Windows11不要攻擊他人&#xff0c;這只是網絡安全實驗還是一樣獲取IP地址制作好之后開服務&#xff0c;上傳下載在靶機右鍵保留下載記得把防火墻&#xff0c;安全中心關了否則無法下載之后就可以kali控制…

從零實現一個GPT 【React + Express】--- 【1】初始化前后端項目,實現模型接入+SSE

摘要 本系列文章主要是實現一個能夠對話以及具有文生圖等功能的模型應用。主要UI界面會參考chat-gpt,豆包等系列應用。模型使用的是gpt開源的大模型。 如果你是一個前端開發工程師需要一個自己的開源項目&#xff0c;可以學習這個系列的文章&#xff0c;不需要有很完整的后端…

【PTA數據結構 | C語言版】在順序表 list 的第 i 個位置上插入元素 x

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將 n 個整數存入順序表&#xff0c;對任一給定整數 x&#xff0c;將其插入順序表中指定的第 i 個位置。注意&#xff1a;i 代表位序&#xff0c;從 1 開始&#xff0c;不是數…

汽車智能化2.0引爆「萬億蛋糕」,誰在改寫游戲規則?

進入2025年&#xff0c;長安、奇瑞、比亞迪等各大主機廠紛紛將智能化推進至全新高度&#xff0c;中國汽車智能化競爭進入了“技術市場生態”綜合較量階段。一方面&#xff0c;各大主機廠全力推進輔助駕駛的規模化普及&#xff0c;掀起了一場關于高階輔助駕駛的“技術平權”革命…

QT 第八講 --- 控件篇 Widget(三)界面系列

前言&#xff1a; 在上一講《QT 第七講 --- 控件篇 &#xff08;二&#xff09;window系列與qrc機制》中&#xff0c;我們探討了應用程序窗口&#xff08;QMainWindow, QWidget&#xff09;的基礎結構、窗口標志、狀態以及Qt強大的資源管理機制&#xff08;.qrc文件&#xff0…

廣州華銳互動:AR 領域的創新與服務先鋒?

&#xff08;一&#xff09;定制化服務? 廣州華銳互動秉持 “以客戶為中心” 理念&#xff0c;為客戶提供高度定制化 AR 解決方案。項目初期&#xff0c;通過多種方式深入了解客戶需求&#xff0c;挖掘痛點。基于需求分析&#xff0c;技術團隊運用自主研發技術和先進算法&…

暑假算法日記第一天

目標?&#xff1a;刷完靈神專題訓練算法題單 階段目標&#x1f4cc;&#xff1a;【算法題單】滑動窗口與雙指針 LeetCode題目:1456. 定長子串中元音的最大數目643. 子數組最大平均數 I1343. 大小為 K 且平均值大于等于閾值的子數組數目2090. 半徑為 k 的子數組平均值2379. 得…

【軟考高項】信息系統項目管理師-第1章 信息化發展(1.5 數字化轉型與元宇宙、1.6 標題類知識點、1.7 十四五規劃內容匯總)

文章大綱 第1章 信息化發展1.5 數字化轉型與元宇宙1.5.1 數字化轉型1.5.2 元宇宙1.6 標題類知識點1.7 十四五規劃內容匯總1.8 10道試題第1章 信息化發展 學習建議: 此章內容大部分為新增內容,基本是全新的章節2023年5月考試2分選擇,5分案例2023年下半年各批次選擇題2分左右1.…

STM32F103C8T6單片機內部執行原理及啟動流程詳解

引言&#xff1a;為什么深入理解STM32啟動流程很重要&#xff1f;STM32F103C8T6作為嵌入式開發中最常用的單片機之一&#xff0c;其內部執行原理和啟動流程是理解嵌入式系統底層運行機制的核心。無論是開發Bootloader、調試HardFault異常&#xff0c;還是優化系統啟動速度&…

【python 常用的數學科學/計算機視覺等工具】

當然有&#xff01;在科學計算、機器學習、圖像處理等領域&#xff0c;scikit-learn、scikit-image&#xff08;skimage&#xff09;、SciPy、OpenCV 是非常重要的庫&#xff0c;但它們不是唯一的。以下是一些與它們類似或互補的項目&#xff0c;按照用途分類列出&#xff1a; …

LUMP+NFS架構的Discuz論壇部署

一、配置準備 每臺主機都安裝mysql、nfs、php、mysql 對每臺主機都進行關閉防火墻、上下文等&#xff0c;減少阻礙[rooteveryone ~]# systemctl stop firewalld [rooteveryone ~]# setenforce 0安裝插件等[rootlocalhost mysql]# yum install -y nfs-utils nginx [rootlocalho…

C++STL-deque

一.基礎概念deque和vector一樣都是對元素的操作&#xff0c;不同點&#xff1a;vector對元素增刪后元素會往前或往后移&#xff0c;如果數據不大沒有太多影響&#xff0c;如果數據很大效率會變低&#xff1b;deque對元素增刪不會使元素位置改變&#xff0c;所有效率會變高。二.…

字節跳動高質量聲音克龍文字轉語音合成軟件MegaTTS3整合包

MegaTTS3是抖音團隊聯合國內其他大學研發的一款語音合成及聲音克龍應用&#xff0c;可實現零樣本語音克龍及富有情感的自然語音合成。我基于當前最新版制作了免安裝一鍵啟動整合包。 MegaTTS3介紹 MegaTTS 3 是字節跳動&#xff08;ByteDance&#xff09;與浙江大學聯合開發的…

RPC:遠程過程調用機制

目錄 1、概念 2、RPC架構 2.1 RPC的四個核心組件 2.2 訪問流程 3、關鍵概念 3.1 接口定義語言 (IDL - Interface Definition Language) 3.2 序列化與反序列化 (Serialization & Deserialization - Marshalling/Unmarshalling) 3.3 網絡傳輸 (Transport) 3.4 服務發…

EPLAN 電氣制圖(六):電機正反轉副勾主電路繪制

一、項目背景&#xff1a;為什么繪制電機正反轉主電路&#xff1f; 在多功能天車系統中&#xff0c;電機正反轉控制是核心功能之一。通過 EPLAN 繪制主電路&#xff0c;不僅能清晰展示電源分配、換相邏輯和線纜連接&#xff0c;還能為后續 PLC 控制設計奠定基礎。本次以西門子設…

JAVA JVM對象的實現

jvm分配內存給對象的方式1. 內存分配的總體流程對象內存分配的主要步驟&#xff1a;類加載檢查&#xff1a;確認類已加載、解析和初始化。內存分配&#xff1a;根據對象大小&#xff0c;從堆中劃分內存空間。內存初始化&#xff1a;將分配的內存空間初始化為零值&#xff08;不…