快速业务通道

Spring学习点滴,《Spring in Action》笔记(二) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

Spring学习点滴,《Spring in Action》笔记(二)

时间:2011-08-18 unmi.cc 隔叶黄莺

第四章. 征服数据库

--------------------------------------------------------------------------------

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 in Action》笔记(二)(2)

时间:2011-08-18 unmi.cc 隔叶黄莺

35. 用JdbcTemplate读数据,可以用 JdbcTemplate.query(sql,params, rowCallbackHandler), 实现 RowCallbackHandler的 processRow(ResultSet rs) 组装查询到的一个对象。实现自己的 RowMapper把 ResultSet 中一条记录映射成一个对象,用JdbcTemplate.query(sql, params, new MyRowMapper())能够 返回查询整理后的对象列表,书中 133 页的带 RowMapperResultReader的query方法已经不存在了,在 Spring 2.x 中连 RowMapperResultReader 这个类也没啦,敬请关注 RowMapper。由此可见,即使是只返 回一条记录的查询也可用带 RowMapper的query方法,只需返回第一条记录就行。(P132)

36. JdbcTemplate的 queryForXXX可更快捷返回简单的查询值,如一个 count, 只返回一条记录的一 个字段的值。书上没说这个,看 JdbcTemplate 代码的方法发现的。

37. JdbcTemplate 调用存储过程: jdbcTemplate.execute("{ARCHIVE_S

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号