Spring JDBC Template 模板类Spring为各个持久层提供了简单操作的模板类
导入相关jar包
事物管理包
spring-tx
数据库驱动jar包
spring-jdbc
mysql 驱动jar包
mysql-connector
创建一个数据库连接池
DriveManagerDataSource Spring默认内置的连接池
方法:
setDriverClassName("com.mysql.jdbc.Driver")数据库驱动
setUrl("jdbc:mysql:///springtest") 数据库链接字符串
setUsername("")用户名
setPassword("")密码
配置文件配置DriverManagerDataSource 相关属性
配置JdbcTemplate时必须指定dataSource源
导入外部的properties配置文件
<context:Lproperty-placeeholder location = "classpath:*.properties" />
获取配置文件中的值
${配置文件键}
使用JdbcTemplate实现增删改
JdbcTemplate
方法
方法参数:param = SQL语句[,?号占位符,几个占位符几个值]
update(param ) 执行insert、update、delete语句,返回更新行数
Object queryForObject(param ) 返回简单数据类型
List<实体> query(param ) 获取多个实体类对象
RowMapper<实体类型> 接口
数据结果集
数据库字段和实体类属性不对应情况才会手动实现这个接口
queryForObject(param,new RowMapper(实体){ 实现接口方法,set封装实体类,最后返回这个实体类 })
BeanPropertyRowMapper<实体类型>(实体类Class对象) RowMapper的实现类,根据数据库字段和实体类属性自动封装
Spring事务 JdbcDapSupport类
类继承后内部就声明了JdbcTemplate(因为在JdbcDaoSupport内部已经声明JdbcTemplate)
配置文件中配置JdbcTemplate数据模板
Spring事物的四个优点:
提供一致的对于不同事物管理的API
支持声明式事务管理
编程事物管理
优秀的整合与Spring的数据访问
PlatformTransactionManager
事物管理器,使用不同持久层技术的API管理事务,可以选择相关平台,如:HibernateTransactionManager
不同持久层解决技术事物管理方法不一样
Spring提供了针对不同Dao层框架的管事事物相关类:
DataSourceTransactionManager
HibernateTransactionManager
...
TransactionDefinition
描述事物定义
定义事物的一些相关信息 隔离 传播 超时 只读
超时:
默认值是-1,如果是-1代表用数据库中的默认超时时间
只读:true和false
传播:
它解决的是两个被事物管理方法相互调用的问题,他与数据库没关系,是程序内容维护的问题
常用的三种传播行为:
PROPAGATION_REQIRED 默认值,两个操作处于同一个事物,如果之前没有事物,新建一个事物
PROPAGATION_REQUIRES_NEW 两个操作处于不同的事物
PROPAGATION_NESTED 是一种嵌套食物,他是使用SavePoint来实现的,事物回滚时可以回滚到制定的savepoint,
只对DataSourceTransactionManager有效
TransactionSttus
描述事物的具体运行状态
在事物的运行过程中,得到某个时间点
声明式事务管理事物管理方式:
1.编码方法,不建议使用,他具有侵入性 ,在原有的业务逻辑上添加事务代码
把事务的开启和结束写在一个模块中
2.声明式事物控制,基于AOP对目标进行代理,在原有逻辑基础上应用环绕通知解决
配置声明式管理配置:
1.配置AOP和TX名称空间
2.在applicationContext中配置
配置TransactionManager Bean(事物管理器) --TransactionManager是接口还是实现类
设置dataSoure属性(数据源)
3.配置增强
<tx:advice id="名称" transaction-manager="事物管理器对象Bean">
<tx:method name="[目标Bean的]方法名称(可以用通配符)" (可选)[
propagation="事物隔离级别"
timeout=“超时时间”
read-only="默认值false"
rollback-for=“设置异常,如果产生这个异常,触发事物回滚”
no-rolback-for=“产生这个异常,不会出发事物回滚”
]>
4.定义切面
<aop:advisor name="方法名称" pointcut="切点" />
声明式事物管理注解开发
@Transactional(各种tx:method标签下的属性)
1.在配置文件中添加扫描Bean
<tx:annotation-driven transaction-manager="事物管理器Bean名称" />