java jdbc 命名参数_NamedParameterJdbcTemplate 使用具名参数记录

背景

最近维护了一个比较老的项目,操作数据库直接用的 Spring 的 JdbcTemplate,有很多地方我们传入的参数都是不确定的

简单的还好,复杂的 sql 语句在代码里用字符串拼接起来简直不能忍,

又不想对原来的项目有什么大的改动,就想这能不能在现在的基础上优化一下

还好有 NamedParameterJdbcTemplate

解释

具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定. 具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代

具名参数只在 NamedParameterJdbcTemplate 中得到支持。NamedParameterJdbcTemplate可以使用全部jdbcTemplate方法

初始化该类位于 org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate

有2个构造方法,参数分别是 DataSource 和 JdbcOperations

/**

* Create a new NamedParameterJdbcTemplate for the given {@link DataSource}.

*

Creates a classic Spring {@link org.springframework.jdbc.core.JdbcTemplate} and wraps it.

* @param dataSource the JDBC DataSource to access

*/

public NamedParameterJdbcTemplate(DataSource dataSource) {

Assert.notNull(dataSource, "DataSource must not be null");

this.classicJdbcTemplate = new JdbcTemplate(dataSource);

}

/**

* Create a new NamedParameterJdbcTemplate for the given classic

* Spring {@link org.springframework.jdbc.core.JdbcTemplate}.

* @param classicJdbcTemplate the classic Spring JdbcTemplate to wrap

*/

public NamedParameterJdbcTemplate(JdbcOperations classicJdbcTemplate) {

Assert.notNull(classicJdbcTemplate, "JdbcTemplate must not be null");

this.classicJdbcTemplate = classicJdbcTemplate;

}

实例化 bean 只要将 dataSource 或者 JdbcTemplate 传入到构造参数即可

class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">

使用注入 namedParameterJdbcTemplate

参数的传入

namedParameterJdbcTemplate 参数传入有 2 中方法:

Map paramMap 我们熟知的 map

SqlParameterSource paramSource

该接口默认的实现有三个类:

MapSqlParameterSource 实现非常简单,只是封装了java.util.Map;

当 Map paramMap 用吧 或者 new MapSqlParameterSource(paramMap) 参数为 map

BeanPropertySqlParameterSource 封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。

new BeanPropertySqlParameterSource(dto) new 出一个 BeanPropertySqlParameterSource 对象,构造方法传入实体类即可,绝大部分情况下我们都使用这种方式

EmptySqlParameterSource 一个空的SqlParameterSource ,常用来占位使用

没用过

数据返回返回 Map

返回 RowMapper 包装好的实体类,该类有2中实现

SingleColumnRowMapper ,sql结果为一个单列的数据,如List, List,String,Integer等

BeanPropertyRowMapper, sql结果匹配到对象 List< XxxVO> , XxxVO

示例KnowledgeInfo info = new KnowledgeInfo();

info.setAuditState("1");

List infos = namedParameterJdbcTemplate.query(

sql,

new BeanPropertySqlParameterSource(info),

new BeanPropertyRowMapper<>(KnowledgeInfo.class)

);

注意: sql 语句中的参数使用 :参数名 进行占位

留言

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值