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

jdbcTemplate.query和queryForObject方法的使用及區(qū)別

 更新時(shí)間:2025年12月30日 10:49:46   作者:碼農(nóng)辰南  
這篇文章主要分析了Spring框架中JdbcTemplate的query()和queryForObject()方法的區(qū)別,并提出了一些建議來(lái)避免在查詢(xún)時(shí)出現(xiàn)權(quán)限不足的問(wèn)題

一、問(wèn)題原因

上周再項(xiàng)目上遇到一個(gè)信息集權(quán)限不足時(shí),輸出word功能中報(bào)錯(cuò),查看代碼發(fā)現(xiàn)該塊查詢(xún)邏輯直接使用了jdbcTemplate.queryForObject,根本沒(méi)考慮信息集權(quán)限不足的情況,會(huì)出現(xiàn)查詢(xún)不到數(shù)據(jù)導(dǎo)致報(bào)錯(cuò)的問(wèn)題,下面就針對(duì)query() 和 queryForObject()做一下分析。

二、query() 和 queryForObject() 區(qū)別

JdbcTemplate 的 query() 和 queryForObject() 是 Spring 中操作數(shù)據(jù)庫(kù)最常用的兩個(gè)查詢(xún)方法,核心區(qū)別在于返回結(jié)果形態(tài)、空結(jié)果處理、適用場(chǎng)景,以下是詳細(xì)對(duì)比:

特性jdbcTemplate.query()jdbcTemplate.queryForObject()
返回值類(lèi)型List(多條結(jié)果,無(wú)結(jié)果則返回空 List)T(單條結(jié)果,必須返回且僅返回 1 條)
空結(jié)果處理無(wú)匹配數(shù)據(jù)時(shí)返回空 List([]),不拋異常無(wú)匹配數(shù)據(jù)時(shí)拋 EmptyResultDataAccessException
多結(jié)果處理支持 0 條、1 條、多條結(jié)果僅支持恰好 1 條結(jié)果,多條則拋 IncorrectResultSizeDataAccessException
核心參數(shù)需指定 RowMapper/ResultSetExtractor 映射結(jié)果需指定 RowMapper/ 返回類(lèi)型(如 Integer.class)
適用場(chǎng)景批量查詢(xún)(列表查詢(xún))、允許無(wú)結(jié)果的單條查詢(xún)明確僅需 1 條結(jié)果的場(chǎng)景(如根據(jù)唯一 ID 查單條數(shù)據(jù))

三、修改建議

1、使用JdbcTemplate.query()替換 JdbcTemplate.queryForObject()

BeanPropertyRowMapper<Person> rowMapper = new BeanPropertyRowMapper<>(Person.class);
String sql = "select * from person where personId = '12'";
//下面這段代碼有問(wèn)題,當(dāng)personId中12不存在,則會(huì)報(bào)異常EmptyResultDataAccessException
//Person person = jdbcTemplate.queryForObject(sql, rowMapper);
//使用query替換queryForObject
List<Person> query = jdbcTemplate.query(sql, rowMapper);
if(query != null){
   Person person = query.get(0);
}

2、使用mybatis替換 JdbcTemplate.queryForObject()

//BeanPropertyRowMapper<Person> rowMapper = new BeanPropertyRowMapper<>(Person.class);
String sql = "select * from person where personId = '12'";
//下面這段代碼有問(wèn)題,當(dāng)personId中12不存在,則會(huì)報(bào)異常EmptyResultDataAccessException
//Person person = jdbcTemplate.queryForObject(sql, rowMapper);
//使用mybatis替換queryForObject,mybatis查詢(xún)不到數(shù)據(jù)會(huì)返回null
Person person = rmbReportMapper.queryPersonBySql(sql);

四、總結(jié)

  • query() 是 “通用查詢(xún)”,靈活處理任意條數(shù)結(jié)果,無(wú)異常風(fēng)險(xiǎn);
  • queryForObject() 是 “單結(jié)果查詢(xún)”,強(qiáng)約束結(jié)果數(shù)量,適合明確僅需 1 條的場(chǎng)景;
  • 日常開(kāi)發(fā)中,除非確認(rèn)數(shù)據(jù)必存在,否則優(yōu)先用 query()處理單條查詢(xún),避免空結(jié)果異常。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • springboot攔截器過(guò)濾token,并返回結(jié)果及異常處理操作

    springboot攔截器過(guò)濾token,并返回結(jié)果及異常處理操作

    這篇文章主要介紹了springboot攔截器過(guò)濾token,并返回結(jié)果及異常處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • SpringBoot實(shí)現(xiàn)JWT認(rèn)證的完整方案

    SpringBoot實(shí)現(xiàn)JWT認(rèn)證的完整方案

    JWT(JSON?Web?Token)是一種用于在網(wǎng)絡(luò)應(yīng)用間安全傳遞信息的開(kāi)放標(biāo)準(zhǔn),特別適合分布式系統(tǒng)的身份驗(yàn)證,下面我將詳細(xì)介紹如何在SpringBoot項(xiàng)目中實(shí)現(xiàn)JWT認(rèn)證的完整方案,需要的朋友可以參考下
    2025-10-10
  • java中Map、Set、List的簡(jiǎn)單使用教程(快速入門(mén))

    java中Map、Set、List的簡(jiǎn)單使用教程(快速入門(mén))

    這篇文章主要給大家介紹了關(guān)于java中Map、Set、List簡(jiǎn)單使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java.lang.String和java.util.NClob互相轉(zhuǎn)換方式

    java.lang.String和java.util.NClob互相轉(zhuǎn)換方式

    這篇文章主要介紹了java.lang.String和java.util.NClob互相轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • FF瀏覽器和IE下載文件亂碼問(wèn)題的解決方法

    FF瀏覽器和IE下載文件亂碼問(wèn)題的解決方法

    大家可以看到如下截圖,下載文件出現(xiàn)了亂碼,在其他瀏覽器(IE,Chrome....)上沒(méi)有出現(xiàn)這個(gè)問(wèn)題,解決方法很簡(jiǎn)單,遇到類(lèi)似問(wèn)題的朋友可以了解下哦
    2013-08-08
  • Java中的Lock與ReentrantLock深入解析

    Java中的Lock與ReentrantLock深入解析

    這篇文章主要介紹了Java中的Lock與ReentrantLock深入解析,Lock位于java.util.concurrent.locks包下,是一種線(xiàn)程同步機(jī)制,就像synchronized塊一樣,但是,Lock比synchronized塊更靈活、更復(fù)雜,需要的朋友可以參考下
    2024-01-01
  • logback 自定義Pattern模板教程

    logback 自定義Pattern模板教程

    這篇文章主要介紹了logback 自定義Pattern模板教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java匯編源碼如何查看環(huán)境搭建

    Java匯編源碼如何查看環(huán)境搭建

    這篇文章主要介紹了如何在IntelliJ IDEA開(kāi)發(fā)環(huán)境中搭建字節(jié)碼和匯編環(huán)境,以便更好地進(jìn)行代碼調(diào)優(yōu)和JVM學(xué)習(xí),首先,介紹了如何配置IntelliJ IDEA以方便查看Java字節(jié)碼文件,接著,詳細(xì)說(shuō)明了如何下載和配置HSDIS插件,以便在IDEA中查看Java方法的匯編代碼
    2025-01-01
  • java鏈表的常見(jiàn)簡(jiǎn)單面試算法題詳解

    java鏈表的常見(jiàn)簡(jiǎn)單面試算法題詳解

    文章總結(jié):本文主要介紹了單鏈表的基本操作,包括頭插法、尾插法、鏈表翻轉(zhuǎn)、鏈表成環(huán)判斷、成環(huán)位置判斷、成環(huán)長(zhǎng)度判斷,以及有序鏈表的合并,通過(guò)實(shí)例和代碼示例,詳細(xì)講解了每種操作的原理和實(shí)現(xiàn)方法
    2025-01-01
  • MyBatis流式查詢(xún)兩種實(shí)現(xiàn)方式

    MyBatis流式查詢(xún)兩種實(shí)現(xiàn)方式

    本文詳解MyBatis流式查詢(xún),通過(guò)ResultHandler和Cursor實(shí)現(xiàn)邊讀邊處理,避免內(nèi)存溢出,ResultHandler逐條回調(diào),Cursor支持迭代,需注意事務(wù)控制及游標(biāo)關(guān)閉問(wèn)題,適合不同場(chǎng)景靈活使用,感興趣的朋友跟隨小編一起看看吧
    2025-08-08

最新評(píng)論

体育| 施甸县| 南昌县| 大同县| 博兴县| 梅州市| 西盟| 建平县| 朔州市| 秀山| 寻甸| 屏山县| 衡阳县| 分宜县| 开封市| 天台县| 古田县| 宝鸡市| 深水埗区| 仪征市| 和田市| 岳阳市| 乳源| 乌拉特前旗| 台山市| 太谷县| 呼玛县| 绿春县| 滕州市| 侯马市| 建湖县| 高州市| 甘洛县| 平罗县| 和平区| 德清县| 吉安市| 江陵县| 三原县| 攀枝花市| 当涂县|