스프링 프레임 워크 (6) - JdbcTemplate을 Spring 트랜잭션 관리 및 사용

스프링 프레임 워크는 JdbcTemplate을 수동으로 너무 많은 문제를 만들 수 있습니다 더 참조 값이없는 패키지했습니다 그냥 주석에 의해 개발 된 JdbcTemplate을 경우 아래의 코드를 사용 :

다음 단계를 사용합니다 :

1. 오기 좌표 연관된

드루이드 연결 풀을 사용 :

1      <의존성>
 2          <의존성>
 3              <의 groupId> MySQL의 </의 groupId>
 4              <artifactId를> MySQL을 커넥터 자바 </ artifactId를>
 5              <버전> 5.1.47 </ 버전>
 6          </ 의존성>
 7          <의존성>
 8              <의 groupId> com.alibaba </의 groupId>
 9              <artifactId를> 사제 </ artifactId를>
 10              <버전> 1.1.10 </ 버전>
 11          </ 의존성>
 12          <의존성>
 13              <의 groupId> 조직.
스프링 프레임 워크 </의 groupId> 14             <artifactId를> 스프링 컨텍스트 </ artifactId를>
 15              <버전> 5.0.5.RELEASE </ 버전>
 16          </ 의존성>
 17          <의존성>
 18              <의 groupId> org.springframework </의 groupId>
 19              <artifactId를> 스프링 JDBC </ artifactId를>
 20              <버전> 5.0.5.RELEASE </ 버전>
 21          </ 의존성>
 22        
27          <의존성>
 28              <의 groupId> org.aspectj </의 groupId>
 29              <artifactId를> aspectjweaver </ artifactId를>
 30              <
버전> 1.8.13 </ 버전> 31          </ 의존성>
32      </ 의존성>

데이터베이스 테이블을 작성합니다

당신의 자신을 만들 수 있습니다.

구현 클래스를 작성합니다

당신의 자신을 만들 수 있습니다.

4. 구성 봄 핵심 프로필

 <! - 스캔 패키지 ->
    <배경 : 성분 주사베이스 - 패키지 = "com.itheima"/>

    <콩 ID = "는 dataSource" 클래스 = "com.alibaba.druid.pool.DruidDataSource">
        <속성 명 = "driverClassName"값 = "com.mysql.jdbc.Driver"/>
        <속성 이름 = "URL"값 = "JDBC한다 : mysql : // localhost를 : 3306 / ssm_spring"/>
        <속성 이름 = "사용자 이름"값 = "루트"/>
        <속성 명 = "비밀번호"값 = "123"/>
    </ 콩>

    <콩 ID = "JdbcTemplate을" 클래스 = "org.springframework.jdbc.core.JdbcTemplate">
        <속성 명 = 데이터 소스 ""REF = 데이터 소스 ""/>
    </ 콩>

</ 콩>

 

JdbcTemplate을을 객체를 생성 및 사용 (5)

주입 주석 객체를 획득함으로써 구현 클래스 다오 층 :

@Autowired
     개인 JdbcTemplate을 템플릿;

JdbcTemplate을 그것에 쿼리 또는 업데이트 메서드를 호출합니다.

6. 테스트

자체 테스트.

봄 (4)와 반복성 - 주 개발은 매우 상세한 단계를 작성하지 않는, 상대적으로 높다.

 

Spring의 트랜잭션 제어 :

프로그램 및 선언적 트랜잭션 제어 트랜잭션 제어에 Spring 트랜잭션 제어 할 수 있습니다.

열 또는 부호화 처리 제어에 의해 거래를 종료 제어 프로그램 거래 제어 방법. 라인에 배울 너무 번잡.

선언적인 트랜잭션 제어 열거 나 구성에 거래를 종료하는 것입니다. 선언적인 트랜잭션 관리는 XML 기반의 선언적 트랜잭션 제어 및 주석 기반의 선언적 트랜잭션 제어로 나누어진다.

 

프로그래밍 트랜잭션 제어 :

프로그래밍 트랜잭션 제어 세 제품 :

PlatformTransactionManager를

TransactionDefinition

된 TransactionStatus

 

PlatformTransactionManager를 인터페이스는 자사의 서비스의 작동 우리의 일반적인 방법을 제공하는 트랜잭션 관리자의 봄입니다.

참고 :

다오 층 기술 JDBC 또는 MyBatis로 : PlatformTransactionManager를 인터페이스 타입, 다오 기술의 서로 다른 층은 예를 들어 다른 구현 클래스를 갖는다 org.springframework.jdbc.datasource.DataSourceTransactionManager

다오 레이어 기술은 때 최대 절전 모드입니다 : 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