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的更多相关文章

  1. spring学习笔记(一) Spring概述

    博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...

  2. Java架构师之路 Spring学习笔记(一) Spring介绍

    前言 这是一篇原创的Spring学习笔记.主要记录我学习Spring4.0的过程.本人有四年的Java Web开发经验,最近在面试中遇到面试官总会问一些简单但我不会的Java问题,让我觉得有必要重新审 ...

  3. Spring学习笔记之五----Spring MVC

    Spring MVC通常的执行流程是:当一个Web请求被发送给Spring MVC Application,Dispatcher Servlet接收到这个请求,通过HandlerMapping找到Co ...

  4. Spring 学习笔记(2) Spring Bean

    一.IoC 容器 IoC 容器是 Spring 的核心,Spring 通过 IoC 容器来管理对象的实例化和初始化(这些对象就是 Spring Bean),以及对象从创建到销毁的整个生命周期.也就是管 ...

  5. Spring学习笔记--在SpEL中筛选集合

    要用到Spring的util(包括util:list等),xml文件中的beans中需要添加一些有关util的信息: <?xml version="1.0" encoding ...

  6. 1.2(Spring学习笔记)Spring中的Bean

    一.<Bean>的属性及子元素 在1.1中我们对<Bean>有了初步的认识,了解了一些基本用法. 现在我们进一步理解<Bean>属性及子元素. 我们先来看下< ...

  7. Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入

    本节主要内容:       1.实例化Spring容器示例    2.利用Spring容器创建JavaBean对象    3.如何控制Bean实例化    4.利用Spring实现bean属性sett ...

  8. [Spring学习笔记 6 ] Spring JDBC 详解

    项目使用maven管理,pom.xml和项目组织如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...

  9. Spring学习笔记之Spring概述

    概述   Spring是一个java应用最广的开源框架,它是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Deve ...

随机推荐

  1. android动手写控件系列——老猪叫你写相机

    前记:Android这个开源而自由的系统,为我们带来开发便利,同时也埋下太多的深坑.例如调用系统自带的相机就会出现照片丢失,或者其他各种各样的问题.因此,看来自定义一个相机十分的必要. 要自定义相机我 ...

  2. variable_scope和name_scope差别

    先看代码:   #命名空间函数tf.variable_scope()和tf.name_scope()函数区别于使用       import tensorflow as tf       with t ...

  3. Vs2013 坑爹的Target framework问题

    之前的一个项目是使用Vs2008来开发的,因为这段时间家里有事情所以只能跟经理协商在家里来做此项目,因为家里的VS是2013的所以在迁移时没有什么问题 但今天我更改一个类库的文件后重新生成解决方案结果 ...

  4. (转)SVN服务器搭建和使用(三) 附vs2013 svn插件

    转自:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2408089.html vs 2013 svn插件:http://www.visua ...

  5. HTTP协议中源端口和目标端口的问题

    [提问] How is source port for HTTP determined? Is there ever collision in NAT?   I know that when a HT ...

  6. mysql存储过程,游标实例

    CREATE DEFINER=`root`@`%` PROCEDURE `vir`.`task_payment_byonlinedown`()begin declare _mobile varchar ...

  7. it 建设工具一览

    一 基础建设清单 =============================================== 1 jira, 2 maven,nexus   http://blog.csdn.ne ...

  8. Spring 开发环境搭建(二)

    为了方面,直接使用eclipse,创建maven工程,创建成功之后 一.修改pom.xml,为了方面我就把Spring相关的jar包都引用了 <project xmlns="http: ...

  9. 元素高度、宽度获取 style currentStyle getComputedStyle getBoundingClientRect

    1.示例代码 (1)html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  10. 《跟孩子学Python》

    1:Python对象之间的赋值是内容赋值而不是引用赋值 a = ["aaa","bbb","ccc"] b = a print a prin ...