NamedParameterJdbcTemplate具名参数 in() 传参

本文介绍了在SpringJDBC框架中,如何使用具名参数(namedparameters)替代传统的SQL占位符,提高代码维护性和查询的灵活性。作者提供了查询案例,并展示了如何使用`NamedParameterJdbcTemplate`进行参数化查询和转换到原生JdbcTemplate的方法。
摘要由CSDN通过智能技术生成

在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定.
在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用具名参数(named parameter).
那么什么是具名参数?
具名参数: SQL 按名称(以冒号开头)而不是按位置进行指定。
具名参数更易于维护, 也提升了可读性. 具名参数由框架类在运行时用占位符取代。
具名参数在处理in()参数时更加方便和安全。
具名参数只在 NamedParameterJdbcTemplate 中得到支持。
NamedParameterJdbcTemplate可以使用全部jdbcTemplate方法,除此之外,我们来看看使用它的具名参数案例:

public List<Employee> queryByFundid(int fundId) { 
     String sql = "select * from employee where id in (:ids) and dept = :dept";

    Map<String, Object> args  = new HashMap<>();    
    args.put("dept", "Tech");
    List<Integer> ids = new ArrayList<>();
    ids.add(3);
    ids.add(32);
    args.put("ids", ids);
    NamedParameterJdbcTemplate givenParamJdbcTemp = new NamedParameterJdbcTemplate(jdbcTemplate);
    List<Employee> data = givenParamJdbcTemp.queryForList(sql, args, Employee.class);
    return data;
}

建议使用如下方式注入 NamedParameterJdbcTemplate

    // @Autowired
    // private JdbcTemplate jdbcTemplate;
    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

这样注入后,如果想使用原生JdbcTemplate可以使用namedParameterJdbcTemplate.getJdbcTemplate() 

   public int queryPageTotal(String sql, List<Object> queryParams) {
        sql = "select count(1) FROM (" + sql + ")T";
        int total = this.namedParameterJdbcTemplate.getJdbcTemplate().queryForObject(sql, queryParams.toArray(), Integer.class);
        return total;
    }

使用具名参数

public List<Employee> queryByFundid(int fundId) { 
    String sql = "select * from employee where id in (:ids) and dept = :dept";
    Map<String, Object> args  = new HashMap<>();    
    args.put("dept", "Tech");
    List<Integer> ids = new ArrayList<>();
    ids.add(3);
    ids.add(32);
    args.put("ids", ids);
    List<Employee> data = namedParameterJdbcTemplate.queryForList(sql, args, Employee.class);
    return data;
}

参考:

https://www.cnblogs.com/deepalley/p/17476560.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值