Spring - 在 JDBC 模板中使用具名参数

【1】NamedParameterJdbcTemplate

在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制.

定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定.

在 Spring JDBC 框架中, 绑定 SQL 参数的另一种选择是使用具名参数(named parameter).

具名参数:

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

具名参数只在 NamedParameterJdbcTemplate 中得到支持


【2】update(sql, paramMap)

    /**
     * 可以为参数起名字. 
     * 1. 好处: 若有多个参数, 则不用再去对应位置, 直接对应参数名, 便于维护
     * 2. 缺点: 较为麻烦. 
     */

    @Test
    public void testNamedParameterJdbcTemplate(){

        String sql="insert into test_user(id,name,password,balance) values(:id,:name,:password,:balance)";

        Map map = new HashMap();
        /*此处不再添加 " :"*/
        map.put("id", 3);
        map.put("name", "兰芝");
        map.put("password", 123456);
        map.put("balance", 500);

        namedParameterJdbcTemplate.update(sql, map);
    }

【3】update(sql, parameterSource)

  • 使用具名参数时, 可以使用 update(String sql, SqlParameterSource paramSource) 方法进行更新操作

  • SQL 语句中的参数名和类的属性一致!

  • 使用 SqlParameterSource 的 BeanPropertySqlParameterSource 实现类作为参数.



    @Test
    public void testNamedParameterJdbcTemplate2(){

        String sql="insert into test_user(name,password,balance) values(:name,:password,:balance)";

        User user = new User();
        user.setName("行之");
        user.setPassword("1241");
        user.setBalance("235");

        SqlParameterSource parameterSource = new BeanPropertySqlParameterSource(user);

        namedParameterJdbcTemplate.update(sql, parameterSource);
    }

你可能感兴趣的:(Spring)