스프링 프레임 워크는 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.测试