11分钟了解Spring JDBC和事务管理
不断的努力,不断的去接近梦想,越挫越勇,吃尽酸甜苦辣,能够抵御寒冬,也能够拥抱春天,这样的才叫生活。
1. Spring JDBC 配置
1.1 对应的包类:
- org.springframework.jdbc.core.JdbcTemplate 提供访问数据库基本属性和操作
- org.springframework.jdbc.datasource.DriverManagerDataSource 获取数据库连接
- org.springframework.jdbc.support.SQLExceptionTranslator 处理SQL Exception 完成转译
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/classes"/>
<property name="username" value="root"/>
<property name="password" value="123456" />
</bean>
<bean id="jdbctemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="datasource"></property>
</bean>
1.2 JdbcTemplate 常用方法
1.2.1数据库创建创建删除修改等:
execute()
1.2.2数据的增删改 :
- int update(String sql) 执行Sql语句 返回受影响的行数;
- int update(PrepareedStatementCreator psc) 执行 PrepareedStatementCreator 返回语句 返回行数;
- int update(String sql,PrepareedStatementCreator psc) 执行 PrepareedStatementCreator 设置的Sql 语句 返回行数;
- int update(String sql,Object..args) 使用Object…设置Sql语句中的参数,参数不能为NULL 返回行数;
public int upadte(Userdao userdao) {
String sql="update user set username=?,password=? where id=?";
Object[] object=new Object[]{
userdao.getUsername(),
userdao.getPassword(),
userdao.getId()
};
int i=this.jdbcTemplate.update(sql, object);
return i;
}
1.2.3 数据表的查询
- List query(String sql,RowMapper rowmapper) 执行Sql语句 通过RowMapper返回一个List集合;
- List query(String sql,PrepareedStatementCreator psc,RowMapper rowmapper) 执行sql语句创建PrepareedStatement对象,通过RowMapper返回一个List对象;
- List query(String sql,Object[] args,RowMapper rowmapper) 使用Object[] 的值设置Sql语句参数,采用RowMapper回调方法返回LIST 数据;
- queryForObject(String sql,RowMapper rowmapper,Object..args) 将args 参数绑定Sql语句中,通过RowMapper返回一个Object类型的单行记录;
- queryForList(String sql,Object[] args,class
elementType) 返回多行数据的结果,但必须是返回列表,elementType 参数返回的是List 元素类型;
2.Spring 事务管理
2.1 Spring 所需要包类:
spring-tx-4.3.6.RELEASE.jar
2.2 事务管理器:
DataSourceTransactionManager :
位于org.springframework.jdbc.datasource包中,数据源事务管理器,提供对单个javax.sql.DataSource事务管理,用于Spring JDBC抽象框架、iBATIS或MyBatis框架的事务管理;
JdoTransactionManager :
位于org.springframework.orm.jdo包中,提供对单个javax.jdo.PersistenceManagerFactory事务管理,用于集成JDO框架时的事务管理;
JpaTransactionManager :
位于org.springframework.orm.jpa包中,提供对单个javax.persistence.EntityManagerFactory事务支持,用于集成JPA实现框架时的事务管理;
HibernateTransactionManager :
位于org.springframework.orm.hibernate3包中,提供对单个org.hibernate.SessionFactory事务支持,用于集成Hibernate框架时的事务管理;该事务管理器只支持Hibernate3+版本,且Spring3.0+版本只支持Hibernate 3.2+版本;
JtaTransactionManager :
位于org.springframework.transaction.jta包中,提供对分布式事务管理的支持,并将事务管理委托给Java EE应用服务器事务管理器;
OC4JjtaTransactionManager :
位于org.springframework.transaction.jta包中,Spring提供的对OC4J10.1.3+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持;
WebSphereUowTransactionManager :
位于org.springframework.transaction.jta包中,Spring提供的对WebSphere 6.0+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持;
WebLogicJtaTransactionManager :
位于org.springframework.transaction.jta包中,Spring提供的对WebLogic 8.1+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持。
2.3 事务定义:
声明式事务通过 -传播行为,隔离级别,只读提示,事务超时及回滚规则-来进行定义。
2.3.1事务传播行为:
2.4 基于XML 声明事务
<!--配置事务管理器 依赖数据源 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"></property>
</bean>
<!-- 配置事务通知 -->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"
isolation="DEFAULT" read-only="false" timeout="-1" />
</tx:attributes>
</tx:advice>
<!-- 配置AOP -->
<aop:config>
<aop:pointcut id="pointcut1" expression="execution(* com.dao.*.*(..))" />
<aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
</aop:config>
2.5 基于Annotation 声明事务
<!--配置事务管理器 依赖数据源 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"></property>
</bean>
<!-- 配置事务通知 -->
<tx:annotation-driven transaction-manager="transactionManager" />
在使用的bean类或方法前 添加 @Transactional