[Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction
1.Spring中的数据库支持
把具有相同功能的代码模板抽取到一个工具类中。
2.关于jdbc template的应用
jdbcTemplate模板操作类,把访问jdbc的模板抽取到template中,使用模板类,可以不用管有关连接管理,关闭等细节,只关注核心业务代码,外围事情交给 Spring的模板去处理。
3.Spring框架关于对数据库的支持
A、统一的事务平台trasaction Management
B、提供Dao support,support封装了有关template.
public class SpringJdbcTemplateBestSupport extends JdbcDaoSupport implements IpersonDao {
public void save(Person p) {
//使用spring的jdbc Mapping工具,简化jdbc的调用
String sql = "insert into person(name,age) values('" + p.getName() + "'," + p.getAge() + ")";
System.out.println("save:" + sql);
getJdbcTemplate().update(sql);
}
}
C、提供对jdbc Mapping工具,简化了jdbc的调用 。
@SuppressWarnings({ "rawtypes", "unchecked" })
public List<Person> loadAll() {
return getJdbcTemplate().query("select * from person", new RowMapper() {
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person person = new Person();
person.setId(rs.getLong("id"));
person.setAge(rs.getInt("age"));
person.setName(rs.getString("name"));
return person;
}
});
}
D、把数据访问异常统一 封装起来。DataAccessException
E、整合其它ormapping框架
四、事务处理
1.事务概述
atomic(原子性):要么发生,要么都不发生
consistent(一致性):数据应该不被破坏 两个人同时访问数据库,其中一个人对数据库进行了操作,另一个人看到的数据应当保持刚开始的状态,不受到影响。
isolate(隔离性):用户间操作不相混淆
Durable(持久性):永久保存,例如保存到数据库等
jdbc事务的调用
Connection conn;
conn.setAutoCommit(false);
操作1.。
操作2.。
conn.commit();
hiberante
session.save(...);
tx.commit();
基于Spring操作事务的应用方式,编程式事务/声明式事务
2.Spring中的事务管理API
1)PlatformTransactionManager 事务管理器接口
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
2)TransactionStatus 事务状态
isNewTransaction() 是否是新事务
hasSavepoint() 保存点,oracle
void flush();刷新
3.声明式事务管理使用----基于xml
把事务控件有关的操作在配置文件中进行说明,代码中不要任何事务控制的代码
Spring中事务的传播:REQUIRED(需要事务,对会引起数据更新的方法)/SUPPORTSA(支持事务,对于查询类的就
去)
<!-- 配置事务 -->
<!-- 配置一个事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="mydataSource"></property>
</bean>
<!-- 配置事务通知 -->
<tx:advice id="transferServieAdvice" transaction-manager="transactionManager">
<!-- 事务属性 -->
<tx:attributes>
<tx:method name="transferMoney" propagation="REQUIRED" />
<tx:method name="saveMoney" propagation="REQUIRED" />
<tx:method name="takeMoney" propagation="REQUIRES_NEW" />
<!-- 查询类的方法用下面的配置 ,不用强制开事务,则可以提升性能 -->
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
<!-- <tx:method name="*" propagation="REQUIRED" />
--> </tx:attributes>
</tx:advice>
<aop:config>
<!-- 增强,对哪一些切一点(pointcut)进行什么样(advice-ref)的事务增强。 -->
<aop:advisor advice-ref="transferServieAdvice" pointcut="execution(* com.amos..*
(..))" />
</aop:config>
4.声明式事务管理使用----基于注解
1)在配置文件 中告诉spring通过注解去扫描业务Bean的事务配置信息。
<!-- 配置事务 -->
<!-- 配置一个事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="mydataSource"></property>
</bean>
<!-- 表示事务的配置均在注解中 -->
<tx:annotation-driven/>
2)、写业务Bean时,在需要开启事务的Bean上或者方法使用@Transactional标签来指定事务配置的特性。
@Transactional(propagation=Propagation.REQUIRES_NEW)
public void saveMoney(String name, Double money) {
......
}
@Transactional(propagation=Propagation.SUPPORTS)
public void takeMoney(String name, Double money) {
......
}
事务是定义在业务层!hibernate中把事务写在持久层会导致许多问题。
代码实现可参考https://github.com/amosli/lspring_jdbc.git
[Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction的更多相关文章
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- Java架构师之路 Spring学习笔记(一) Spring介绍
前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...
- Spring学习笔记之五----Spring MVC
Spring MVC通常的执行流程是:当一个Web请求被发送给Spring MVC Application,Dispatcher Servlet接收到这个请求,通过HandlerMapping找到Co ...
- Spring 学习笔记(2) Spring Bean
一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...
- Spring学习笔记--在SpEL中筛选集合
要用到Spring的util(包括util:list等),xml文件中的beans中需要添加一些有关util的信息: <?xml version="1.0" encoding ...
- 1.2(Spring学习笔记)Spring中的Bean
一.<Bean>的属性及子元素 在1.1中我们对<Bean>有了初步的认识,了解了一些基本用法. 现在我们进一步理解<Bean>属性及子元素. 我们先来看下< ...
- Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入
本节主要内容: 1.实例化Spring容器示例 2.利用Spring容器创建JavaBean对象 3.如何控制Bean实例化 4.利用Spring实现bean属性sett ...
- [Spring学习笔记 6 ] Spring JDBC 详解
项目使用maven管理,pom.xml和项目组织如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...
- Spring学习笔记之Spring概述
概述 Spring是一个java应用最广的开源框架,它是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Deve ...
随机推荐
- 大数据开发实战:Hive表DDL和DML
1.Hive 表 DDL 1.1.创建表 Hive中创建表的完整语法如下: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [ (col_nam ...
- JAVA-安装apache tomcat服务器
下载地址:http://tomcat.apache.org/ 选择需要下载的版本 下载windows service installer,找到文件双击进行安装 next i agree next ne ...
- ARM 汇编的mov操作立即数的疑问
1. 因为对arm汇编有些指令还不能理解,特别是一些相似功能指令间的区别.偶然在网上搜到"faq ARM assembly",其中描述的几个问题还是值得好好研究一下. 2. 慢慢的 ...
- 理解JavaScript函数参数
前面的话 javascript函数的参数与大多数其他语言的函数的参数有所不同.函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数. arguments javascri ...
- codeforces 551 C GukiZ hates Boxes
--睡太晚了. ..脑子就傻了-- 这个题想的时候并没有想到该这样-- 题意大概是有n堆箱子从左往右依次排列,每堆ai个箱子,有m个人,最開始都站在第一个箱子的左边, 每个人在每一秒钟都必须做出两种选 ...
- Android改动包名称规范方法
第一步.在项目上右键,选择android tools->rename application package,输入须要改为的名称,然后选择须要替换的文件里的包名.这里仅改动了project中包括 ...
- SWIFT学习笔记05
1.Swift 无需写break,所以不会发生这样的贯穿(fallthrough)的情况.2.//用不到变量名,可用"_"替换 for _ in 1...power { answe ...
- JavaScript 之 解码类似eval(function(p,a,c,k,e,d){}))的JavaScript代码
这里以解码百度访问统计代码构造函数为示例: 以下为要统计JavaScript源码:红色加粗部分将是要修改的地方. eval(function(p,a,c,k,e,d){e=function(c){re ...
- 【树莓派】树莓派上刷android系统
这位前辈之前做了基于android2.3版本刷入树莓派的事情,http://blog.csdn.net/lichwei1983/article/details/44082669 1.android 镜 ...
- 使用PyInstaller打包Python角本为exe程序
一.经过测试 在Windows平台请使用Windows平台的pyinstaller,Linux平台请使用Linux平台的Pyinstall角本. 二.命令如下: pyinstaller -F --ic ...