一、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. Bzoj1498&1416: [NOI2006]神奇的口袋

    什么鬼双倍经验题??? Sol 考虑在第\(k\)次摸到\(y\)的概率 如果上次摸到\(y\),目前有\(sum\)个球,\(y\)有\(a[y]\)个,那么概率就是\(\frac{a[y]+d}{ ...

  2. Python-MRO和C3算法

    一. python多继承 在前面的学习过程中,我们已经知道了python中类与类之间可以有继承关系,当出现x是一种y的时候就可以使用继承关系.即'is-a'关系,在继承关系中子类自动拥有父类中除了私有 ...

  3. webapi 开启gzip压缩

    1.nuget安装Microsoft.AspNet.WebApi.Extensions.Compression.Server 2.global.asax.cs里引用System.Net.Http.Ex ...

  4. JS函数动作分层结构详解及Document.getElementById 释义 js及cs数据类型区别 事件 函数 变量 script标签 var function

    html +css 静态页面 js     动态 交互   原理: js就是修改样式, 比如弹出一个对话框. 弹出的过程就是这个框由disable 变成display:enable. 又或者当鼠标指向 ...

  5. SQL 截取字符

    select SUBSTRING('123,abcdefg',charindex(',','123,abcdefg',0)+1,LEN('123,abcdefg')-charindex(',','12 ...

  6. Installing TensorFlow on Ubuntu

    1.安装方法有4种,官方推荐是第一种. virtualenv(官方推荐)    "native" pip    Docker    Anaconda 2.基于virtualenv的 ...

  7. MySQL半同步复制的搭建和配置原理

    半同步复制: 什么是半同步复制?我们知道在默认情况下,MySQL的复制是异步的,这意味着主服务器及其从服务器是独立的.异步复制可以提供最佳的性能,因为主服务器在将更新的数据写入它的二进制日志(Binl ...

  8. cocos2d-x 3.1 编译脚本android-build.py

    写在前面: 前段时间下载了cocos2d-x 3.1,按照官网的教程,配置环境,编译打包,走了一遍,感觉不错,顺便发现其中用了很多python的脚本文件,比如今天要说的android-build.py ...

  9. 对于char *s1 和 char s2[] 的认识

    对于char *s1 和 char s2[] 认识有误区(认为无区别),导致有时出现“难以理解”的错误. char *s1 = "hello"; char s2[] = " ...

  10. yii2框架安装运行init.bat报错php.exe不是内部或外部命令

    在安装yii2框架的时候,遇到一个很纠结的问题.就是当我把安装包下载下来之后,在公司的电脑安装可以正常,当我回家用自己的电脑安装就报错,提示 php.exe 不是内部或外部命令,也不是可运行的程序.这 ...