一、使用JdbcTemplate对象来处理CRUD操作。
不推荐使用JdbcDaoSupport。
二、使用NameParameterJdbcTemplate
该对象没有无参构造器,必须指定参数。
可以为参数起名字。便于维护,但比较麻烦。可以传入对象修改数据库
三、事务管理
- 配置事务管理器
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
- 启用事务注解
<tx:annotation-driven transaction-manager="transactionManager" />
- 使用
在要使用事务的方法上加上@Transactional注解便可以使用事务
四、事务的传播属性
- 当事务方法比另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的事务中运行
- 事务的传播行为可以由传播属性指定。Spring定义了7中类传播行为
- 使用propagation指定事务的传播行为,默认为REQUIRED。
- 使用isolation属性指定事务的隔离级别
- 使用rollbackForXXX设置事务回滚,默认所有异常都回滚
- 使用readOnly指定事务是否为只读。可以帮助优化数据库引擎。若真的只是读取只,应设置readOnly=true
- 使用timeout指定强制回滚之前事务可以占用的时间。
传播属性 | 描述 |
---|---|
REQUIRED | 如果有事务在运行,当前方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行 |
REQUIRED_NEW | 当前的方法必须启动新事务,并在它自己的事务内运行。如果有事务正在运行,应该将它挂起 |
SUPPORTS | 如果有事务在运行。当前的方法就在这个事务内运行,否则它可以不运行在事务 |
NOT_SUPPORTE | 当前的方法不应该运行在事务中,如果有运行的事务,将它挂起 |
MANDATORY | 当前方法必须运行在事务内部,如果没有正在运行的事务,就抛出异常 |
NEVER | 当前方法不应该运行在事务中,如果有运行的事务,就抛出异常 |
NESTED | 如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行。否则,就启动一个新的事务,并在它自己的事务内运行 |