Spring的NamedParameterJdbcTemplate的用法

一.NamedParameterJdbcTemplate

  NamedParameterJdbcTemplate内部包含了一个JdbcTemplate,所以JdbcTemplate能做的事情NamedParameterJdbcTemplate都能干,NamedParameterJdbcTemplate相对于JdbcTemplate主要增加了参数可以命名的功能。在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用具名参数(named parameter).
  具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代。
  NamedParameterJdbcTemplate主要提供以下三类方法:execute方法、query及queryForXXX方法、update及batchUpdate方法。

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

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

形如下列sql语句,执行的过程为(具名参数形式解析sql方式)

UPDATE sys_party AS a 
SET party_name =: partyName,
party_sex =: partySex,
party_IDNumber =: partyIdnumber
WHERE
    1 = 1 
    AND party_id =: partyId

  直接调用namedParameterJdbcTemplate的方法,如update传入一个String型的sql语句和一个new BeanPropertySqlParameterSource()对象中包含需要的返回值对象POJO。

return namedParameterJdbcTemplate.update(insertSql.toString(), new BeanPropertySqlParameterSource(party));

  BeanPropertySqlParameterSource()对象会自动生成一个符合传入的POJO 的SqlParameterSource 类型的值SqlParameterSource 。

public int update(String sql, SqlParameterSource paramSource)

返回值为int型可以知道执行更新的结果。

②MapSqlParameterSource

调用查询方法时用queryForList(),需要传进去3个参数,分别为string型的slq语句、Map

public <T> List<T> queryForList(String sql, Map<String, ?> paramMap, Class<T> elementType) throws DataAccessException {
        return this.queryForList(sql, (SqlParameterSource)(new MapSqlParameterSource(paramMap)), elementType);
    }

  接收到传入的参数后,会调用MapSqlParameterSource()方法将map中的key、value值提取出来,然后会被解析成SqlParameterSource型的对象

public MapSqlParameterSource(Map<String, ?> values) {
        this.addValues(values);
    }

elementType对应着List中的T。

注:sql与map的传值方式

sql为:
 SELECT
  a.party_id AS “partyId”,
  a.party_name AS “partyName”,
  a.party_nativeplace AS “partyNativeplace”,
  a.party_birth AS “partyBirth”
 FROM
  sys_party a
 WHERE
  1 = 1 and a.party_id =:partyId
map为:
 map.put(“partyId”,partyId);
其中sql的”=:”后的值对应map中的key,同时map的value就是sql参数的真正值。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值