1. JDBCTemplate的使用
1) 创建连接池的相关配置
a) 导入资源文件:即导入写有连接池配置的相关信息的配置文件
b) 配置C3P0 Bean。
2) 配置Spring的JDBCTemplate:即配置JDBCTemplate的Bean。
3) 在java文件中通过IOC容器获得JdbcTemplate的对象。
4) 通过JdbcTemplate对象执行插入、更新、删除、查询操作
Ø Update:jdbcTemplate.update();
Ø 批量更新:jdbcTemplate.batchUpdate();
5) 查询:
a) jdbcTemplate.batchUpdate
b) 需要调用 queryForObject(String sql, RowMapper
Ø 其中的 RowMapper 指定如何去映射结果集的行,常用的实现类为 BeanPropertyRowMapper
Ø 使用 SQL 中列的别名完成列名和类的属性名的映射. 例如 last_name lastName
Ø 不支持级联属性.JdbcTemplate 到底是一个 JDBC 的小工具, 而不是 ORM 框架
c) 查询实体类的集合:jdbcTemplate.query()。注意调用的不是 queryForList 方法
1. 可为SQL中的按名称(以冒号开头)而不是按位置进行指定。【具名参数更易于维护】,也【提升了可读性】。
2. NamedParameterJdbcTemplate的使用
1) 创建连接池的相关配置
c) 导入资源文件:即导入写有连接池配置的相关信息的配置文件
d) 配置C3P0 Bean。
2) 配置NamedParameterJdbcTemplate的Bean。
Ø NamedParameterJdbcTemplate没有无参构造器,需要使用构造器注入的方式为dataSource初始化。
3) 在Java文件中通过IOC容器获取实例。
4) 通过namedParameterJdbcTemplate更新数据
Ø 在 SQL 语句中使用具名参数时, 可以在一个Map中提供参数值, 参数名为键
Ø 也可以使用SqlParameterSource 参数
Ø 批量更新时可以提供 Map或 SqlParameterSource 的数组
5) 查询元素:同jdbcTemplate。
1. 开启事务
1) 配置事务管理器:
2) 启用事务注解
3) 在业务中对一个事务的的操作方法上添加注释:@Transactional
2. 事务传播性(通过注解设置)
1) 什么是事务的传播性:(画图+说明)
当事务方法被另一个事务方法调用时, 必须指定事务应该如何传播。例如: 方法可能继续在现有事务中运行, 也可能开启一个新事务, 并在自己的事务中运行。
• 事务传播属性可以在 @Transactional 注解的 propagation 属性中定义
2) REQUIRED传播行为:(举例+ 画图)
a) Checkout事务与被调用的purchase事务方法同属于一个事务。
b) 期间只要有一个purchase事务方法出现异常,都直接回滚到整个事务开始,即Tx1。
3) REQUIRE_NEW 传播行为
a) 它表示该方法必须启动一个新事务, 并在自己的事务内运行。如果被调用的事务在运行, 就应该先挂起本事务。
b) 由于被调用的多个事务都是相互独立,且并不属于本事务。期间有一个事务抛出异常,只回滚到该事务的开始。
3. 设置隔离事务属性
1) 用 @Transactional 注解声明式地管理事务时可以在 @Transactional 的 isolation 属性中设置隔离级别
4. 设置回滚事务属性(不常用)
1) 事务的回滚规则可以通过 @Transactional 注解的 rollbackFor 和 noRollbackFor 属性来定义
Ø rollbackFor: 遇到时必须进行回滚
Ø noRollbackFor: 一组异常类,遇到时必须不回滚
5. 设置超时和只读事务属性
1) 超时和只读属性可以在 @Transactional 注解中定义.超时属性以秒为单位来计算.
1. Spring整合Hibernate整合什么?
1) 由IOC容器来管理Hibernate的SessionFactory。
2) 让Hibernate使用上Spring的声明式事务。
2. 整合步骤
1) 加入hibernate
a) 导入hibernate的jar包。
b) 添加hibernate的配置文件:hibernate.cfg.xml
Ø 在hibernate主配置文件中配置其基本属性:如方言、SQL显示、SQL格式化、生成数据表和二级缓存等。
Ø 数据源(C3P0)移到IOC容器中配置
Ø 映射文件*.hbm.xml的加载在IOC容器配置SessionFactory实例时进行配置。
c) 编写持久化类对应的*.hbm.xml文件。
2) 加入Spring
a) 导入jar包
b) 添加Spring的配置文件
Ø 配置自动扫描包(为采用基于注释方式配置Bean)
Ø 配置资源
l 导入资源文件(为导入4大参数的配置文件做准备)
l 配置数据源Bean(配置C3p0的Bean,并为4大参数赋值)
Ø 配置Hibernate的SessionFactory的Bean:这里使用的类是LocalSessionFactoryBean
l 配置数据源
l 配置Hibernate主配置文件的位置
l 配置Hibernate映射文件的位置及名称
Ø 配置Spring的声明式事务
l 配置事务管理器
l 配置事务属性,需要事务管理器
l 指定切点,并将切点与事务相关联。即在切点上添加事务。
3) Spring中事务的流程
* 1. 在方法开始之前
* ①. 获取 Session
* ②. 把 Session 和当前线程绑定, 这样就可以在 Dao 中使用SessionFactory 的
* getCurrentSession() 方法来获取 Session 了
* ③. 开启事务
* 2. 若方法正常结束, 即没有出现异常, 则
* ①. 提交事务
* ②. 使和当前线程绑定的 Session 解除绑定
* ③. 关闭 Session
*
* 3. 若方法出现异常, 则:
* ①. 回滚事务
* ②. 使和当前线程绑定的 Session 解除绑定
* ③. 关闭 Session
1. Spring 如何在 WEB 应用中使用 ?
1) 需要额外加入的 jar 包:
Ø spring-web-4.0.0.RELEASE.jar
Ø spring-webmvc-4.0.0.RELEASE.jar
2) 2). Spring 的配置文件, 没有什么不同
3) 如何创建 IOC 容器 ?
a) 非 WEB 应用在 main 方法中直接创建
b) 应该在 WEB 应用被服务器加载时就创建 IOC 容器:
在 ServletContextListener#contextInitialized(ServletContextEvent sce) 方法中创建 IOC 容器.
c) 在 WEB 应用的其他组件中如何来访问 IOC 容器呢 ?
在 ServletContextListener#contextInitialized(ServletContextEvent sce) 方法中创建 IOC 容器后, 可以把其放在
ServletContext(即 application域)的一个属性中.
d) 实际上, Spring 配置文件的名字和位置应该也是可配置的! 将其配置到当前 WEB 应用的初始化参数中较为合适.
4) 在 WEB 环境下使用 Spring
a) 需要额外加入的 jar 包:
Ø spring-web-4.0.0.RELEASE.jar
Ø spring-webmvc-4.0.0.RELEASE.jar
b) Spring 的配置文件, 和非 WEB 环境没有什么不同
c) 需要在 web.xml 文件中加入如下配置:
2. Spring 如何整合 Struts2?
1) 整合目标 ? 使 IOC 容器来管理 Struts2 的 Action!
2) 如何进行整合 ?
a) 正常加入 Struts2
b) 在 Spring 的 IOC 容器中配置 Struts2 的 Action
注意: 在 IOC 容器中配置 Struts2的 Action 时, 需要配置 scope 属性, 其值必须为 prototype
class="com.atguigu.spring.struts2.actions.PersonAction" scope="prototype">
c) 配置 Struts2 的配置文件: action 节点的 class 属性需要指向 IOC 容器中该 bean 的 id
d) 加入 struts2-spring-plugin-2.3.15.3.jar
3) 整合原理: 通过添加 struts2-spring-plugin-2.3.15.3.jar 以后, Struts2 会先从 IOC 容器中
获取 Action 的实例.
if (appContext.containsBean(beanName)) {
o =appContext.getBean(beanName);
} else {
Class beanClazz =getClassInstance(beanName);
o = buildBean(beanClazz,extraContext);
}