
文章插圖
jdbcTemplate.queryForObject方法入?yún)⒉恢С忠訫ap的形式傳遞參數(shù),需要按照sql語句中參數(shù)的順序組織入?yún)⒌腖ist 。jdbcTemplate.queryForObject方法直接不支持的in查詢 。只支持Integer.class String.class 這種單數(shù)據(jù)類型的入?yún)?。
例如:List<Long> idList = ...;String name = ...;StringBuilder idListSb = new StringBuilder();for(Long id : idList){idListSb.append(id + ",");}String sql = "select count(*) from user where id in (?) and name = ?";List<Object> objects = new ArrayList<>();objects.add(idListSb.toString().RTrim(','));object.add (name);jdbcTemplate.queryForObject(sb.toString(),objects,Long.class);而NamedParameterJdbcTemplate時,其本來就支持in查詢和Map類型的入?yún)?。
List<Long> idList = ...;String name = ...;String sql = "select * from user where id in (:ids) and name = :name";Map<String, Object> param= new HashMap<>();param.put("ids", idList);param.put("name", name);namedParameterJdbcTemplate.queryForObject(sb.toString(),param,Long.class);一、JdbcTemplateSpring對數(shù)據(jù)庫的操作在jdbc上面做了深層次的封裝,提供了一個 Jdbc Template 類,我們可以直接使用 。只需要把DataSource注冊到JdbcTemplate之中,其全限定命名為org.springframework.jdbc.core.JdbcTemplate 。要使用JdbcTemlate一般還需要事務(wù)和異常的控制 。
JdbcTemplate的幾類方法execute方法:可以用于執(zhí)行任何SQL語句,一般用于執(zhí)行DDL語句;update方法及batchUpdate方法:update方法用于執(zhí)行新增、修改、刪除等語句;batchUpdate方法用于執(zhí)行批處理相關(guān)語句;query方法及queryForXXX方法:用于執(zhí)行查詢相關(guān)語句;call方法:用于執(zhí)行存儲過程、函數(shù)相關(guān)語句 。JdbcTemplate的常用方法//update操作單個增刪改int update(String sql,Object[] args)int update(String sql,Objcet... args)//batchUpdate批量增刪改int[] batchUpdate(String[] sql)int[] batchUpdate(String sql,List<Object[]>)//單個簡單查詢T queryForObjcet(String sql,Class<T> type)T queryForObjcet(String sql,Object[] args,Class<T> type)T queryForObjcet(String sql,Class<T> type,Object... arg)//獲取多個List<T> queryForList(String sql,Class<T> type)List<T> queryForList(String sql,Object[] args,Class<T> type)List<T> queryForList(String sql,Class<T> type,Object... arg)查詢復(fù)雜對象(封裝為Map)//獲取單個Map queryForMap(String sql)Map queryForMap(String sql,Objcet[] args)Map queryForMap(String sql,Object... arg)//獲取多個List<Map<String,Object>> queryForList(String sql)List<Map<String,Object>> queryForList(String sql,Obgject[] args)List<Map<String,Object>> queryForList(String sql,Obgject... arg)查詢復(fù)雜對象(封裝為實體對象)Spring JdbcTemplate是通過實現(xiàn)org.springframework.jdbc.core.RowMapper這個接口來完成對entity對象映射 。
//獲取單個T queryForObject(String sql,RowMapper<T> mapper)T queryForObject(String sql,object[] args,RowMapper<T> mapper)T queryForObject(String sql,RowMapper<T> mapper,Object... arg)//獲取多個List<T> query(String sql,RowMapper<T> mapper)List<T> query(String sql,Object[] args,RowMapper<T> mapper)List<T> query(String sql,RowMapper<T> mapper,Object... arg)Spring JDBC中目前有兩個主要的RowMapper實現(xiàn),使用它們應(yīng)該能解決大部分的場景了:SingleColumnRowMapper和BeanPropertyRowMapper 。SingleColumnRowMapper:返回單列數(shù)據(jù)BeanPropertyRowMapper:當(dāng)查詢數(shù)據(jù)庫返回的是多列數(shù)據(jù),且需要將這些多列數(shù)據(jù)映射到某個具體的實體類上 。
//示例:String sql = "select name from test_student where id = ?";jdbcTemplate.queryForObject(sql, new Object[]{id}, new SingleColumnRowMapper<>(String.class));String sql = "select name, gender from test_student where name = ?";jdbcTemplate.queryForObject(sql, new Object[]{name},new BeanPropertyRowMapper<>(Student.class));定義自己的RowMapper如果你SQL查詢出來的數(shù)據(jù)列名就是和實體類的屬性名不一樣,或者想按照自己的規(guī)則來裝配實體類,那么就可以定義并使用自己的Row Mapper 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助:- 一升是多少斤水
- 解析復(fù)選框的checked屬性 js如何判斷checkbox是否選中
- xo怎么喝才好喝
- 2021年省錢的返利app排名 返利商品怎么入賬
- 好用的照相軟件排名 什么相機軟件好用有實惠
- 一個完整的網(wǎng)上商城的源碼 php商城系統(tǒng)技術(shù)難點
- 神話中鳥的名字除了精衛(wèi)還有哪些
- 買來的螃蟹怎么保存
- 這3種人,一定會得到佛菩薩的加持 身上有菩薩跟著的人
- 《長津湖之水門橋》每個人的結(jié)局是什么
