一、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. sass判断语句

    @if判断 @if可一个条件单独使用,也可以和@else结合多条件使用 scss.style css.style 三目判断 语法为:if($condition, $if_true, $if_false ...

  2. 03_ActiveMQ安全机制

    [ActiveMQ安全机制] [ ActiveMQ的web管理界面 ] 地址  http://127.0.0.1:8161/admin ActiveMQ管理控制台使用jetty部署,所以需要修改密码, ...

  3. Tomcat启动报错java.net.AbstractPlainSocketImpl(java/net/AbstractPlainSocketImpl.java:178:-1)Struts在网络复杂情况下启动报错解决办法

    SSH项目 在网络复杂的情况(具体规律未知)下,Tomcat启动时,报如下错误: [ERROR] 2014-08-12 14:52:58,484 [org.apache.struts2.dispatc ...

  4. js if语句只写一个参数是什么意思?

    如 var a=0:if(!a){...}; avascript中以下值会被转换为false false undefined null 0 -0 NaN ""

  5. Java任务调度框架Quartz入门

    Quartz[kwɔːts]:石英,其框架和名字一样简单朴素又不失魅力,在Java程序界,Quartz大名鼎鼎,很多Java应用几乎都集成或构建了一个定时任务调度系统,Quartz是一个定时任务调度框 ...

  6. ASPNET MVC Error 500.19

    今天创建了一个新的ASPNET MVC 项目部署到本地, 生成成功后在浏览器中输入URL却发现报这个错 参照下面的文章我给IIS_IUSRS和IUSR(我比较懒直接everyone)赋予虚拟目录读写权 ...

  7. 【Leetcode】【Medium】Sqrt(x)

    Implement int sqrt(int x). Compute and return the square root of x. 解题思路1,o(log(n)): 像这种从初始遍历查找匹配的任务 ...

  8. 最短路径-Dijkstra算法与Floyd算法

    一.最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1    ADE:2   ADCE:3   ABCE:3 ②在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径 ...

  9. 设计模式:备忘录(Memento)模式

    设计模式:备忘录(Memento)模式 一.前言   备忘录模式用于保存和恢复对象的状态,相信大家看过我前面的拙作就会想到原型模式也能保存一个对象在某一个时刻的状态,那么两者有何不同的呢?原型模式保存 ...

  10. Spring AOP 的切点切在Controller上没有起作用的问题。

    做下笔记,以防忘记. 在Spring MVC 中使用面向切面编程,感觉所有的配置.切面.切点的编写都没有写错,但是当切点切在@Controller注解的类的方法上时就不起作用.当切点切在的其他的非@C ...