第四章. 征服数据库
--------------------------------------------------------------------------------
31. Spring 把数据访问流程中的固定部分和可变部分分开,分别映射成两截然不同的类,模板 (Template)和回调(Callback),模板管事物控制、资源管理以及异常处理;回调实现特定于应用的部 分--创建 statement、绑定参数、以及整理结果集。模板方法模式的优秀应用(P123)
32. JdbcTemplate template = new JdbcTemplate(myDataSource); 构造。 所有 Spring Dao 模板类 是线程安全的,可以为每一个 DAO 配置一个 JdbcTemplate 属性,也可以让 DAO 类继承 JdbcDaoSupport,然后在 DAO 类中用 getJdbcTemplate() 获取到 JdbcTemplate 进行数据库操作。书中 的做法是给每个 Dao 加一个 JdbcTemplate 属性,记录的日志略有不同,实际中注意(P127)
33. JdbcTemplate 的 execute() 方法不可带 sql 参数,即不存在 execute(String sql, Object[] params) 方法,而 update 才有 update(String sql, Object[] params) 方法可以,还能指定每一字段 的类型(通过第三个参数 int[] argTypes),保证了类型安全,130页说 JdbcTemplate 提供了 execute (String sql, Object[] params) 是错误的。(P130)
34. JdbcTemplate 类创建了 PreparedStatementCreator(createPreparedStatementCreator (Connection conn)) 和 PreparedStatementSetter(setValues(PreparedStatement ps)), 批量更新时 需要创建自己的 BatchPreparedStatementCreator 类:
BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter(){ public int getBatchSize(){ return persons.size();} public void setValues(PreparedStatement ps, int index) throws SQLException{ Person person = (Person) persons.get (index); ps.setInt(0,person.getId().intValue()); ...... } };getJdbcTemplate().batchUpdate(sql,setter);BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter(){ public int getBatchSize(){ return persons.size ();} public void setValues(PreparedStatement ps, int index) throws SQLException{ Person person = (Person) persons.get(index); ps.setInt(0,person.getId ().intValue()); ...... }};getJdbcTemplate().batchUpdate (sql,setter);
把传入的List<Person>批量的进行数据库相应操作(P131)
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索spring
, spring jdbctemplate
, 模板
, 方法
, jdbctemplate
, jdbcdaosupport
, spring batchupdate
, preparedstatement
person
,以便于您获取更多的相关知识。