Spring框架(6)--JDBCTemplate的使用和Spring的事务控制

Spring框架中有封装好的JDBCTemplate可以使用,手动创建太麻烦并且没有参考价值,下面只展示通过注解开发的JDBCTemplate的使用代码案例:

使用步骤:

1.导入相关的坐标

使用的是druid链接池:

 1     <dependencies>
 2         <dependency>
 3             <groupId>mysql</groupId>
 4             <artifactId>mysql-connector-java</artifactId>
 5             <version>5.1.47</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>com.alibaba</groupId>
 9             <artifactId>druid</artifactId>
10             <version>1.1.10</version>
11         </dependency>
12         <dependency>
13             <groupId>org.springframework</groupId>
14             <artifactId>spring-context</artifactId>
15             <version>5.0.5.RELEASE</version>
16         </dependency>
17         <dependency>
18             <groupId>org.springframework</groupId>
19             <artifactId>spring-jdbc</artifactId>
20             <version>5.0.5.RELEASE</version>
21         </dependency>
22       
27         <dependency>
28             <groupId>org.aspectj</groupId>
29             <artifactId>aspectjweaver</artifactId>
30             <version>1.8.13</version>
31         </dependency>
32     </dependencies>

2.创建数据库表

自行创建。

3.创建功能实现类

自行创建。

4.配置Spring核心配置文件

 <!--扫描包-->
    <context:component-scan base-package="com.itheima"/>

    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/ssm_spring"/>
        <property name="username" value="root"/>
        <property name="password" value="123"/>
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</bean>

5.创建JDBCTemplate对象并使用

扫描二维码关注公众号,回复: 8176943 查看本文章

在Dao层实现类中通过注解注入获取对象:

 @Autowired
    private JdbcTemplate template;

调用JDBCTemplate的query或者update方法就可以了。

6.测试

自行测试。

重复度跟Spring(4)--注解开发中比较高,所以不详细写步骤了。

Spring的事务控制:

Spring事务控制分为编程式事务控制和声明式事务控制。

编程式事务控制的意思是通过编码来开启事务控制或关闭事务控制。太过于麻烦,了解就行了。

声明式事务控制是通过配置来开启或关闭事务。声明式事务控制又分为基于xml的声明式事务控制和基于注解的声明式事务控制。

编程式事务控制:

编程式事务控制三大对象:

PlatformTransactionManager

TransactionDefinition

TransactionStatus

PlatformTransactionManager 接口是 spring 的事务管理器,它里面提供了我们常用的操作事务的方法。

注意:

PlatformTransactionManager 是接口类型,不同的 Dao 层技术则有不同的实现类,例如:Dao 层技术是jdbc 或 mybatis 时:org.springframework.jdbc.datasource.DataSourceTransactionManager

Dao 层技术是hibernate时:org.springframework.orm.hibernate5.HibernateTransactionManager

TransactionDefinition 是事务的定义信息对象,里面有如下方法:

事务隔离级别

设置隔离级别,可以解决事务并发产生的问题,如脏读、不可重复读和虚读。

ISOLATION_DEFAULT

ISOLATION_READ_UNCOMMITTED

ISOLATION_READ_COMMITTED

ISOLATION_REPEATABLE_READ

ISOLATION_SERIALIZABLE

事务传播行为

REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值)

SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)

MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常

REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起。

NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起

NEVER:以非事务方式运行,如果当前存在事务,抛出异常

NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行 REQUIRED 类似的操作

超时时间:默认值是-1,没有超时限制。如果有,以秒为单位进行设置

是否只读:建议查询时设置为只读

TransactionStatus 接口提供的是事务具体的运行状态,方法介绍如下。

 以上了解就可以了。

声明式事务控制:

使用步骤:

1.导入相应的jar包

 1 <!-- spring的事务管理 -->
 2 <dependency>
 3     <groupId>org.springframework</groupId>
 4     <artifactId>spring-tx</artifactId>
 5     <version>5.0.5.RELEASE</version>
 6 </dependency>
 7 <!-- Aop的切入点表达式解析 -->
 8 <dependency>
 9     <groupId>org.aspectj</groupId>
10     <artifactId>aspectjweaver</artifactId>
11     <version>1.8.7</version>
12 </dependency>

2.配置事务管理器

1 <!-- 事务管理器(在Spring的核心配置文件中) -->
2 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
3     <property name="dataSource" ref="dataSource"/>
4 </bean>

3.配置事务的切面和织入关系

xml配置:

 1 <!--事务切面-->
 2 <aop:config>
 3     <aop:advisor advice-ref="txAdvice" 
 4                  pointcut="execution(* com.itheima.service.impl.*Impl.*(..))">
 5     </aop:advisor>
 6 </aop:config>
 7 <!--事务的详细配置-->
 8 <tx:advice id="txAdvice" transaction-manager="transactionManager">
 9     <tx:attributes>
10         <tx:method name="save*" propagation="REQUIRED" read-only="false"/>
11         <tx:method name="update*" propagation="REQUIRED" read-only="false"/>
12         <tx:method name="delete*" propagation="REQUIRED" read-only="false"/>
13         <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
14         <tx:method name="*"/>
15     </tx:attributes>
16 </tx:advice>

注解配置:

在Spring核心配置文件中:

<!--开启Spring声明式事务的注解支持-->
<tx:annotation-driven />

在对应的类上加入事务注解:

 1 @Transactional  //表示当前类的所有方法都加入注解支持 propagation:REQUIRED read-only:false
 2 public class AccountServiceImpl implements AccountService {
 3 
 4     @Autowired
 5     private AccountDao accountDao;
 6 
 7     public void transfer(String outMan, String inMan, double money) {
 8         accountDao.out(outMan, money);
 9         int i = 10 / 0;
10         accountDao.in(inMan, money);
11     }
12 }

4.测试

猜你喜欢

转载自www.cnblogs.com/j9527/p/12036167.html