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

MyBatis select標(biāo)簽的使用示例

 更新時(shí)間:2023年10月07日 10:28:00   作者:小日子呀  
MyBatis中,select 標(biāo)簽是最常用也是功能最強(qiáng)大的 SQL 語(yǔ)言,用于執(zhí)行查詢操作,本文就來(lái)介紹了MyBatis select標(biāo)簽的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下

MyBatis 中,select 標(biāo)簽是最常用也是功能最強(qiáng)大的 SQL 語(yǔ)言,用于執(zhí)行查詢操作,select 示例語(yǔ)句如下。

<select id="selectAllWebsite" resultType="net.cc.po.Website" parameterType="string">
    SELECT id,NAME,url FROM website WHERE NAME LIKE CONCAT ('%',#{name},'%')
</select>

以上是一個(gè) id 為 selectAllWebsite 的映射語(yǔ)句,參數(shù)類型為 string,返回結(jié)果類型為 Website 

執(zhí)行 SQL 語(yǔ)句時(shí)可以定義參數(shù),參數(shù)可以是一個(gè)簡(jiǎn)單的參數(shù)類型,例如 int、float、String;也可以是一個(gè)復(fù)雜的參數(shù)類型,例如 JavaBean、Map 等。MyBatis 提供了強(qiáng)大的映射規(guī)則,執(zhí)行 SQL 后,MyBatis 會(huì)將結(jié)果集自動(dòng)映射到 JavaBean 中。

參數(shù)的傳遞使用#{參數(shù)名},相當(dāng)于告訴 MyBatis 生成 PreparedStatement 參數(shù)。對(duì)于 JDBC,該參數(shù)會(huì)被標(biāo)識(shí)為“?”。以上 SQL 語(yǔ)句可以使用 JDBC 實(shí)現(xiàn),實(shí)現(xiàn)代碼如下。

String sql = "SELECT id,NAME,url FROM website WHERE NAME LIKE CONCAT ('%',?,'%')";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,userName);

?select標(biāo)簽常用屬性

<select>標(biāo)簽的常用屬性

屬性名稱描 述備注
id它和 Mapper 的命名空間組合起來(lái)使用,是唯一標(biāo)識(shí)符,供 MyBatis 調(diào)用如果命名空間+id不唯一,那么 MyBatis 拋出異常
parameterType表示傳入 SQL 語(yǔ)句傳入?yún)?shù)類型的全限定名或別名。它是一個(gè)可選屬性,MyBatis 能推斷出具體傳入語(yǔ)句的參數(shù)支持基本數(shù)據(jù)類型和 JavaBean、Map 等復(fù)雜數(shù)據(jù)類型
resultTypeSQL 語(yǔ)句執(zhí)行后返回的類型(全限定名或者別名)。如果是集合類型,返回的是集合元素的類型,返回時(shí)可以使用 resultType 或 resultMap 之一-
resultMap它是映射集的引用,與 <resultMap> 元素一起使用,返回時(shí)可以使用 resultType 或 resultMap 之一是 MyBatis 最復(fù)雜的元素,可以配置映射規(guī)則、級(jí)聯(lián)、typeHandler 等
flushCache用于設(shè)置在調(diào)用 SQL 語(yǔ)句后是否要求 MyBatis 清空之前查詢的本地緩存和二級(jí)緩存默認(rèn)值為 false,如果設(shè)置為 true,則任何時(shí)候只要 SQL 語(yǔ)句被調(diào)用都將清空本地緩存和二級(jí)緩存
useCache啟動(dòng)二級(jí)緩存的開(kāi)關(guān),默認(rèn)值為 true,表示將査詢結(jié)果存入二級(jí)緩存中-
timeout用于設(shè)置超時(shí)參數(shù),單位是秒(s),超時(shí)將拋出異常-
fetchSize獲取記錄的總條數(shù)設(shè)定默認(rèn)值是數(shù)據(jù)庫(kù)廠商提供的 JDBC 驅(qū)動(dòng)所設(shè)置的條數(shù)
statementType告訴 MyBatis 使用哪個(gè) JDBC 的 Statement 工作,取值為 STATEMENT(Statement)、 PREPARED(PreparedStatement)、CALLABLE(CallableStatement)-
resultSetType這是針對(duì) JDBC 的 ResultSet 接口而言,其值可設(shè)置為 FORWARD_ONLY(只允許向前訪問(wèn))、SCROLL_SENSITIVE(雙向滾動(dòng),但不及時(shí)更新)、SCROLLJNSENSITIVE(雙向滾動(dòng),及時(shí)更新)-

傳遞多個(gè)參數(shù)

現(xiàn)在需要根據(jù) id 和 name 來(lái)模糊查詢網(wǎng)站信息,顯然這涉及到了兩個(gè)參數(shù)。給映射器傳遞多個(gè)參數(shù)分為以下三種方法。

  • 使用Map傳遞參數(shù)
  • 使用注解傳遞參數(shù)
  • 使用JavaBean傳遞參數(shù)

1. 使用Map傳遞參數(shù)

<!-- 根據(jù)name和url模糊查詢 -->
<select id="selectWebsiteByMap" resultType="net.cc.po.Website" parameterType="map">
    SELECT id,NAME,url FROM website
    WHERE name LIKE CONCAT ('%',#{name},'%')
    AND url LIKE CONCAT ('%',#{url},'%')
</select>

在 WebsiteMapper 接口中,方法如下。

public List<Website> selectWebsiteByMap(Map<String, String> params);

測(cè)試 

Map<String,String> paramsMap = new HashMap<String,String>();
paramsMap.put("name","編程");
paramsMap.put("url","cc");
websiteMapper.selectWebsiteByMap(paramsMap);

使用 Map 傳遞參數(shù)雖然簡(jiǎn)單易用,但是由于這樣設(shè)置參數(shù)需要鍵值對(duì)應(yīng),業(yè)務(wù)關(guān)聯(lián)性不強(qiáng),開(kāi)發(fā)人員需要深入到程序中看代碼,造成可讀性下降。

2. 使用注解傳遞參數(shù)

<select id="selectWebsiteByAn" resultType="net.cc.po.Website">
    SELECT id,NAME,url FROM website
    WHERE name LIKE CONCAT ('%',#{name},'%')
    AND url LIKE CONCAT ('%',#{url},'%')
</select>

 接口方法:

public List<Website> selectWebsiteByAn(@Param("name") String name, @Param("url") String url);

當(dāng)我們把參數(shù)傳遞給后臺(tái)時(shí),MyBatis 通過(guò) @Param 提供的名稱就會(huì)知道 #{name} 代表 name 參數(shù),提高了參數(shù)可讀性。但是如果這條 SQL 擁有 10 個(gè)參數(shù)的查詢,就會(huì)造成可讀性下降,增強(qiáng)了代碼復(fù)雜性。

3. 使用JavaBean傳遞參數(shù)

通過(guò) JavaBean 傳遞多個(gè)參數(shù)的方式。

<select id="selectWebsiteByAn" resultType="net.cc.po.Website">
    SELECT id,NAME,url FROM website
    WHERE name LIKE CONCAT ('%',#{name},'%')
    AND url LIKE CONCAT ('%',#{url},'%')
</select>
public List<Website> selectWebsiteByAn(Website website);

區(qū)別

以上 3 種方式的區(qū)別如下。

  • 使用 Map 傳遞參數(shù)會(huì)導(dǎo)致業(yè)務(wù)可讀性的喪失,繼而導(dǎo)致后續(xù)擴(kuò)展和維護(hù)的困難,所以在實(shí)際應(yīng)用中我們應(yīng)該果斷廢棄該方式。
  • 使用 @Param 注解傳遞參數(shù)會(huì)受到參數(shù)個(gè)數(shù)的影響。當(dāng) n≤5 時(shí),它是最佳的傳參方式,因?yàn)樗又庇^;當(dāng) n>5 時(shí),多個(gè)參數(shù)將給調(diào)用帶來(lái)困難。
  • 當(dāng)參數(shù)個(gè)數(shù)大于 5 個(gè)時(shí),建議使用 JavaBean 方式。

到此這篇關(guān)于MyBatis select標(biāo)簽的使用示例的文章就介紹到這了,更多相關(guān)MyBatis select標(biāo)簽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • springBoot?@Scheduled實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行

    springBoot?@Scheduled實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行

    這篇文章主要介紹了springBoot?@Scheduled實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)開(kāi)始執(zhí)行,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springboot 多環(huán)境配置 yml文件版的實(shí)現(xiàn)方法

    springboot 多環(huán)境配置 yml文件版的實(shí)現(xiàn)方法

    這篇文章主要介紹了springboot 多環(huán)境配置 yml文件版的實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • IDEA(2022.2)搭建Servlet基本框架超詳細(xì)步驟

    IDEA(2022.2)搭建Servlet基本框架超詳細(xì)步驟

    這篇文章主要給大家介紹了關(guān)于IDEA(2022.2)搭建Servlet基本框架超詳細(xì)步驟,Servlet容器負(fù)責(zé)Servlet和客戶的通信以及調(diào)用Servlet的方法,Servlet和客戶的通信采用"請(qǐng)求/響應(yīng)"的模式,需要的朋友可以參考下
    2023-10-10
  • Java高性能序列化工具Kryo詳情

    Java高性能序列化工具Kryo詳情

    這篇文章主要介紹了Java高性能序列化工具Kryo詳情,Kryo?是一個(gè)快速序列化/反序列化工具,依賴于字節(jié)碼生成機(jī)制,更多相關(guān)內(nèi)容感興趣的朋友可以參考一下下面文章內(nèi)容
    2022-06-06
  • Spring Boot實(shí)現(xiàn)熱部署的實(shí)例方法

    Spring Boot實(shí)現(xiàn)熱部署的實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于Spring Boot實(shí)現(xiàn)熱部署的實(shí)例方法和實(shí)例,需要的朋友們可以參考下。
    2020-02-02
  • java并發(fā)容器ConcurrentHashMap深入分析

    java并發(fā)容器ConcurrentHashMap深入分析

    這篇文章主要為大家介紹了java并發(fā)容器ConcurrentHashMap使用示例及深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • spring?MVC實(shí)現(xiàn)簡(jiǎn)單登錄功能

    spring?MVC實(shí)現(xiàn)簡(jiǎn)單登錄功能

    這篇文章主要為大家詳細(xì)介紹了spring?MVC實(shí)現(xiàn)簡(jiǎn)單登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • SpringBoot中實(shí)現(xiàn)多線程6種方式總結(jié)

    SpringBoot中實(shí)現(xiàn)多線程6種方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了在Spring Boot中實(shí)現(xiàn)多線程的6種方式,文章的示例代碼講解詳細(xì),大家可以結(jié)合不同場(chǎng)景和需求進(jìn)行靈活選擇
    2025-08-08
  • 在SpringBoot中整合數(shù)據(jù)源的示例詳解

    在SpringBoot中整合數(shù)據(jù)源的示例詳解

    這篇文章主要介紹了在SpringBoot中如何整合數(shù)據(jù)源,本文介紹了如何在SpringBoot項(xiàng)目中整合常見(jiàn)的數(shù)據(jù)源,包括JdbcTemplate、MyBatis和JPA,并探討了如何配置和使用多數(shù)據(jù)源,需要的朋友可以參考下
    2023-06-06
  • Java Lambda表達(dá)式原理及多線程實(shí)現(xiàn)

    Java Lambda表達(dá)式原理及多線程實(shí)現(xiàn)

    這篇文章主要介紹了Java Lambda表達(dá)式原理及多線程實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

霸州市| 浦江县| 莱西市| 开封市| 平湖市| 额济纳旗| 衡山县| 监利县| 北辰区| 元谋县| 牡丹江市| 吐鲁番市| 鄢陵县| 兴安盟| 龙川县| 横峰县| 腾冲县| 收藏| 乐业县| 徐州市| 老河口市| 泰顺县| 浮梁县| 郯城县| 大姚县| 达孜县| 克什克腾旗| 曲阜市| 青铜峡市| 南通市| 山东省| 临泉县| 偃师市| 平和县| 泗水县| 周宁县| 安图县| 呼伦贝尔市| 南京市| 应用必备| 湾仔区|