一、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. 判断sql是否存在特定的对象

    1 判断数据库是否存在if exists (select * from sys.databases where name = '数据库名') drop database [数据库名] 2 判断表是否存 ...

  2. kotlin语法

    https://try.kotlinlang.org/#/Examples/Hello,%20world!/Simplest%20version/Simplest%20version.kt /** * ...

  3. easyui window窗口 不垂直居中

    $('#hotelDetailWrap').window({ width: 1040, height: 160, collapsible: false, minimizable: false, max ...

  4. 【阿里云产品公测】云引擎ACE公测感受

    听说阿里云ACE开始公测了,怀着激动的心情赶紧试用了一下. 这是我用ACE做出来的效果:http://haoyuming.aliapp.com/ 大家点点看看啊 A*W/Q<~I   :eSwX ...

  5. 【Machine Learning】监督学习、非监督学习及强化学习对比

    Supervised Learning Unsupervised Learning Reinforced Learning Goal: How to apply these methods How t ...

  6. 制作rpm安装包

    1.安装rpmbuild软件 sudo apt-get install rpmbuild2.配置工作路径 在制作 rpm 包之前,首先要配置工作路径,也就是制作 rpm 包所在的目录.制作 rpm 包 ...

  7. Elk and nginx and redis 干货

    ELKStack ELKStack即Elasticsearch + Logstash + Kibana.日志监控和分析在保障业务稳定运行时,起到了很重要的作用.比如对nginx日志的监控分析,ngin ...

  8. ES6/ES2015常用知识点和概念

    越来越多的开源库开始使用ES2015来构建代码了,大家知道ES6=ES2015,ES6在2015年被ECMAScript标准化组织approve,各大浏览器厂商要完全支持ES6的强大功能还须一些时日, ...

  9. QT控件大小的方法

    http://blog.csdn.net/liang19890820/article/details/51986284

  10. 学习Road map Part 01 数学

    方法: 结合编程软件 matlab / octave / python / maxima / ruby 线性代数 向量.行列式 线性方程组 LU 分解 特征值.对角化 特征值算法