一、JdbcTemplate(jdbc模版--抽取的工具)

web阶段DBUtils:
        QueryRunner runner = new QueryRunner(dataSource);
        runner.update()/query();
        
    spring的JdbcTemplate
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(dataSource);
        jdbcTemplate.update()/query();
    //查询全部数据
        jdbcTemplate.query("select * from table",newBeanPropertyRowMapper<Pojo>(Pojo.class));
    //查询单个实体
        jdbcTemplate.queryForObject("select * from table where name=?", new BeanPropertyRowMapper<Pojo>(Pojo.class), "tom");
    //查询单个值
        jdbcTemplate.queryForObject("select count(*) from table ", new BeanPropertyRowMapper<Pojo>(Pojo.class));
    开发步骤:
        Spring-jdbc.jar        内部封装JdbcTemplate
        Spring-tx.jar        JdbcTemplate使用事务相关API
        connector.jar        数据库驱动
        dataSource.jar        数据源的jar包

二、声明式事务控制

1、复习事务相关概念
        1、事务的特性ACID
            原子性
            一致性
            隔离性
            持久性
        2、事务并发产生的问题
            脏读:A事务读取到了B事务尚未提交的数据
            不可重复读:一个事务中多次读取到的数据的内容不一致
            虚读/幻读:一个事务中多次读取数据的条数不一致
        3、事务的隔离级别(isolation)
            read uncommitted: 都不能解决  基本没人使用
            read committed:解决脏读    oracle的默认隔离级别
            repeatable read:解决脏读和不可重复度    mysql的默认隔离级别
            serializable:串行化  都能解决
        
    2、Spring提供编程式事务控制的API
        1、PlatformTransactionManager(需要配置):平台事务管理器(接口)
            规定事务控制的行为:开启事务、提交事务、回滚事务...
            
            不同的技术 事务控制的方式不一样:
                jdbc技术:
                    开启事务:conn.setAutocommit(false)
                    提交事务: conn.commit();
                    回滚事务: conn.rollback();
                    
                hibernate技术:
                    开启事务: session.beginTransaction();
                    提交事务: transaction.commit();
                    回滚事务: transaction.rollback();
                    
            常用的平台事务管理器实现:
                jdbc技术:DataSourceTransactionManager
                hibernate技术:HibernateTransactionManager
                
        2、TransactionDefination(需要配置):事务定义对象
            该对象作用封装一些事务的相关的属性的:事务的隔离级别、事物的传播行为、事务的超时时间、事务是否只读
                事务的隔离级别:isolation
                事物的传播行为:propogation
                    传播行为的作用:业务方法调用业务方法时 事务的嵌套问题的
                    
                事务的超时时间:timeout
                事务是否只读:read-only
        3、TransactionStatus:事物的状态对象
            该对象是封装不同的阶段,事务不同的状态信息的

3、基于xml方式声明式事务控制(重点)

底层就是aop
        
        切点:service层业务方法
        增强:事务增强
        切面:通过配置方式进行织入
        
        开发步骤:
            1、导入额外jar:spring-tx.jar
                注意:导入spring的基本开发包和aop包
            2、定义业务类(service),配置到spring容器中
                业务类中的方法就是切点
                
                public class AccountServiceImpl implements AccountService
                    public void transfer(String outMan, String inMan, double money)
                    
                <bean id="accountService" class="com.jjy.service.impl.AccountServiceImpl">
                    <property name="accountDao" ref="accountDao"></property>
                </bean>
                
            3、配置增强
                <!-- 配置平台事务管理器 -->
                <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                    <property name="dataSource" ref="dataSource"></property>
                </bean>
                
                <!-- 配置事务的增强 -->
                <tx:advice id="txAdvice" transaction-manager="transactionManager">
                    <tx:attributes>
                        <tx:method name="*"/>
                    </tx:attributes>
                </tx:advice>
                
            
            4、配置切点与事务增强的aop织入
                <!-- 配置事务的aop织入 -->
                <aop:config>
                    <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.jjy.service.impl.*.*(..))"/>
                </aop:config>

4、基于注解方式的声明式事务控制

开发步骤:
            1、导入额外jar:spring-tx.jar
                注意:导入spring的基本开发包和aop包
            2、定义业务类(service),配置到spring容器中
                业务类中的方法就是切点
                
                @Service("accountService")
                public class AccountServiceImpl implements AccountService
                    
                
            
            3、配置切点与事务增强的aop织入
                @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED)
                public void transfer(String outMan, String inMan, double money)
                
            4、在xml中进行组件扫描和事务的注解驱动
                <!-- 组件扫描 -->    
                <context:component-scan base-package="com.jjy"></context:component-scan>
                
                <!-- 事务的注解驱动 -->
                <tx:annotation-driven transaction-manager="transactionManager"/>

Spring知识点小结(四)的更多相关文章

  1. Spring知识点小结(一)

    一.Spring的简介 1.spring是一个full-stack轻量级开源框架    2.spring的两大核心        IoC: inverse of control  控制反转:反转是对象 ...

  2. Spring知识点小结汇总

    Spring部分 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建UserService对象的控 ...

  3. Spring知识点小结(三)

    一.aop的简介 aop:面向切面编程    aop是一种思想,面向切面编程思想,Spring内部提供了组件对aop进行实现    aop是在运行期间使用动态代理技术实现的思想    aop是oop延 ...

  4. Spring知识点小结(二)

    一.配置非自定义的Bean(数据源DataSource模型) DBCP数据源:        导入dbcp的jar包:dbcp+pool+connector                代码实现:  ...

  5. Spring知识点总结(四)之SpringAOP基础

        1. Spring aop中的基本概念        • 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候.在Spring AOP中,一个连接 ...

  6. Spring知识点总结(四)之SpringAOP基础 - 代理设计模式

        1. 分析程序中存在的问题(高内聚,低耦合)        通过springIOC DI) 以及注解的使用,成功解决了在程序中层与层之间出现的耦合的问题,但是在很多地方仍然存在非该层应该实现的 ...

  7. Hibernate知识点小结(四)--JPA

    一.jpa的简介和入门 JPA:Java Persistence API,接口规范    Hinernate内部为JPA规范提供实现        开发步骤(EntityManager):       ...

  8. Struts2知识点小结(四)--拦截器与注解开发

    一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...

  9. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

随机推荐

  1. css 样式表集合

    说到前端不得不说一下css样式 css样式是用来装饰我们的html让整个页面显得更丰富多彩,所以我们要熟悉各种css样式,本人搜集了一下 供大家参考一下 字体属性:(font) 大小 {font-si ...

  2. hive中的bucket table

    前言 bucket table(桶表)是对数据进行哈希取值,然后放到不同文件中存储 应用场景 当数据量比较大,我们需要更快的完成任务,多个map和reduce进程是唯一的选择.但是如果输入文件是一个的 ...

  3. 【阿里云产品公测】OpenSearch初体验

    OpenSearch是一个非常有意义的功能,对于很多数据量较大的站点, SF2<   如果搜索功能自己做的话,或者用数据库里的查询语句,首先效率低下,而且占用资源. ); <Le6   另 ...

  4. 数据结构----线性表顺序和链式结构的使用(c)

    PS:在学习数据结构之前,我相信很多博友也都学习过一些语言,比如说java,c语言,c++,web等,我们之前用的一些方法大都是封装好的,就java而言,里面使用了大量的封装好的方法,一些算法也大都写 ...

  5. geoserver 知识小计

    http://localhost:8888/geoserver/wms?service=WMS&request=GetCapabilities 这个地址用于获取发布的WMS服务的属性,用于获取 ...

  6. C++ 11: function & bind 使用示例

    #include <functional> #include <iostream> struct Foo { Foo(int num) : num_(num) {} void ...

  7. Canvas杂谈

    最近在看一些关于Canvas的知识...这篇文章主要是用来记录学习中遇见的一些问题...以及难以理解的一些东西.. 转帖请注明出处:http://www.cnblogs.com/Troy-Lv5/p/ ...

  8. MySQL5.7的组提交与并行复制

    从MySQL5.5版本以后,开始引入并行复制的机制,是MySQL的一个非常重要的特性. MySQL5.6开始支持以schema为维度的并行复制,即如果binlog row event操作的是不同的sc ...

  9. 使用Python批量合并PDF文件(带书签功能)

    网上找了几个合并pdf的软件,发现不是很好用,一般都没有添加书签的功能. 又去找了下python合并pdf的脚本,发现也没有添加书签的功能的. 于是自己动手编写了一个小工具,使用了PyPDF2. 下面 ...

  10. 【Leetcode】【Medium】Gray Code

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...