SpringJDBC
更改 主要使用的是 update 方法
批量更改:一次性执行多条 update 语句,使用 batchUpdate 方法
- jdbcTemplate.batchUpdate(String[] sql); 固定参数值
- jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter()); 可变参数值
查询 主要使用的是 query、queryForXX 等函数,而 queryForXX 系列底层其实调用的是 query 方法,故这里只介绍通过 query 方法查询数据。
query 有多个重载方法,例如传入固定参数的 SQL 语句,传入可变参数的 SQL 语句等等,语法类似上面介绍的 update 方法,这里介绍两种带回调方法的查询语句:
(1) void query(String sql, RowCallbackHandler rch)
使用 RowCallbackHandler 既可以返回单行结果,也可以返回多行结果。Spring 会对查询的结果集逐行调用 processRow 方法,用户不用关心怎么读取下一行数据的问题。
(2) <T> T queryForObject(String sql, RowMapper<T> rowMapper)
使用 RowMapper 处理结果集,它直接返回的是 List,相比于上面,我们不用手动将对象添加到 List 中
RowCallbackHandler 接口的实现类是可以有状态,即在多线程环境下,可能会有线程安全的问题。
下面代码就展示了其实现类 RowCountCallbackHandler 打印结果集行数的示例,在多线程环境中,若行数发生变化,下面的结果可能不会一致。而 RowMapper 实现类没有这种情况。
下面代码就展示了其实现类 RowCountCallbackHandler 打印结果集行数的示例,在多线程环境中,若行数发生变化,下面的结果可能不会一致。而 RowMapper 实现类没有这种情况。