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

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

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

一、問題原因

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

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

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

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

三、修改建議

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

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

四、總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

    java中Map、Set、List的簡單使用教程(快速入門)

    這篇文章主要給大家介紹了關(guān)于java中Map、Set、List簡單使用教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • FF瀏覽器和IE下載文件亂碼問題的解決方法

    FF瀏覽器和IE下載文件亂碼問題的解決方法

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

    Java中的Lock與ReentrantLock深入解析

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

    logback 自定義Pattern模板教程

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

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

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

    java鏈表的常見簡單面試算法題詳解

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

    MyBatis流式查詢兩種實現(xiàn)方式

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

最新評論

墨竹工卡县| 鹤岗市| 鄱阳县| 凤凰县| 沁阳市| 包头市| 新乡市| 余干县| 榆树市| 平陆县| 谷城县| 青阳县| 招远市| 淮滨县| 虎林市| 南安市| 潼南县| 长汀县| 太原市| 黄浦区| 昌乐县| 页游| 徐闻县| 定边县| 嘉兴市| 吉隆县| 富锦市| 安平县| 永嘉县| 隆回县| 张掖市| 思茅市| 左贡县| 宜兰县| 华容县| 屯门区| 尉氏县| 蒙阴县| 德令哈市| 古蔺县| 天气|