JdbcTemplate&声明式事务控制

本文详细介绍了Spring框架中的JdbcTemplate,它是对JDBC API的简单封装,简化了数据库操作。文章涵盖了JdbcTemplate的使用步骤,包括导入依赖、创建数据源、执行CRUD操作,并展示了如何进行编程式和声明式事务控制。对于声明式事务,讲解了基于XML和注解的两种方式。此外,还提到了事务的隔离级别和传播行为。
摘要由CSDN通过智能技术生成

JdbcTemplate

1. 概述

JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。

2. 开发步骤

1. 导入spring-jdbc和spring-tx坐标
	    <dependency>
		      <groupId>org.springframework</groupId>
		      <artifactId>spring-jdbc</artifactId>
		      <version>5.1.5.RELEASE</version>
	    </dependency>
	    <dependency>
		      <groupId>org.springframework</groupId>
		      <artifactId>spring-tx</artifactId>
		      <version>5.1.5.RELEASE</version>
	    </dependency>

2. 创建数据库表和实体
3. 创建JdbcTemplate对象
4. 执行数据库操作

3. Spring产生JdbcTemplate模板对象

.配置如下:
	    <context:property-placeholder location="classpath:jdbc.properties"/>

	    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	        <property name="driverClass" value="${jdbc.driver}"/>
	        <property name="jdbcUrl" value="${jdbc.url}"/>
	        <property name="user" value="${jdbc.username}"/>
	        <property name="password" value="${jdbc.password}"/>
	    </bean>
	
	    <bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
	        <property name="dataSource" ref="dataSource"/>
	    </bean>

4. 常用CRUD操作

1. 增
public void TestSave() {
    int row = jdbcTemplate.update("insert into account values(?, ?)", "wangwu", 2323);
    System.out.println(row);
}
2. 删
public void TestDelete() {
    int row = jdbcTemplate.update("delete from account where name=?", "wangwu");
    System.out.println(row);
}
3. 改
public void TestUpdate() {
    int row = jdbcTemplate.update("update account set money=? where name=?", 5000, "zhangsan");
    System.out.println(row);
}
4.1 查所有行
public void TestQueryAll() {
    List<Account> accountList = jdbcTemplate.query("select * from account", new BeanPropertyRowMapper<Account>(Account.class));
    for (Account account : accountList) {
        System.out.println(account);
    }
}
4.2 查单行
public void TestQueryOne() {
    Account account = jdbcTemplate.queryForObject("select * from account where name=?", new BeanPropertyRowMapper<Account>(Account.class), "zhangsan");
    System.out.println(account);
}
4.3 聚合查询
public void TestQueryCount() {
    Long count = jdbcTemplate.queryForObject("select count(*) from account", Long.class);
    System.out.println(count);
}

声明式事物控制

1. 编程式事务控制相关对象

1. PlatformTransactionManager
方法说明
TransactionStatus getTransaction(TransactionDefination defination)获取事物的状态信息
void commit(TransactionStatus status)提交事务
void rollback(TransactionStatus status)回滚事务
2. TransactionDefinition
	事物隔离级别
		* ISOLATION_DEFAULT
		* ISOLATION_READ_UNCOMMITTED
		* ISOLATION_READ_COMMITTED
		* ISOLATION_REPEATABLE_READ
		* ISOLATION_SERIALIZABLE
	事物传播行为
		* REQUIRED:如果当前没有事物,就新建一个事务,如果已经存在一个事物中,加入到这个事物中。
		* SUPPORTS:支持当前事物,如果当前没有事物,就以非事务方式执行
		* TIMEOUT:默认值是-1,没有超时限制。如果有,以秒为单位进行设置
		* READONLY:建议查询时设置为只读
方法说明
int getIoslationLevel()获得事务的隔离级别
int getPropogationBehavior获得事物的传播行为
int getTimeout获得超时时间
boolean isReadOnly是否只读
3. TransactionStatus
方法说明
boolean hasSavepoint是否存储回滚点
boolean isCompleted事务是否完成
boolean isNewTransaction是否是新事务
boolean isRollbackOnly事务是否回滚

2. 基于XML的声明式事务控制

  • 作用

      事务管理不侵入开发的组件;在不需要事务管理的时候,只要在设定文件上修改一下,即可移去事务管理服务。
    
  • 实现:

      1. 引入tx命名空间和约束地址
      2. 配置事务增强
          <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
              <property name="dataSource" ref="dataSource"/>
          </bean>
      
          <tx:advice id="txAdvice" transaction-manager="dataSourceTransactionManager">
              <tx:attributes>
                  <tx:method name="*"/>
              </tx:attributes>
          </tx:advice>
          
      3. 配置事务AOP织入
          <aop:config>
              <aop:advisor advice-ref="txAdvice" pointcut="execution(void cn.spring.tx.service.impl.*.*(..))"/>
          </aop:config>
    
  • 切点方法的事务参数的配置
    <tx:method name=“transfer” isolation=“REPEATABLE_READ” propagation=“REQUIRED” timeout="-1" read-only=“false”>
    参数:
    * name:切点方法名称
    * isolation:事务的隔离级别
    * propogation:事务的传播行为
    * timeout:超时时间
    * read-only:是否只读

3. 基于注解的声明式事务控制

  1. 开发步骤

     1. 编写Dao层代码
     2. 编写Service层代码
     3. 编写applicationContext.xml配置文件
    
	<!-- 组件扫描-->
	<context:component-scan base-package="cn.spring.tx"/>
	<!--事物的注解驱动-->
	<tx:annotation-driven transaction-manager="dataSourceTransactionManager">
  1. 深入解析

     1. @Transactional标注在需要进行事务控制的类或者方法上修饰,注解可用的属性通XML配置方式
     2. @Transactiona注解在使用类上,那么该类中未使用@Transactional注解的方法都是用这一套参数配置
     3. @Transactiona使用在方法上,不同的方法可以采用不同的事务参数配置
     4. XML配置文件中要配置事务的注解驱动<tx:annotation-driven />
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值