JavaWeb笔记(27)-spring框架中的JdbcTemplate

  1. spring中的操作模板类
1. 操作关系型数据库:
    JdbcTemplate
    HibernateTemplate
2. 操作noSql非关系型数据库的:
    RedisTemplate
3. 操作消息队列:
    JmsTemplate
4. spring中的JdbcTemplate使用:
    * 相关jar包:
        spring-jdbc-5.0.2.RELEASE.jar
        spring-tx-5.0.2.RELEASE.jar         --      与事务控制相关的jar包
        mysql-connector-java.jar
    * 作用:
        用于和数据库交互,实现CRUD操作
    * 创建对象:
        1. 创建数据源(使用IOC控制)
            //使用spring的内置数据源
            DriverManagerDataSource ds = new DriverManagerDataSource();
            ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
            ds.setUrl("xxx");
            ds.setUsername("root");
            ds.setPassword("root");
        2. 创建JdbcTemplate对象,并设置数据源
            JdbcTemplate jt = new JdbcTemplate();
            jt.setDataSource(ds);
        3. 调用成员方法,执行sql语句
            jt.excute("xxx");
  1. spring中基于xml的事务控制
1. 导入相关jar包
    * spring-tx.jar
2. PlatformTransactoinManager接口:
    此接口是spring的事务管理器,他提供了常用的操作事务的方法:
    * TransactionStatus getTransaction(TransactionDefinition definition)
        获取事务状态信息
        TransactionDefinition对象:
            * String getName()              //获取事务对象名称
            * int getIsolationLevel()       //获取事务隔离级别
            * int getPropagationBehavior()  //获取书屋传播行为
            * int getTimeout()              //获取事务超时时间
            * boolean isReadOnly()          //获取事务是否只读(仅查询时才只读)
    * void commit(TransactionStatus status)
        提交事务
    * void rollback(TransactionStatus status)
        回滚事务
3. 接口实现类:
    * DataSourceTransactionManager:使用Spring JDBC或iBatis进行持久化数据时使用
    * HibernateTransactionManager:使用Hibernate版本进行持久化数据时使用
4. 使用步骤:
    a. 导入相关jar包
    b. 配置xml文档:
        /resource/bean.xml中添加事务控制配置:
        <!--
            (需要导入约束:aop,tx,context)
            1. 配置事务管理器
            2. 配置事务通知
                使用tx命名空间标签tx:advice
                属性:
                    id:给事务通知起一个id标识
                    transaction-manager:给事务通知指定事务管理器的id
            3. 配置AOP
                1. 配置通用切入点表达式
                2. 建立切入点和事务通知的对应关系
            4. 配置事务的属性
                在tx:advice标签内部,使用tx:method标签
                属性:
                    name:业务层接口的方法名
                    isolation:用于指定事务的隔离级别,默认值为DEFAULT表示使用数据库的隔离级别
                    propagation:用于指定事务的传播行为,默认为REQUIRED表示一定会有事务(增删改)
                                                         查询可以设为SUPPORTS
                    read-only:用于指定事务是否只读,只有查询方法才能设置为true。默认为false
                    timeout:设置事务的超时时间,默认为-1表示不设置,设置时单位为秒
                    rollback-for:用于指定一个异常,当出现该异常时回滚,其他异常不回滚
                    no-rollback-for:用于指定一个异常,当出现该异常时不回滚,其他异常时回滚
        -->
        <!--配置事务管理器-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!--注入数据源-->
            <property name="dataSource" ref="dataSource"></property>
        </bean>
        <!--配置事务的通知-->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
            <!--除查询方法外的方法,都将匹配到*的配置-->
            <tx:method name="*" propagation="REQUIRED" read-only="false"></tx:method>
            <!--查询方法遵循命名规范findXXX时,将匹配find*的配置-->
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"></tx:method>
        </tx:advice>
        
        <!--配置AOP-->
        <aop:config>
            <!--配置切入点表达式-->
            <aop:pointcut id="pt1" expression="execution(execution(* cn.mysilent.service.impl.*.*(..)))">
            </aop:pointcut>
            <!--配置切入点表达式和事务通知的对应关系-->
            <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"></aop:advisor>
        </aop:config>
  1. spring中基于注解的事务控制
1. 使用步骤:
    a. 导入相关jar包
    b. 配置xml文档:
        /resource/anno_bean.xml中添加基于注解的事务控制配置:
        <!--
            (需要导入约束:aop,tx,context)
            1. 配置需要扫描注解的包
                在业务层上添加@Service注解
                在持久层上添加@Repository注解
            2. 配置JdbcTemplate并注入
            3. 配置事务管理器
            4. 开启spring对注解事务的支持
                使用<tx:annotatoin-driven>标签
                属性:
                    transaction-manager:给事务通知指定事务管理器的id
            3. 在需要事务支持的地方(业务层上)使用@Transactional
                可以定义在业务层的方法类上,也可以具体定义到方法上
                例如:
                    在业务层类上设置readOnly属性为true,而在增删改的方法上设置readOnly属性为false
                    在业务层类上设置propagation属性为REQUIRED,而在增删改的方法上设置propagation属性为SUPPORTS
            4. 配置事务的属性
                设置@Transactional注解的属性
                属性:
                    isolation:用于指定事务的隔离级别,默认值为DEFAULT表示使用数据库的隔离级别
                    propagation:用于指定事务的传播行为,默认为REQUIRED表示一定会有事务(增删改)
                                                         查询可以设为SUPPORTS
                    read-only:用于指定事务是否只读,只有查询方法才能设置为true。默认为false
                    timeout:设置事务的超时时间,默认为-1表示不设置,设置时单位为秒
                    rollback-for:用于指定一个异常,当出现该异常时回滚,其他异常不回滚
                    no-rollback-for:用于指定一个异常,当出现该异常时不回滚,其他异常时回滚
        -->
        
        <!--配置事务管理器-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <!--注入数据源-->
            <property name="dataSource" ref="dataSource"></property>
        </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值