Spring学习笔记(3)之Spring对JDBC的支持
来源:互联网 发布:淘宝追加评价在哪 编辑:程序博客网 时间:2024/06/07 01:33
Spring对JDBC的支持
使用JdbcTemplate跟新数据库
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<Employee> rowMapper,Object... args)
Ø 其中的 RowMapper 指定如何去映射结果集的行,常用的实现类为 BeanPropertyRowMapper
Ø 使用 SQL 中列的别名完成列名和类的属性名的映射. 例如 last_name lastName
Ø 不支持级联属性.JdbcTemplate 到底是一个 JDBC 的小工具, 而不是 ORM 框架
c) 查询实体类的集合:jdbcTemplate.query()。注意调用的不是 queryForList 方法
使用NamedParameterJdbcTemplate
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) 配置事务管理器:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource/">
</bean>
2) 启用事务注解
<tx:annotation-driven transaction-manager="transactionManager"/>
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 注解中定义.超时属性以秒为单位来计算.
Spring与Hibernate整合
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
Spring整合Struct2
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 文件中加入如下配置:
<!-- 配置 Spring 配置文件的名称和位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 启动 IOC 容器的 ServletContextListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
2. Spring 如何整合 Struts2?
1) 整合目标 ? 使 IOC 容器来管理 Struts2 的 Action!
2) 如何进行整合 ?
a) 正常加入 Struts2
b) 在 Spring 的 IOC 容器中配置 Struts2 的 Action
注意: 在 IOC 容器中配置 Struts2的 Action 时, 需要配置 scope 属性, 其值必须为 prototype
<bean id="personAction"
class="com.atguigu.spring.struts2.actions.PersonAction"
scope="prototype">
<propertyname="personService"ref="personService"></property>
</bean>
c) 配置 Struts2 的配置文件: action 节点的 class 属性需要指向 IOC 容器中该 bean 的 id
<action name="person-save" class="personAction">
<result>/success.jsp</result>
</action>
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);
}
- Spring学习笔记(3)之Spring对JDBC的支持
- spring对JDBC的支持 学习笔记
- J2EE系列之Spring4学习笔记(九)--Spring对JDBC的支持
- J2EE系列之Spring4学习笔记(十)--Spring对JDBC的支持
- [学习小结]Spring对JDBC的支持
- Spring之对JDBC的支持
- Spring学习笔记(七)Spring对Dao的支持
- spring学习总结(十一):spring 对 JDBC 的支持
- Spring之四 Spring对JDBC的支持
- Spring对JDBC的支持
- Spring对JDBC的支持
- Spring对JDBC的支持
- spring对JDBC的支持
- Spring对jdbc的支持
- Spring对JDBC的支持
- Spring对jdbc的支持。
- Spring对JDBC的支持
- Spring对Jdbc的支持
- Struts2学习笔记
- 链表基本操作
- Hibernate学习笔记
- php商城高并发下订单模拟
- Spring学习笔记
- Spring学习笔记(3)之Spring对JDBC的支持
- Windows设置眼睛保护色
- POJ 1017 Packets(贪心)
- Unity学习之路(1)
- LeetCode 111 Minimum Depth of Binary Tree(二叉树的最短深度)(BT、DFS)(*)
- 高效地将wikidata导入neo4j(附代码)
- Deep Reinforcement Learning 深度增强学习资源
- JAVA多线程之单例模式
- NAND FLASH和NOR FLASH的介绍