具名參數(shù):SQL 按名稱(以冒號(hào)開(kāi)頭)而不是按位置進(jìn)行指定,具名參數(shù)更易于維護(hù),,也提升了可讀性 。具名參數(shù)由框架類在運(yùn)行時(shí)用占位符取代,具名參數(shù)只在NamedParameterJdbcTemplate 中得到支持 。
NamedParameterJdbcTemplate類拓展了JdbcTemplate類,可以使用全部jdbcTemplate方法 。
NamedParameterJdbcTemplate主要提供以下三類方法:execute方法、query及queryForXXX方法、update及batchUpdate方法 。
NamedParameterJdbcTemplate可以使用DataSource或JdbcTemplate 對(duì)象作為構(gòu)造器參數(shù)初始化 。
常用API傳入?yún)?shù)類型介紹NamedParameterJdbcTemplate類為命名參數(shù)設(shè)值有兩種方式:java.util.Map 、RowMapper 和 SqlParameterSource 。
Map<String,?> paramMap就是一個(gè)hash表,好處是可以根據(jù)參數(shù)名傳參,paramMap.put(“sqlparamName”,value) 。
RowMapper rowMapper這個(gè)接口為了實(shí)現(xiàn)sql查詢結(jié)果和對(duì)象間的轉(zhuǎn)換,可以自己實(shí)現(xiàn),也可以使用系統(tǒng)實(shí)現(xiàn),主要實(shí)現(xiàn)類有:
SingleColumnRowMapper ,sql結(jié)果為一個(gè)單列的數(shù)據(jù),如List<String> , List<Integer>,String,Integer等BeanPropertyRowMapper, sql結(jié)果匹配到對(duì)象 List< XxxVO> , XxxVOSqlParameterSource其作用和Map一樣,就是為sql中的條件參數(shù)賦值,默認(rèn)實(shí)現(xiàn)有 :
MapSqlParameterSource實(shí)現(xiàn)非常簡(jiǎn)單,只是封裝了java.util.Map 。BeanPropertySqlParameterSource封裝了一個(gè)JavaBean對(duì)象,通過(guò)JavaBean對(duì)象屬性來(lái)決定命名參數(shù)的值 。EmptySqlParameterSource 一個(gè)空的SqlParameterSource ,常用來(lái)占位使用 。//BeanPropertySqlParameterSource傳參方式SqlParameterSource sps = new BeanPropertySqlParameterSource(javaBean);//MapSqlParameterSource傳參方式SqlParameterSource sps = new MapSqlParameterSource();//保證參數(shù)名和key相同sps.addValue("key",value);API介紹查詢返回單行單列數(shù)據(jù)
public < T > T queryForObject(String sql, Map<String, ?> paramMap, Class<T> requiredType)public < T > T queryForObject(String sql, SqlParameterSource paramSource, Class<T> requiredType)
Integer count = template.queryForObject("select count(*) from student", new HashMap<>(), Integer.class);String name = template.queryForObject( "select name from student where home_addresslimit 1 ", EmptySqlParameterSource.INSTANCE, String.class); 返回 (多行)單列 數(shù)據(jù)
public < T> List< T> queryForList(String sql, Map<String, ?> paramMap, Class< T > elementType)public < T> List< T> queryForList(String sql, SqlParameterSource paramSource, Class< T> elementType)
List< String> namelist = template.queryForList("select name from student", new HashMap<>(), String.class);返回單行數(shù)據(jù)
public < T> T queryForObject(String sql, Map< String, ?> paramMap, RowMapper< T>rowMapper)public < T> T queryForObject(String sql, SqlParameterSource paramSource, RowMapper< T> rowMapper)
Studentstu = template.queryForObject("select * from student limit 1", new HashMap<>(), new BeanPropertyRowMapper<Student>(Student.class));//BeanPropertyRowMapper會(huì)把下劃線轉(zhuǎn)化為駝峰屬性//結(jié)果對(duì)象可比實(shí)際返回字段多或者少注意:這兩個(gè)API也可以使用SingleColumnRowMapper返回單行單列數(shù)據(jù)
String name = template.queryForObject("select name from student limit 1", EmptySqlParameterSource.INSTANCE, new SingleColumnRowMapper<>(String.class));返回Map形式的單行數(shù)據(jù)
public Map< String, Object> queryForMap(String sql, Map< String, ?> paramMap)public Map< String, Object> queryForMap(String sql, SqlParameterSource paramSource)
Map< String, Object> studentMap = template.queryForMap("select * from student limit 1", new HashMap<>());注意:queryForMap這個(gè)方法要求結(jié)果必須是有數(shù)據(jù)的,否則會(huì)報(bào)錯(cuò) 。
返回多行數(shù)據(jù)
public < T> List< T> query(String sql, Map< String, ?> paramMap, RowMapper< T> rowMapper)public < T> List< T> query(String sql, SqlParameterSource paramSource, RowMapper< T> rowMapper)public < T> List< T> query(String sql, RowMapper< T> rowMapper)
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛(ài)刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 一升是多少斤水
- 解析復(fù)選框的checked屬性 js如何判斷checkbox是否選中
- xo怎么喝才好喝
- 2021年省錢(qián)的返利app排名 返利商品怎么入賬
- 好用的照相軟件排名 什么相機(jī)軟件好用有實(shí)惠
- 一個(gè)完整的網(wǎng)上商城的源碼 php商城系統(tǒng)技術(shù)難點(diǎn)
- 神話中鳥(niǎo)的名字除了精衛(wèi)還有哪些
- 買(mǎi)來(lái)的螃蟹怎么保存
- 這3種人,一定會(huì)得到佛菩薩的加持 身上有菩薩跟著的人
- 《長(zhǎng)津湖之水門(mén)橋》每個(gè)人的結(jié)局是什么
