• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Java使用Spring JdbcTemplate向in语句传递参数

武飞扬头像
老鼠只爱大米
帮助1

目录

一、Jdbctemplate方式

二、NamedParameterJdbcTemplate方式

 三、总结


一、Jdbctemplate方式

传统的Jdbctemplate类无法直接向in语句传递参数,需要通过字符串拼接的方式来实现。例如:

1.常见的通过占位符查询结果方式(无法适用in语句)

  1.  
    //查询id等于123的用户信息
  2.  
    String sql = "select * from user where id = ?";
  3.  
    Map<String, Object> args = new HashMap<>();
  4.  
    args.put("id", 123);
  5.  
    jdbcTemplate.queryForList(sql, args , User.class )

2.如果使用上述方式向in语句中传递参数

  1.  
    //查询id为1,2,3的用户信息
  2.  
    String sql = "select * from user where id in (?)";
  3.  
    Map<String, Object> args = new HashMap<>();
  4.  
    int[] ids = {1,2,3}
  5.  
    args.put("id", ids);
  6.  
    jdbcTemplate.queryForList(sql, args , User.class );

    这里查询语句被替换后如下,执行时会报错

  1.  
    //不符合sql语句规范
  2.  
    select * from user where id in ([1,2,3])

3.解决方案:使用字符串拼接

  1.  
    String ids = "1,2,3";
  2.  
    String sql = "select * from user where id in (" ids ")";

   如果入参是字符串,要用两个单引号' 内容'引起来,这样就满足SQL的语法,例如:

  1.  
    String ids = "'1','2','3'";
  2.  
    String sql = "select * from user where id in (" ids ")";

二、NamedParameterJdbcTemplate方式

     Jdbctemplate是比较底层的类,因此功能比较有局限性。NamedParameterJdbcTemplate是对Jdbctemplate的再次封装,它可以使用具名参数来绑定Sql参数。一系列具名参数组成一个map传入,这样传参的顺序就没有限制了。

    使用NamedParameterJdbcTemplate实现in语句的传参非常简单,如下:

  1.  
    String sql = "select * from user where name in (:names)";
  2.  
    String[] arr = {"张三","李四","王五"};
  3.  
    ArrayList<String> names = new ArrayList<String>(Arrays.asList(arr));
  4.  
    Map<String, Obeject> args = new HashMap<String,Object>();
  5.  
    args.put("names", names);
  6.  
    NamedParameterJdbcTemplate jdbcTmeplate = new NameParameterJdbcTemplate(jdbctemplate);
  7.  
    jdbcTemplate.queryForList(sql,args);

 三、总结

使用Jdbctemplate传递给in语句参数时,如果参数是固定的,那么拼接成字符串很简单。但是如果参数不固定,是通过数组或列表给出的。那么在进行字符串拼接时,就会比较复杂麻烦,需要将数组的值转换成字符串,每个元素用逗号分隔并用单引号括起来。综合比较,给in语句传递参数推荐使用NamedParameterJdbcTemplate类来实现。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfkikhi
系列文章
更多 icon
同类精品
更多 icon
继续加载