• Spring NamedParameterJdbcTemplate 详解


    转自: https://zmx.iteye.com/blog/373736

    NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性。

    NamedParameterJdbcTemplate主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。

    首先让我们看个例子吧:

     1 @Test
     2 public void testNamedParameterJdbcTemplate1() {
     3 NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;
     4 //namedParameterJdbcTemplate =
     5 //    new NamedParameterJdbcTemplate(dataSource);
     6 namedParameterJdbcTemplate =
     7 new NamedParameterJdbcTemplate(jdbcTemplate);
     8     String insertSql = "insert into test(name) values(:name)";
     9     String selectSql = "select * from test where name=:name";
    10     String deleteSql = "delete from test where name=:name";
    11     Map<String, Object> paramMap = new HashMap<String, Object>();
    12     paramMap.put("name", "name5");
    13     namedParameterJdbcTemplate.update(insertSql, paramMap);
    14     final List<Integer> result = new ArrayList<Integer>();
    15 namedParameterJdbcTemplate.query(selectSql, paramMap,
    16 new RowCallbackHandler() {
    17         @Override
    18         public void processRow(ResultSet rs) throws SQLException {
    19             result.add(rs.getInt("id"));
    20         }
    21     });
    22 Assert.assertEquals(1, result.size());
    23 SqlParameterSource paramSource = new MapSqlParameterSource(paramMap);
    24 namedParameterJdbcTemplate.update(deleteSql, paramSource);
    25 }

    接下来让我们分析一下代码吧:

    1)NamedParameterJdbcTemplate初始化:可以使用DataSource或JdbcTemplate 对象作为构造器参数初始化;

    2)insert into test(name) values(:name):其中“:name”就是命名参数;

    3) update(insertSql, paramMap):其中paramMap是一个Map类型,包含键为“name”,值为“name5”的键值对,也就是为命名参数设值的数据;

    4)query(selectSql, paramMap, new RowCallbackHandler()……):类似于JdbcTemplate中介绍的,唯一不同是需要传入paramMap来为命名参数设值;

    5)update(deleteSql, paramSource):类似于“update(insertSql, paramMap)”,但使用SqlParameterSource参数来为命名参数设值,此处使用MapSqlParameterSource实现,其就是简单封装Java.util.Map。

    NamedParameterJdbcTemplate类为命名参数设值有两种方式:java.util.Map和SqlParameterSource:

    1)java.util.Map:使用Map键数据来对于命名参数,而Map值数据用于设值;

    2)SqlParameterSource:可以使用SqlParameterSource实现作为来实现为命名参数设值,默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现;MapSqlParameterSource实现非常简单,只是封装了java.util.Map;而BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。

    1 package cn.javass.spring.chapter7;
    2 public class UserModel {
    3     private int id;
    4     private String myName;   
    5     //省略getter和setter     
    6 }
     1 @Test
     2 public void testNamedParameterJdbcTemplate2() {
     3     NamedParameterJdbcTemplate namedParameterJdbcTemplate = null;
     4     namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
     5     UserModel model = new UserModel();
     6     model.setMyName("name5");
     7     String insertSql = "insert into test(name) values(:myName)";
     8     SqlParameterSource paramSource = new BeanPropertySqlParameterSource(model);
     9     namedParameterJdbcTemplate.update(insertSql, paramSource);
    10 }

    可以看出BeanPropertySqlParameterSource使用能减少很多工作量,但命名参数必须和JavaBean属性名称相对应才可以。

  • 相关阅读:
    hihoCoder[Offer收割]编程练习赛1题目解析
    你的计划为什么运行不下去?怎么破?
    Activity的生命周期
    leetcode——Lowest Common Ancestor of a Binary Tree
    Spring学习笔记(四)-- Spring事务全面分析
    Docker技术-cgroup
    docker高级应用之cpu与内存资源限制(转)
    JMX 学习
    如何使用JVisualVM进行性能分析
    如何利用 JConsole观察分析Java程序的运行,进行排错调优(转)
  • 原文地址:https://www.cnblogs.com/sharpest/p/5622884.html
Copyright © 2020-2023  润新知