摘要:插入一條數(shù)據(jù)并返回自增主鍵我們可以通過自動綁定參數(shù)只需要屬性名稱為命名參數(shù)相同即可,同時我們也可以使用綁定參數(shù)。
為什么要使用 NamedParameterJdbcTemplate
簡單
NamedParameterJdbcTemplate 支持命名參數(shù),這是原生jdbc的一大缺點,因為jdbc是采用索引的方式設(shè)置參數(shù),在數(shù)據(jù)庫或者sql發(fā)現(xiàn)變化時我們需要修改代碼,并且這種維護成本很高,同時也很容易出錯,那命名參數(shù)可以很好的解決這個問題。
NamedParameterJdbcTemplate 支持對象自動映射,如下一段代碼NamedParameterJdbcTemplate 會自動將返回結(jié)果映射為Person對象
Person p = new Person(); p.setName("kevin"); p.setAddress("Shanghai"); p.setCountry("China"); namedTemplate.update("insert into t_person(name, address, country) values(:name,:address,:country)", new BeanPropertySqlParameterSource(p))
快速,NamedParameterJdbcTemplate只是實現(xiàn)了命名參數(shù)及數(shù)據(jù)封裝,沒有其它任何額外的開銷,在運行效率上無限接近原生jdbc
接下來我們看一下使用NamedParameterJdbcTemplate如何工作,還有相同場景下MyBatis的代碼。
插入一條數(shù)據(jù)并返回自增主鍵 NamedParameterJdbcTemplateString sql = "INSERT INTO `t_person` (firstName, lastName, age, gender, height, weight, address, hobby, createdTime)" + " VALUES (:firstName, :lastName, :age, :gender, :height, :weight, :address, :hobby, :createdTime)"; KeyHolder key = new GeneratedKeyHolder(); jdbcOperations.update(sql, new BeanPropertySqlParameterSource(p), key); p.setId(key.getKey().longValue());
我們可以通過BeanPropertySqlParameterSource自動綁定SQL參數(shù)只需要屬性名稱為命名參數(shù)相同即可,同時我們也可以使用MapSqlParameterSource/Map綁定SQL參數(shù)。
MyBatis通過主鍵查詢對象(自動映射) NamedParameterJdbcTemplateINSERT INTO `t_person` (firstName, lastName, age, gender, height, weight, address, hobby, createdTime) VALUES (#{firstName}, #{lastName}, #{age}, #{gender}, #{height}, #{weight}, #{address}, #{hobby}, #{createdTime})
String sql = "select * from t_person where id=:id"; jdbcOperations.queryForObject(sql, new MapSqlParameterSource("id", id), new BeanPropertyRowMapper<>(Person.class));
我們可以通過BeanPropertyRowMapper將返回結(jié)果自動映射為對象類型,和mybatis一樣只需要返回的列名與屬性名稱相同即可
MyBatis 通過主鍵查詢對象(手動映射) NamedParameterJdbcTemplateString sql = "select * from t_person where id=:id"; jdbcOperations.queryForObject(sql, new MapSqlParameterSource("id", selectId()), (rs, rowNum) -> { Person p = new Person(); p.setId(rs.getLong("id")); p.setFirstName(rs.getString("firstName")); p.setLastName(rs.getString("lastName")); p.setAge(rs.getInt("age")); p.setGender(rs.getInt("gender")); p.setHeight(rs.getInt("height")); p.setWeight(rs.getInt("weight")); p.setAddress(rs.getString("address")); p.setHobby(rs.getString("hobby")); p.setCreatedTime(rs.getLong("createdTime")); return p; });MyBatis
查詢多個對象 NamedParameterJdbcTemplate
String sql = "select * from t_person"; jdbcOperations.query(sql, EmptySqlParameterSource.INSTANCE, new BeanPropertyRowMapper<>(Person.class));MyBatis
通過上面的代碼我們可以發(fā)現(xiàn)使用NamedParameterJdbcTemplate操作數(shù)據(jù)庫非常的容易,不會給開發(fā)帶來額外的負擔(dān),代碼非常的簡潔,同時程序的運行效率也非常的高。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/66914.html
摘要:批量操作數(shù)據(jù)批量操作數(shù)據(jù)一共有兩種方法批量添加方法一男男方法二男男批量修改方法一男男方法二男男批量刪除同上 環(huán)境 版本信息 spring的版本為4.1.4(spring3我也用過,就配置信息略有不同,其用法還是一樣的) 配置信息 需要在applicationContext.xml中配置以下信息 如果已經(jīng)在文件中配置了jdbctemplate的話還可以使用以下方法配置 ...
摘要:安裝可以使用手動安裝命令行接口或如果你是用戶,可以使用或。有關(guān)全面的安裝說明,請參閱開始部分中的第節(jié),安裝。推斷抓取依賴項標準包含一個注解,它允許你聲明對第三方庫的依賴關(guān)系,這個有用的技術(shù)讓可以像或那樣下載,但不需要你使用構(gòu)建工具。 第VII章. Spring Boot CLI 如果你想快速開發(fā)Spring應(yīng)用程序,可以使用Spring Boot CLI命令行工具,它允許你運行Groo...
摘要:如何更高效的實現(xiàn)資源合理調(diào)度和復(fù)用如何彈性使用云原生來保障瞬時業(yè)務(wù)增長如何基于構(gòu)建安全的技術(shù)中臺,為傳統(tǒng)行業(yè)賦能月日上海技術(shù)開放日構(gòu)建云原生,擁抱新增長將深度解讀各企業(yè)在不同場景下的痛點,如何通過云原生的技術(shù)實現(xiàn)創(chuàng)新升級。Kubernetes如何更高效的實現(xiàn)資源合理調(diào)度和復(fù)用?如何彈性使用云原生來保障瞬時業(yè)務(wù)增長?如何基于K8S構(gòu)建安全的技術(shù)中臺,為傳統(tǒng)行業(yè)賦能?9月11日·上海 UCan技...
摘要:微軟雅黑宋體如何更高效的實現(xiàn)資源合理調(diào)度和復(fù)用如何彈性使用云原生來保障瞬時業(yè)務(wù)增長如何基于構(gòu)建安全的技術(shù)中臺,為傳統(tǒng)行業(yè)賦能微軟雅黑宋體? Kubernetes如何更高效的實現(xiàn)資源合理調(diào)度和復(fù)用?如何彈性使用云原生來保障瞬時業(yè)務(wù)增長?如何基于K8S構(gòu)建安全的技術(shù)中臺,為傳統(tǒng)行業(yè)賦能? 9月11日·上海 UCan技術(shù)開放日構(gòu)建云原生,擁抱新增長將深度解讀各企業(yè)在不同場景下的痛點,如何通...
摘要:擁抱未來的布局方式與布局全教程本書系列文章為對中布局與布局的詳細介紹,已在同步更新,如您在閱讀過程中發(fā)現(xiàn)描述有誤或錯別字的情況,您可以向本項目提出或。主要是對于標準里的布局方式草案中的布局方式進行一些總結(jié)。 GitBook《擁抱未來的CSS布局方式:flex與grid布局》全教程 本書(系列文章)為對CSS中flex布局與grid布局的詳細介紹,已在GitHub同步更新,如您在閱讀過程...
閱讀 2006·2021-11-24 10:45
閱讀 1862·2021-10-09 09:43
閱讀 1303·2021-09-22 15:38
閱讀 1230·2021-08-18 10:19
閱讀 2849·2019-08-30 15:55
閱讀 3070·2019-08-30 12:45
閱讀 2975·2019-08-30 11:25
閱讀 365·2019-08-29 11:30