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. 文本相似度-BM25算法

    BM25 is a bag-of-words retrieval function that ranks a set of documents based on the query terms app ...

  2. Log4net PatternLayout 参数

    Log4net PatternLayout 参数 来自: https://logging.apache.org/log4net/log4net-1.2.13/release/sdk/log4net.L ...

  3. [Algorithm] Delete a node from Binary Search Tree

    The solution for the problem can be divided into three cases: case 1: if the delete node is leaf nod ...

  4. [Angular] Use Angular components in AngularJS applications with Angular Elements

    When migrating AngularJS (v1.x) applications to Angular you have different options. Using Angular El ...

  5. Direct2D教程VI——转换(Transform)

    目前博客园中成系列的Direct2D的教程有 1.万一的 Direct2D 系列,用的是Delphi 2009 2.zdd的 Direct2D 系列,用的是VS中的C++ 3.本文所在的 Direct ...

  6. (转)C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析

    C/C++ 程序设计员应聘常见 面试笔试 试题深入剖析 http://www.nowcoder.com/discuss/1826?type=2&order=0&pos=23&p ...

  7. android中RecyclerView控件实现长按弹出PopupMenu菜单功能

    之前写过一篇文章:android中实现简单的聊天功能 现在是在之前功能的基础上,添加一个长按聊天记录,删除对应聊天记录的功能 RecyclerView控件,没有对应的长按事件,我们需要自己手工添加,修 ...

  8. LintCode: Longest Words

    C++ class Solution { public: /** * @param dictionary: a vector of strings * @return: a vector of str ...

  9. 微信小程序 - loading(组件)

    更新日期: 2019/3/8:首次发布 2019/3/12:增加loadOpacity透明度控制,默认0.5. 以及修改居中方式 Loading 参数: 1. type:loading(必需参数) 2 ...

  10. UART,SPI,IIC的一点理解

    转自:http://bbs.21ic.com/icview-253715-1-1.html UART通用异步收发器,UART是通用的异步传输模式,在它这种基础上加上其他接口或者解码器就衍生出多种异步传 ...