zoukankan      html  css  js  c++  java
  • Spring知识点小结(四)

    一、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"/>
        
        
        
        
        
        
        
        
        
        
        
        
        

  • 相关阅读:
    Windows 2003,XP安装Windows Phone 7 狼人:
    Android实例剖析笔记(六) 狼人:
    Android实例剖析笔记(一) 狼人:
    Android NDK带来什么 狼人:
    Windows Phone 7常用资源大集合 狼人:
    Android实例剖析笔记(七) 狼人:
    JDK环境变量配置
    jQuery去掉字符串起始和结尾的空格
    结构型设计模式
    主题:hibernate生成tree(基于注解方式)
  • 原文地址:https://www.cnblogs.com/itworkerlittlewrite/p/9496759.html
Copyright © 2011-2022 走看看