一、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. 01HTMl-<base>标签

    一.base用于定义页面链接的打开方式 <base target="_blank"/> 定义页面链接默认打开方式,base通过target属性告诉浏览器如何打开页面. ...

  2. 拖动条SeekBar

    1TextView tv=(TextView)findViewById(R.id.TV); 2 tv.setMovementMethod(ScrollingMovementMethod.getInst ...

  3. Web前端面试指导(十三):css样式的优先级是怎么样的?

    题目点评 CSS样式的优先级规则给人的感觉总是摸不透,更不用说怎么去表达了,在网络上流传着很多版本,描述的都很复杂也不全面,看了之后还是不满意.我来给大家介绍一个比较系统.全面有比较容易记住的规则吧! ...

  4. angular ng指令

    1.指令 ng-app,ng- 都是angular的指令系统ng-app: ng-app是angular的初始化,一个页面只能有一个ng-app,位置不限制.在页面上加入了这个执行,那么从当前的元素以 ...

  5. linux父子进程问题

    今天遇到一个linux进程启动时指定Max open files不对的问题,导致程序建立socket异常,进而导致fullgc问题,影响正常服务.所以顺带又温习了下linux下的父子进程的特性. 孤儿 ...

  6. python基础(二)--多值参数以及类

    1.多值参数函数 def 函数名(*args , **kwargs): ....... 多值参数函数顾名思义能够传入多个参数,args表示传入的元组,kwargs表示传入的字典 def functio ...

  7. python 面向对象 【进阶】

    多态 多态跟python没有太大关系,因为python本身原生支持多态. def func(arg):          #多态      print (arg) func(1) func(‘pand ...

  8. 一张图看懂CSS cascade, specific, importance, inheritance

    http://www.w3.org/TR/CSS21/cascade.html#inheritance http://www.w3.org/TR/CSS21/cascade.html#cascade ...

  9. jdbc 块提取方式

    最近使用jdbc方式查询数据,保存为csv文件中.当然你可以在pl/sql中直接查出来,copy to excel就好了.但我想通过程序实现 1 @Test 2 public void test() ...

  10. 属性锁TimeLock

    属性锁TimeLock 这是本人所写的几个类,用于对属性设置值时进行锁定与解锁,适用于高逼格动画当中. 源码: TimeLock.h 与 TimeLock.m // // TimeLock.h // ...