最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis使用POJO參數(shù)動(dòng)態(tài)查詢教程的實(shí)現(xiàn)

 更新時(shí)間:2026年01月26日 10:00:15   作者:Yrui.  
本文主要介紹了MyBatis使用POJO參數(shù)動(dòng)態(tài)查詢教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

項(xiàng)目結(jié)構(gòu)概覽(基于圖片描述):

mybatis02
├─ src/main/java
│  └─ cn.cjxy
│     ├─ domain      # 實(shí)體類(如 Emp.java)
│     ├─ mapper      # Mapper 接口(如 EmpMapper.java)
│     └─ pojo        # 查詢參數(shù) POJO(如 QueryPojo.java)
├─ src/main/resources
│  ├─ cn.cjxy.mapper # XML 映射文件(如 EmpMapper.xml)
│  └─ mybatis-config.xml

一、POJO 參數(shù)定義

1.1 查詢參數(shù)封裝類QueryPojo.java

package cn.cjxy.pojo;

import cn.cjxy.domain.Emp;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class QueryPojo {
    private Emp emp;     // 嵌套對(duì)象(用于模糊查詢名稱)
    private Double start; // 薪資范圍下限
    private Double end;   // 薪資范圍上限
}
  • Lombok 注解作用
    • @Data:自動(dòng)生成 getter/setter
    • @NoArgsConstructor:無參構(gòu)造器
    • @AllArgsConstructor:全參構(gòu)造器

二、Mapper 接口與 XML 映射配置

2.1 Mapper 接口方法EmpMapper.java

List<Emp> findByPojo(QueryPojo pojo); // 接收 POJO 參數(shù)

2.2 XML 動(dòng)態(tài)查詢配置EmpMapper.xml

<select id="findByPojo" resultType="cn.cjxy.domain.Emp">
    SELECT * FROM emp 
    WHERE 
        salary >= #{start} 
        AND salary <= #{end} 
        AND name LIKE #{emp.name} <!-- 訪問嵌套對(duì)象屬性 -->
</select>
  • 關(guān)鍵點(diǎn)
    • #{start}#{end} 直接訪問 QueryPojo 的成員變量
    • #{emp.name} 通過嵌套對(duì)象訪問 Empname 屬性

三、測(cè)試類實(shí)現(xiàn)

3.1 測(cè)試代碼Test01.java

@Test
public void testFindByPojo() throws IOException {
    // 1. 創(chuàng)建 Emp 對(duì)象并設(shè)置模糊查詢條件
    Emp emp = new Emp();
    emp.setName("%小%");  // 包含"小"的任意位置

    // 2. 封裝查詢參數(shù)到 POJO
    QueryPojo pojo = new QueryPojo();
    pojo.setEmp(emp);
    pojo.setStart(6000.00);  // 薪資范圍:6000~8000
    pojo.setEnd(8000.00);

    // 3. 執(zhí)行查詢
    List<Emp> empList = mapper.findByPojo(pojo);

    // 4. 輸出結(jié)果
    empList.forEach(System.out::println);
}

3.2 執(zhí)行流程

  1. 參數(shù)構(gòu)建
    • 創(chuàng)建 Emp 對(duì)象,設(shè)置 name 為模糊查詢條件 %小%
    • Emp 對(duì)象及薪資范圍封裝到 QueryPojo
  2. SQL 動(dòng)態(tài)生成
    • MyBatis 解析 #{emp.name} → 獲取 emp.getName()
    • 最終生成 SQL:
SELECT * FROM emp 
WHERE 
    salary >= 6000.00 
    AND salary <= 8000.00 
    AND name LIKE '%小%'

四、核心優(yōu)勢(shì)與注意事項(xiàng)

4.1優(yōu)勢(shì)

  1. 參數(shù)集中管理
    • 將散落的參數(shù)封裝為對(duì)象,提高代碼可讀性
  2. 支持復(fù)雜查詢
    • 可嵌套對(duì)象、集合等復(fù)雜結(jié)構(gòu)
  3. 動(dòng)態(tài) SQL 友好
    • 結(jié)合 <if> 標(biāo)簽實(shí)現(xiàn)條件過濾:
<if test="start != null">
    AND salary >= #{start}
</if>

4.2注意事項(xiàng)

  1. 屬性訪問規(guī)則
    • MyBatis 通過 getter 方法訪問屬性,需確保 QueryPojoEmp 類有對(duì)應(yīng)的 getter(或使用 Lombok)
  2. 模糊查詢語法
    • 通配符 % 應(yīng)在 Java 代碼中設(shè)置(如 %小%),而非 XML 中拼接,避免 SQL 注入風(fēng)險(xiǎn)
  3. 空值處理
    • empnull,#{emp.name} 會(huì)拋出 NullPointerException,建議初始化對(duì)象:
public class QueryPojo {
    private Emp emp = new Emp(); // 防御性初始化
}

五、完整代碼對(duì)照

文件關(guān)鍵代碼
QueryPojo.java封裝 Emp 對(duì)象及薪資范圍
EmpMapper.javaList<Emp> findByPojo(QueryPojo pojo);
EmpMapper.xml通過 #{start}, #{end}, #{emp.name} 動(dòng)態(tài)拼接 SQL
Test01.java構(gòu)建 QueryPojo 參數(shù)并調(diào)用 Mapper 方法

六、擴(kuò)展應(yīng)用

  1. 動(dòng)態(tài)條件增強(qiáng)
    結(jié)合 <where><if> 標(biāo)簽實(shí)現(xiàn)可選條件查詢:
<select id="findByPojo" resultType="cn.cjxy.domain.Emp">
    SELECT * FROM emp 
    <where>
        <if test="start != null">AND salary >= #{start}</if>
        <if test="end != null">AND salary <= #{end}</if>
        <if test="emp.name != null">AND name LIKE #{emp.name}</if>
    </where>
</select>
  1. 分頁查詢整合
    QueryPojo 中添加 pageNumpageSize 字段,結(jié)合 PageHelper 插件實(shí)現(xiàn)分頁:
PageHelper.startPage(pojo.getPageNum(), pojo.getPageSize());
List<Emp> list = mapper.findByPojo(pojo);

到此這篇關(guān)于MyBatis使用POJO參數(shù)動(dòng)態(tài)查詢教程的文章就介紹到這了,更多相關(guān)MyBatis POJO參數(shù)動(dòng)態(tài)查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中的WeakHashMap淺析

    Java中的WeakHashMap淺析

    這篇文章主要介紹了Java中的WeakHashMap淺析,weakhashmap關(guān)鍵是:當(dāng)一個(gè)對(duì)象被GC回收時(shí),響應(yīng)的值對(duì)象的引用從map中刪除,weakhashmap能節(jié)約存儲(chǔ)空間,來實(shí)現(xiàn)緩存那些非必要的數(shù)據(jù),需要的朋友可以參考下
    2023-09-09
  • 面試題:用 Java 逆序打印鏈表

    面試題:用 Java 逆序打印鏈表

    這篇文章主要介紹了面試題:用 Java 逆序打印鏈表,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java NIO Files類讀取文件流方式小結(jié)

    Java NIO Files類讀取文件流方式小結(jié)

    本文主要介紹了Java NIO Files類讀取文件流方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java中的源文件、字節(jié)碼文件解讀

    Java中的源文件、字節(jié)碼文件解讀

    這篇文章主要介紹了Java中的源文件、字節(jié)碼文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • SpringDataJpa的@Query注解報(bào)錯(cuò)的解決

    SpringDataJpa的@Query注解報(bào)錯(cuò)的解決

    這篇文章主要介紹了SpringDataJpa的@Query注解報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • jdbc連接oracle數(shù)據(jù)庫功能示例

    jdbc連接oracle數(shù)據(jù)庫功能示例

    這篇文章主要介紹了jdbc連接oracle數(shù)據(jù)庫功能,結(jié)合實(shí)例形式詳細(xì)分析了java基于jdbc連接Oracle數(shù)據(jù)庫的具體操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-01-01
  • Spark Streaming與Flink進(jìn)行實(shí)時(shí)數(shù)據(jù)處理方案對(duì)比

    Spark Streaming與Flink進(jìn)行實(shí)時(shí)數(shù)據(jù)處理方案對(duì)比

    面對(duì)海量流式數(shù)據(jù),Spark Streaming 和 Flink 成為兩大主流開源引擎,本文將基于生產(chǎn)環(huán)境需求,從整體架構(gòu),編程模型等維度進(jìn)行深入對(duì)比
    2025-06-06
  • 使用mybatis攔截器處理敏感字段

    使用mybatis攔截器處理敏感字段

    這篇文章主要介紹了mybatis攔截器處理敏感字段方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java實(shí)現(xiàn)微信支付結(jié)果通知

    java實(shí)現(xiàn)微信支付結(jié)果通知

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信支付結(jié)果通知,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 淺談JAVA如何生成UUID唯一標(biāo)識(shí)

    淺談JAVA如何生成UUID唯一標(biāo)識(shí)

    這篇文章主要介紹了淺談JAVA如何生成UUID唯一標(biāo)識(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

古浪县| 临邑县| 筠连县| 郸城县| 衡水市| 江源县| 迁西县| 白朗县| 越西县| 威信县| 南华县| 嘉荫县| 黄陵县| 广南县| 东光县| 新宾| 涿州市| 吕梁市| 垦利县| 讷河市| 且末县| 五华县| 白山市| 永定县| 吴堡县| 康乐县| 株洲市| 托里县| 固镇县| 榆中县| 洛浦县| 当涂县| 偃师市| 常宁市| 图们市| 兴安县| 德昌县| 青阳县| 茶陵县| 青龙| 江华|