一,Springjdbc的一些常用類
這里有兩個(gè)常用的類jdbcDaoSupport和jdbcTemplate
1废士,jdbcDaoSupport提供了jdbcTemplate和DataSource的setter方法溪厘,可以通過它們獲取到j(luò)dbcTemplate和DataSource
2骡显,在jdbcTemplate里面封裝了基本的對數(shù)據(jù)庫的一些操作
3,如果想要操作數(shù)據(jù)庫贬媒,直接繼承jdbcDaoSupport和jdbcTemplate這兩個(gè)類或者直接 使用di方式直接注入這兩個(gè)類
二,Spring的事務(wù)控制
1肘习,事務(wù)架構(gòu)
PlatformTransactionManager是事務(wù)處理的核心接口际乘,規(guī)定了事務(wù)開啟,提交和回滾漂佩,AbstractPlatformTransactionManager是實(shí)現(xiàn)PlatformTransactionManager的抽象類脖含,已經(jīng)實(shí)現(xiàn)了事務(wù)的提交(commit)和回滾(rollback),對于采取不同的數(shù)據(jù)技術(shù)投蝉,事務(wù)開啟的方式是不一樣的养葵。
2,事務(wù)的狀態(tài)以及定義
事務(wù)定義
事務(wù)狀態(tài)
在事務(wù)控制中又涉及到TransactionStatus和TransactionDefinition兩個(gè)類瘩缆。一個(gè)描述事務(wù)的狀態(tài)信息(是否為新的事務(wù)关拒,事務(wù)是否完成),另外一個(gè)描述事務(wù)的傳播屬性(解決事務(wù)的嵌套問題)和事務(wù)的隔離機(jī)制以及是否只讀
3,實(shí)例操作
dao層以及實(shí)現(xiàn)
//dao
package com.fiberhome.spring.jdbc.dao;
public interface PersonDao {
public void savePerson(String sql);
}
//daoImpl
package com.fiberhome.spring.jdbc.dao;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
public class PersonDaoImpl extends JdbcDaoSupport implements PersonDao {
@Override
public void savePerson(String sql) {
this.getJdbcTemplate().execute(sql);
}
}
service層以及實(shí)現(xiàn)
//service
package com.fiberhome.spring.jdbc.service;
public interface PersonService {
public void savePerson();
}
//serviceImpl
package com.fiberhome.spring.jdbc.service;
import com.fiberhome.spring.jdbc.dao.PersonDao;
public class PersonServiceImpl implements PersonService{
private PersonDao dao;
public void setDao(PersonDao dao) {
this.dao = dao;
}
public void savePerson() {
dao.savePerson("INSERT INTO ist_library_user (NAME ) VALUES('xixi')");
int a=1/0;
dao.savePerson("INSERT INTO ist_library_user (NAME ) VALUES('xixi')");
}
}
xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 獲取dataSource-->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value> classpath:jdbc.properties</value>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="personDao" class="com.fiberhome.spring.jdbc.dao.PersonDaoImpl">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<bean id="personService" class="com.fiberhome.spring.jdbc.service.PersonServiceImpl">
<property name="dao">
<ref bean="personDao" />
</property>
</bean>
<!-- 事務(wù)管理器 告訴spring容器要采用什么樣的技術(shù)處理事務(wù) -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<tx:advice id="tx" transaction-manager="transactionManager">
<tx:attributes>
<!--告知事務(wù)處理的策略-->
<tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"
read-only="false" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut
expression="execution(* com.fiberhome.spring.jdbc.service.PersonServiceImpl.*(..))"
id="perform" />
<aop:advisor advice-ref="tx" pointcut-ref="perform" />
</aop:config>
</beans>