亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis如何通過出入Map參數(shù)作為條件進(jìn)行查詢

 更新時(shí)間:2022年06月27日 08:43:32   作者:走路的貓頭鷹  
這篇文章主要介紹了Mybatis如何通過出入Map參數(shù)作為條件進(jìn)行查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

通過出入Map參數(shù)作為條件進(jìn)行查詢

映射文件中查詢語句部分:

<!--通過map進(jìn)行條件查詢-->
<select id="selectByMap" resultType="com.heiketu.testpackage.pojo.Product">
? ? select * from Products where prod_price = #{prodPrice} and prod_desc = #{prodDesc}
</select>

接口文件中對(duì)應(yīng)的查詢方法:

//輸入?yún)?shù)為Map的條件查詢
Product selectByMap(Map<String,Object> map);

測試代碼:

//...前面有創(chuàng)建sqlSessionFactory對(duì)象和SQLSession對(duì)象的代碼
Map<String,Object> map = new HashMap<>();
map.put("prodPrice","11.99");
map.put("prodDesc","18 inch teddy bear, comes with cap and jacket");
ProductsMapper mapper = sqlSession.getMapper(ProductsMapper.class);
Product product = mapper.selectByMap(map);
System.out.println(product);

map中的key值與映射文件中的select語句#{}占位符中的值需要一一對(duì)應(yīng)

在mybatis中,任何傳入的參數(shù)都會(huì)被對(duì)應(yīng)封裝成Map集合,然后會(huì)以map的key=value形式取值。

對(duì)傳入的參數(shù)是List集合,mybatis會(huì)對(duì)list集合進(jìn)行特殊處理,其取值方式通過list[下標(biāo)]或collection[下標(biāo)]的方式入?yún)⑷≈怠?/p>

對(duì)于數(shù)組,Mybatis同樣會(huì)做特殊處理,它會(huì)對(duì)數(shù)組采用array[下標(biāo)]的方式入?yún)⑷≈怠?/p>

<!--如果是List集合(或set集合)就如下入?yún)⑷≈?->
<select id="selectByMap" resultType="com.heiketu.testpackage.pojo.Product">
? ? select * from Products where prod_price = #{list[0]} and prod_desc = #{collection[1]}
</select>
<!--如果是數(shù)組就如下入?yún)⑷≈?->
<select id="selectByMap" resultType="com.heiketu.testpackage.pojo.Product">
? ? select * from Products where prod_price = #{array[0]} and prod_desc = #{array[1]}
</select>

Mybatis查詢傳遞Map參數(shù)

使用場景

mybaits傳遞Map查詢數(shù)據(jù),choose里面的判斷根據(jù)自己的map參數(shù)類型自行使用,這里傳的value是Object類型,這里用不到

<select id="getObjectByMap" parameterType="map" resultMap="BaseResultMap">
        select
            <include refid="Base_Column_List" />
        from
            s_app
        <where>
            <foreach collection="map" item="v" index="k" separator="and">
                <if test="v != null and v != ''">
                    ${k} = #{v}
                </if>
                <!--<choose>
                    <when test="v instanceof integer">
                        <if test="v != null">
                            ${k} = #{v}
                        </if>
                    </when>
                    <when test="v instanceof list">
                        <if test="v != null and v.size() > 0">
                            ${k} in
                            <foreach collection="list" item="v" separator="," open="(" close=")">
                                #{v}
                            </foreach>
                        </if>
                    </when>
                    <when test="v instanceof array">
                        <if test="v != null and v.length > 0">
                            ${k} in
                            <foreach collection="array" item="v" separator="," open="(" close=")">
                                #{v}
                            </foreach>
                        </if>
                    </when>
                    <otherwise>
                        <if test="v != null and v != ''">
                            ${k} = #{v}
                        </if>
                    </otherwise>
                </choose>-->
            </foreach>
        </where>
    </select>

這里需要注意的一點(diǎn)是${K},首先map的key一定要跟數(shù)據(jù)表字段保持一致。如果這里的${K}寫成了#{K}則生成的sql語句如下所示:

程序不會(huì)報(bào)錯(cuò),條件無效。${}和#{}的區(qū)別相信大家都了解,簡單概括就是一個(gè)是替換占位符,一個(gè)是當(dāng)做參數(shù)傳入

傳參

    @PostMapping({"demo"})
    public AjaxResult demo(String appNo, String name) {
        Map map = Map.of("app_no", appNo, "cust_name", name);
        SApp objectByMap = service.getObjectByMap(map);
        return success(objectByMap);
    }

持久層

public interface SAppMapper extends BaseMapper<SApp> {
    SApp getObjectByMap(@Param("map") Map<String, Object> map);
}

生成sql

查詢結(jié)果

總結(jié):這樣的好處是參數(shù)的個(gè)數(shù)不固定、參數(shù)的類型不固定,適用的場景較多。缺點(diǎn)也很明顯map傳參可讀性差,參數(shù)難以控制等。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA連接MySQL提示serverTimezone的問題及解決方法

    IDEA連接MySQL提示serverTimezone的問題及解決方法

    很多朋友私聊小編,使用IDEA軟件連接MySQL數(shù)據(jù)庫時(shí)總是提示Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.的錯(cuò)誤,小編就不一一回復(fù)大家了,下面小編把我的解決方法分享到腳本之家平臺(tái),需要的朋友參考下吧
    2021-05-05
  • java在linux系統(tǒng)下開機(jī)啟動(dòng)無法使用sudo命令的原因及解決辦法

    java在linux系統(tǒng)下開機(jī)啟動(dòng)無法使用sudo命令的原因及解決辦法

    每次開機(jī)自動(dòng)啟動(dòng)的java進(jìn)程,頁面上的關(guān)機(jī)按鈕都無法實(shí)現(xiàn)關(guān)機(jī)功能,但是此時(shí)如果以chb賬號(hào)通過ssh登錄該服務(wù)器,手動(dòng)殺掉tomcat進(jìn)程,然后再重新啟動(dòng)tomcat,頁面上的關(guān)機(jī)按鈕就有效了
    2013-08-08
  • Mybatis深度整合Mysql的Json字段問題

    Mybatis深度整合Mysql的Json字段問題

    這篇文章主要介紹了Mybatis深度整合Mysql的Json字段問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • java獲取http請(qǐng)求的Header和Body的簡單方法

    java獲取http請(qǐng)求的Header和Body的簡單方法

    下面小編就為大家?guī)硪黄猨ava獲取http請(qǐng)求的Header和Body的簡單方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • springboot如何讀取sftp的文件

    springboot如何讀取sftp的文件

    這篇文章主要介紹了springboot如何讀取sftp的文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springboot Retry組件@Recover失效問題解決方法

    Springboot Retry組件@Recover失效問題解決方法

    在使用springboot的retry模塊時(shí),你是否出現(xiàn)過@Recover注解失效的問題呢?不用擔(dān)心,這篇文章就來告訴你解決@Recover失效的辦法,需要的小伙伴可以參考一下
    2021-11-11
  • 看完這篇文章獲得一些java if優(yōu)化技巧

    看完這篇文章獲得一些java if優(yōu)化技巧

    if 是每個(gè)語言都有的語法,也是最基礎(chǔ)的語法。因?yàn)榇a本來就很晦澀,所以才有了程序員這個(gè)中間件,今天就聊一下我的一些關(guān)于 if 思路和總結(jié)
    2021-07-07
  • Java實(shí)現(xiàn)利用廣度優(yōu)先遍歷(BFS)計(jì)算最短路徑的方法

    Java實(shí)現(xiàn)利用廣度優(yōu)先遍歷(BFS)計(jì)算最短路徑的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)利用廣度優(yōu)先遍歷(BFS)計(jì)算最短路徑的方法,實(shí)例分析了廣度優(yōu)先遍歷算法的原理與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • slf4j使用log4j的配置參數(shù)方式

    slf4j使用log4j的配置參數(shù)方式

    這篇文章主要介紹了slf4j使用log4j的配置參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring 面向切面編程AOP實(shí)現(xiàn)詳解

    Spring 面向切面編程AOP實(shí)現(xiàn)詳解

    這篇文章主要介紹了Spring 面向切面編程AOP實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論