- 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控制)
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");
- 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>
- 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>