第四章. 征服数据库
--------------------------------------------------------------------------------
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)
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_STUDENTS}", new CallableStatementCallback(){.....}); 看清了,就是要实现自己的 CallableStatementCallback的一个方法(P134)
public Object doInCallableStatement(CallableStatement cs){
cs.execute();
return null;
}
public Object doInCallableStatement(CallableStatement cs){
cs.execute();
return null;
}
38. 可以不使用 JdbcTemplate, 而扩展 SqlUpdate 和 MappingSqlQuery 把操作创建成对象,这种做法可以可以让你的代码几乎不和 JDBC API 进行交互,不过我还是觉得用 JdbcTemplate 通俗易懂。扩展 DataFieldMaxValueIncrementer 取得自增键值,有三个方法 nextIntValue()、nextLongValue()、nextStringValue(),根据实际数据库可以用不同的实现,如 Oracle、PostgreSQL、MySQL 和 Hypersonic 等数据库的序列机制的实现或自己写的实现。
39. Spring 只需提供 ORM 框架的整合点,以及一些附加的服务:整合事务处理、异常处理、线程安全,轻量级模板、便利的支持类、资源管理。Spring 整合 Hibernate 的关键在于对 LocalSessionFactoryBean 的配置,不再需要 hibernate.cfg.xml(或 hibernate.properties) 了。可用 LocalSessionFactoryBean 的 mappingDirectoryLocations 属性加载某一路径下的所有 *.hbm.xml 文件。最后留意 HibernateTemplate(它的 HibernateCallback 接口) 和 HibernateDaoSupport 的使用。(P139)
40. Spring 与 JDO 和 OBJ 的整合使用较少,先跳过。Spring 支持两种版本的 iBatis:1.3 和 2.0;1.3 的类命名为 SqlMapXxx,2.0 的类命名为 SqlMapClientXxx。对 SqlMap 的整合要配置一个 SqlMapClientFactoryBean,仍然保留 sqlMap-config.xml 文件,并通过 configLocation 属性配置给 SqlMapClientFactoryBean,它相当于 LocalSessionFactoryBean。关注 SqlMapClientTemplate 的配置和使用,还有一个 SqlMapClientCallbak 接口可扩展。(P149)
分享到:
相关推荐
10-Struts高级部分(2)(常用Action、验证框架、动态Form)笔记 J2EE框架_笔记_b: 11-留言管理程序_使用Struts + DAO完成笔记 12-Struts + DAO分页笔记 16-留言管理程序_使用Struts + DAO + Hibernate完成笔记 ...
10-Struts高级部分(2)(常用Action、验证框架、动态Form)笔记 J2EE框架_笔记_b: 11-留言管理程序_使用Struts + DAO完成笔记 12-Struts + DAO分页笔记 16-留言管理程序_使用Struts + DAO + Hibernate完成笔记 ...
10-Struts高级部分(2)(常用Action、验证框架、动态Form)笔记 J2EE框架_笔记_b: 11-留言管理程序_使用Struts + DAO完成笔记 12-Struts + DAO分页笔记 16-留言管理程序_使用Struts + DAO + Hibernate完成笔记 ...
### Spring in Action 学习笔记知识点总结 #### 1. Spring 框架基础 ##### 1.1 Spring 概述 - **轻量级**:Spring 的“轻量级”主要体现在其对资源消耗较少,同时具备低入侵性。在基于 Spring 开发的应用中,业务...
《MLDN_J2EE框架_笔记--精华---(包括jsp struts hibernate spring)》这份压缩包文件聚焦于Java企业级开发中的核心技术,涵盖了JSP、Struts、Hibernate和Spring四大框架,它们是构建现代J2EE应用的基础。以下是这些...
3. **Spring与JDBC的整合**: Spring提供了JdbcTemplate和NamedParameterJdbcTemplate,简化了数据库操作,避免了原始JDBC的繁琐。`spring_dao.txt`可能会讨论这些模板类的用法,包括如何执行SQL查询、事务管理等。 ...
《Spring in Action》是一本深度剖析Spring框架的权威著作,其中文清晰版为中国的开发者提供了便利,便于理解和学习。本书全面覆盖了Spring的核心概念和技术,包括依赖注入、AOP(面向切面编程)、数据访问、Web开发...
以下将详细介绍Spring学习笔记中的主要知识点。 **面向抽象编程** 面向抽象编程是一种设计原则,强调在代码中使用接口或抽象类,而不是具体实现类。这使得系统更具有灵活性,易于扩展和维护。在Spring框架中,我们...
Struts 是一个 MVC(Model-View-Controller)架构的 Web 框架,Spring 提供了一个全面的后端服务管理平台,而 Hibernate 则是用于对象关系映射(ORM)的框架,简化了数据库操作。下面将详细介绍这三个框架的基本概念...
### Spring学习笔记知识点详解 #### 一、Spring框架概述 **Spring** 是一个开源的、分层的企业级应用开发框架,旨在简化Java EE应用程序的开发。它的主要目标是提高开发效率,减少耦合度,并提供一种更为简洁的...
笔记中可能涵盖了Struts2的核心概念,如Action、Result、Interceptor等,以及如何配置Struts2的XML文件,进行表单验证,处理异常,集成其他框架等内容。 接下来是“马士兵hibernate学习笔记.doc”。Hibernate是一个...
**Spring3笔记** Spring是企业级应用的全面解决方案,包括依赖注入(DI)、面向切面编程(AOP)、事务管理等。以下是关键点: 1. **依赖注入(Dependency Injection, DI)**: 通过容器管理组件之间的依赖关系,...
2. 自动方式:引入 Spring 的 Web 包和 Struts 的 Spring 插件,配置监听器和应用上下文路径,让 Struts 从 Spring 容器中查找 Action 类,实现单例化,提高效率。 监听器如 ContextLoaderListener 在项目启动时...
标题 "记录-笔记-用ANT构建-struts-spring-hibernate" 暗示了这篇笔记主要涉及使用Apache Ant工具来构建一个整合了Struts、Spring和Hibernate的Java Web项目。Struts是MVC(模型-视图-控制器)框架,Spring是全面的...
10-Struts高级部分(2)(常用Action、验证框架、动态Form)笔记.pdf 11-留言管理程序_使用Struts + DAO完成笔记.pdf 12-Struts + DAO分页笔记.pdf 13-Hibernate入门(上)笔记.pdf 14-Hibernate入门(下)笔记.pdf ...
stmt.setString(1, "Spring in Action"); stmt.setString(2, "Craig Walls"); stmt.setString(3, "9787115417305"); stmt.execute(); } catch (SQLException e) { // Exception handling } finally { // ...
6. **整合Struts2和Spring**:使用Spring插件struts-plugin.xml将Action注入Spring容器,实现依赖注入。 7. **整合Hibernate和Spring**:通过SessionFactoryBean在Spring中创建SessionFactory,配置数据源,使用...
在本例中,BlazeDS 作为 Flex 和 Hibernate 集成的中间件,实现了 AMF (Action Message Format) 数据交换,提高了数据传输效率。 3. **Hibernate**: Hibernate 是一个流行的Java ORM (对象关系映射) 框架,用于简化...