Java使用Spring JdbcTemplate向in語句中傳遞參數(shù)的教程詳解
一、Jdbctemplate方式
傳統(tǒng)的Jdbctemplate類無法直接向in語句傳遞參數(shù),需要通過字符串拼接的方式來實現(xiàn)。例如:
1.常見的通過占位符查詢結(jié)果方式(無法適用in語句)
//查詢id等于123的用戶信息 String sql = "select * from user where id = ?"; Map<String, Object> args = new HashMap<>(); args.put("id", 123); jdbcTemplate.queryForList(sql, args , User.class )
2.如果使用上述方式向in語句中傳遞參數(shù)
//查詢id為1,2,3的用戶信息 String sql = "select * from user where id in (?)"; Map<String, Object> args = new HashMap<>(); int[] ids = {1,2,3} args.put("id", ids); jdbcTemplate.queryForList(sql, args , User.class );
這里查詢語句被替換后如下,執(zhí)行時會報錯
//不符合sql語句規(guī)范 select * from user where id in ([1,2,3])
3.解決方案:使用字符串拼接
String ids = "1,2,3"; String sql = "select * from user where id in (" + ids +")";
如果入?yún)⑹亲址脙蓚€單引號' 內(nèi)容'引起來,這樣就滿足SQL的語法,例如:
String ids = "'1','2','3'"; String sql = "select * from user where id in (" + ids +")";
二、NamedParameterJdbcTemplate方式
Jdbctemplate是比較底層的類,因此功能比較有局限性。NamedParameterJdbcTemplate是對Jdbctemplate的再次封裝,它可以使用具名參數(shù)來綁定Sql參數(shù)。一系列具名參數(shù)組成一個map傳入,這樣傳參的順序就沒有限制了。
使用NamedParameterJdbcTemplate實現(xiàn)in語句的傳參非常簡單,如下:
String sql = "select * from user where name in (:names)"; String[] arr = {"張三","李四","王五"}; ArrayList<String> names = new ArrayList<String>(Arrays.asList(arr)); Map<String, Obeject> args = new HashMap<String,Object>(); args.put("names", names); NamedParameterJdbcTemplate jdbcTmeplate = new NameParameterJdbcTemplate(jdbctemplate); jdbcTemplate.queryForList(sql,args);
三、總結(jié)
使用Jdbctemplate傳遞給in語句參數(shù)時,如果參數(shù)是固定的,那么拼接成字符串很簡單。但是如果參數(shù)不固定,是通過數(shù)組或列表給出的。那么在進行字符串拼接時,就會比較復(fù)雜麻煩,需要將數(shù)組的值轉(zhuǎn)換成字符串,每個元素用逗號分隔并用單引號括起來。綜合比較,給in語句傳遞參數(shù)推薦使用NamedParameterJdbcTemplate類來實現(xiàn)。
到此這篇關(guān)于Java使用Spring JdbcTemplate向in語句中傳遞參數(shù)的教程詳解的文章就介紹到這了,更多相關(guān)Java Spring JdbcTemplate傳遞參數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java編程實現(xiàn)生成給定范圍內(nèi)不重復(fù)隨機數(shù)的方法小結(jié)
這篇文章主要介紹了Java編程實現(xiàn)生成給定范圍內(nèi)不重復(fù)隨機數(shù)的方法,結(jié)合實例形式總結(jié)分析了java基于數(shù)學(xué)運算與判斷實現(xiàn)不重復(fù)隨機數(shù)的生成功能,需要的朋友可以參考下2017-07-07idea SpringBoot+Gradle環(huán)境配置到項目打包
Gradle是一個基于Java應(yīng)用的項目自動化構(gòu)建工具,本文介紹了在IDEA中創(chuàng)建Spring Boot Gradle項目,項目配置包括init.gradle和settings.gradle,感興趣的可以了解一下2024-11-11Java并發(fā)系列之AbstractQueuedSynchronizer源碼分析(共享模式)
這篇文章主要為大家詳細介紹了Java并發(fā)系列之AbstractQueuedSynchronizer源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-02-02java判斷String類型是否能轉(zhuǎn)換為int的方法
今天小編就為大家分享一篇java判斷String類型是否能轉(zhuǎn)換為int的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07Java集合排序規(guī)則接口Comparator用法解析
這篇文章主要介紹了Java集合排序規(guī)則接口Comparator用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09java?數(shù)組實現(xiàn)學(xué)生成績統(tǒng)計教程
這篇文章主要介紹了java?數(shù)組實現(xiàn)學(xué)生成績統(tǒng)計教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12Java字節(jié)流與基本數(shù)據(jù)類型的轉(zhuǎn)換實例
本篇文章主要介紹了Java字節(jié)流與基本數(shù)據(jù)類型的轉(zhuǎn)換實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06