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

Mybatis動(dòng)態(tài)sql中@Param使用詳解

 更新時(shí)間:2023年10月08日 08:32:25   作者:riun、  
這篇文章主要介紹了Mybatis動(dòng)態(tài)sql中@Param使用詳解,當(dāng)方法的參數(shù)為非自定義pojo類型,且使用了動(dòng)態(tài)sql,那么就需要在參數(shù)前加上@Param注解,需要的朋友可以參考下

Mybatis中的@param注解的使用場(chǎng)景

1、方法有多個(gè)參數(shù)

2、方法參數(shù)要取別名

3、XML 中的 SQL 使用了 $

4、動(dòng)態(tài)sql中參數(shù)是非自定義pojo類型

前三種,相信大家都非常熟練,這里不再多說(shuō),這里主要說(shuō)下第四種。

當(dāng)方法的參數(shù)為非自定義pojo類型,且使用了動(dòng)態(tài)sql,那么就需要在參數(shù)前加上@Param注解。

測(cè)試:(此處使用SpringBoot2.0+ 、Mybatis-Plus)

數(shù)據(jù)庫(kù)數(shù)據(jù)

在這里插入圖片描述

代碼

pojo:

/**
 * @author: HanXu
 * on 2019/12/18
 * Class description:
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Test {
    private Integer id;
    private String name;
    private Integer age;
    private Integer num;
}

mapper接口:

/**
 * @author: HanXu
 * on 2019/12/18
 * Class description:
 */
public interface TestMapper extends BaseMapper<Test> {
    Test sel(Test t);
    Test seli(Integer id);
    Test seli2(@Param("id")Integer id);
    Test sels(String s);
    Test sels2(@Param("s")String s);
}

對(duì)應(yīng)的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="hx.insist.demo.mapper.TestMapper">
    <select id="sel" parameterType="hx.insist.demo.domain.Test" resultType="hx.insist.demo.domain.Test">
        select * from test
        where 1 = 1
        <if test="id!=null">
            and id = #{id}
        </if>
        <if test="name!=null">
            and name = #{name}
        </if>
        <if test="age!=null">
            and age = #{age}
        </if>
        <if test="num!=null">
            and num = #{num}
        </if>
    </select>
    <select id="seli" parameterType="Integer" resultType="hx.insist.demo.domain.Test">
        select * from test
        where 1 = 1
        <if test="id!=null">
            and id = #{id}
        </if>
    </select>
    <select id="seli2" parameterType="Integer" resultType="hx.insist.demo.domain.Test">
        select * from test
        where 1 = 1
        <if test="id!=null">
            and id = #{id}
        </if>
    </select>
    <select id="sels" resultType="hx.insist.demo.domain.Test">
        select * from test
        where 1 = 1
        <if test="s!=null">
            and name = #{s}
        </if>
    </select>
    <select id="sels2" resultType="hx.insist.demo.domain.Test">
        select * from test
        where 1 = 1
        <if test="s!=null">
            and name = #{s}
        </if>
    </select>
</mapper>

service層:

/**
 * @author: HanXu
 * on 2019/12/18
 * Class description:
 */
@Service
public class TestService {
    @Resource
    private TestMapper testMapper;
    //測(cè)試自定義的存在setter方法的對(duì)象
    public void selTest(){
         Test t = new Test();
        t.setId(1);
        Test sel = testMapper.sel(t);
        System.out.println(sel);
    }
    //測(cè)試Integer
    public void seliTest(){
        Test seli = testMapper.seli(1);
        System.out.println(seli);
    }
    //測(cè)試String
    public void selsTst(){
        Test aaa = testMapper.sels("aaa");
        System.out.println(aaa);
    }
    //測(cè)試Integer,且寫(xiě)了@Param
    public void seliTest2(){
        Test seli = testMapper.seli2(1);
        System.out.println(seli);
    }
    //測(cè)試String,且寫(xiě)了@Param
    public void selsTest2(){
        Test test = testMapper.sels2("aaa");
        System.out.println(test);
    }
}

controller層:

@GetMapping("testT")
    public ResponseEntity test(){
        testService.selTest();
        return ResponseEntity.ok().build();
    }
    @GetMapping("testI")
    public ResponseEntity testi(){
        testService.seliTest();
        return ResponseEntity.ok().build();
    }
    @GetMapping("testS")
    public ResponseEntity tests(){
        testService.selsTst();
        return ResponseEntity.ok().build();
    }
    @GetMapping("testI2")
    public ResponseEntity testI2(){
        testService.seliTest2();
        return ResponseEntity.ok().build();
    }
    @GetMapping("testS2")
    public ResponseEntity testS2(){
        testService.selsTest2();
        return ResponseEntity.ok().build();
    }

測(cè)試結(jié)果

測(cè)試Test seli(Integer id);

在這里插入圖片描述

在這里插入圖片描述

測(cè)試Test seli2(@Param(“id”)Integer id);

在這里插入圖片描述

在這里插入圖片描述

測(cè)試Test sels(String s);

在這里插入圖片描述

在這里插入圖片描述

測(cè)試Test sels2(@Param(“s”)String s);

在這里插入圖片描述

在這里插入圖片描述

測(cè)試Test sel(Test t);

在這里插入圖片描述

在這里插入圖片描述

結(jié)論

上述5個(gè)測(cè)試用例中 分為三對(duì):

    Test sel(Test t);//5
    Test seli(Integer id);//1
    Test seli2(@Param("id")Integer id);//2
    Test sels(String s);//3
    Test sels2(@Param("s")String s);//4

1和2是一對(duì)測(cè)試,除了2比1多了一個(gè)@Param注解之外其他全部相同,測(cè)試結(jié)果表示:加了注解的能正確執(zhí)行,未加注解的不能正確執(zhí)行。

3和4是一對(duì)測(cè)試,除了4比3多了一個(gè)@Param注解之外其他全部相同,測(cè)試結(jié)果表示:加了注解的能正確執(zhí)行,未加注解的不能正確執(zhí)行。

5和1、3是一對(duì)測(cè)試,不同之處在于5中的參數(shù)是自定義pojo,里面每個(gè)屬性都有setter、getter方法,結(jié)果表示:在不加@Param注解的情況下,自定義pojo作為參數(shù)可以正常執(zhí)行,非自定義pojo(沒(méi)有參數(shù)的getter方法)作為參數(shù)不能正常執(zhí)行。

以上基于sql語(yǔ)句中使用了動(dòng)態(tài)sql(存在不確定的語(yǔ)句)

我的猜想:

這跟Mybatis內(nèi)部實(shí)現(xiàn)有關(guān)。當(dāng)你使用動(dòng)態(tài)sql時(shí),#{}去拿你的參數(shù)時(shí),默認(rèn)將參數(shù)當(dāng)成了pojo類型,去取對(duì)應(yīng)屬性的getter方法,而這時(shí)如果你的參數(shù)不是pojo類型,是一個(gè)java定義好的類型,比如參數(shù)為Integer id,String s,使用#{}得到它的值時(shí),Mybatis就會(huì)去直接取相應(yīng)的getter方法,比如反射Integer類,取getId()方法 、反射String類,取getS()方法,但是這些類中并沒(méi)有相應(yīng)的方法,那么就會(huì)報(bào)錯(cuò):

org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘id’ in ‘class java.lang.Integer’
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘s’ in ‘class java.lang.String’

到此這篇關(guān)于Mybatis動(dòng)態(tài)sql中@Param使用詳解的文章就介紹到這了,更多相關(guān)Mybatis動(dòng)態(tài)sql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 將應(yīng)用程序進(jìn)行Spring6遷移的最佳使用方式

    將應(yīng)用程序進(jìn)行Spring6遷移的最佳使用方式

    這篇文章主要介紹了將應(yīng)用程序進(jìn)行Spring6遷移的最佳方式,以及如何充分利用此升級(jí),需要的朋友可以參考下,如有錯(cuò)誤的地方還請(qǐng)指正
    2023-03-03
  • Java如何通過(guò)SSE實(shí)現(xiàn)消息推送詳解

    Java如何通過(guò)SSE實(shí)現(xiàn)消息推送詳解

    這篇文章主要介紹了Java如何通過(guò)SSE實(shí)現(xiàn)消息推送的相關(guān)資料,SSE是一種服務(wù)器向客戶端推送數(shù)據(jù)的技術(shù),基于HTTP協(xié)議,利用長(zhǎng)連接特性,它適用于單向數(shù)據(jù)流場(chǎng)景,如股票價(jià)格更新、新聞實(shí)時(shí)推送等,需要的朋友可以參考下
    2025-04-04
  • Java數(shù)組反轉(zhuǎn)方式

    Java數(shù)組反轉(zhuǎn)方式

    這篇文章主要介紹了Java數(shù)組反轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能(最新推薦)

    Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能(最新推薦)

    本文介紹了Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能的幾種方法,包括定時(shí)任務(wù)、JDK延遲隊(duì)列、Redis過(guò)期監(jiān)聽(tīng)、Redisson分布式延遲隊(duì)列、RocketMQ延遲消息和RabbitMQ死信隊(duì)列,每種方法都有其優(yōu)缺點(diǎn),可以根據(jù)具體需求選擇合適的方法,感興趣的朋友一起看看吧
    2025-02-02
  • Java使用lambda自定義Arrays.sort排序規(guī)則說(shuō)明

    Java使用lambda自定義Arrays.sort排序規(guī)則說(shuō)明

    這篇文章主要介紹了Java使用lambda自定義Arrays.sort排序規(guī)則說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 一起來(lái)學(xué)習(xí)Java的棧和隊(duì)列

    一起來(lái)學(xué)習(xí)Java的棧和隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了Java的棧和隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 詳解Java引用類型的參數(shù)也是值傳遞

    詳解Java引用類型的參數(shù)也是值傳遞

    這篇文章主要介紹了Java引用類型的參數(shù)也是值傳遞,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    使用Java快速將Web中表格轉(zhuǎn)換成Excel的方法

    在平時(shí)做系統(tǒng)項(xiàng)目時(shí),經(jīng)常會(huì)需要做導(dǎo)出功能,下面這篇文章主要給大家介紹了關(guān)于使用Java快速將Web中表格轉(zhuǎn)換成Excel的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • java web中 HttpClient模擬瀏覽器登錄后發(fā)起請(qǐng)求

    java web中 HttpClient模擬瀏覽器登錄后發(fā)起請(qǐng)求

    這篇文章主要介紹了java web中 HttpClient模擬瀏覽器登錄后發(fā)起請(qǐng)求的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 學(xué)習(xí)java編程后可以走哪些職業(yè)道路

    學(xué)習(xí)java編程后可以走哪些職業(yè)道路

    在本篇文章里給大家介紹了關(guān)于學(xué)習(xí)java后的職業(yè)道路,以及需要學(xué)習(xí)的相關(guān)知識(shí)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2022-11-11

最新評(píng)論

建湖县| 婺源县| 图木舒克市| 平顺县| 奉节县| 德庆县| 吉木乃县| 泸西县| 九江市| 岳阳县| 定州市| 新干县| 阿鲁科尔沁旗| 阳原县| 上蔡县| 沽源县| 福州市| 吉木乃县| 甘孜| 池州市| 金山区| 阜新| 华宁县| 新宾| 长沙县| 美姑县| 社旗县| 普格县| 桐庐县| 玉林市| 将乐县| 伊川县| 山西省| 临夏县| 望谟县| 都匀市| 兰考县| 佛坪县| 余姚市| 秀山| 台东市|