1:用到的jar(下面的目錄是相對於spring2.5解壓後的目錄)
/dist/spring.jar
/lib/jakarta-comons/commons-logging.jar
/lib/jakarta-comons/common-pools.jar
/lib/jakarta-comons/commons-dbcp.jar
/lib/aspectj/aspectjrt.jar
/lib/aspectj/jweaver.jar
/lib/cjlib/cglib-nodep-z.1_3.jar
/lib/j2ee/common-annotations.jar
外加上mysql的資料庫驅動
2:建立工程
業務介面:
package service;</p><p>import java.util.List;<br />import bean.Su;</p><p>public interface SuService {<br />public void save(Su s);<br />public void update(Su s);<br />public Su querySuById(Integer id);<br />public List<Su> queryAll();<br />public void deleteSu(Integer id);<br />}</p><p>
業務介面實現:
package service.imp;</p><p>import java.util.List;<br />import javax.sql.DataSource;<br />import org.springframework.jdbc.core.JdbcTemplate;<br />import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;<br />import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;<br />import org.springframework.transaction.annotation.Propagation;<br />import org.springframework.transaction.annotation.Transactional;<br />import bean.Su;<br />import service.SuService;</p><p>//下面兩條為spring交易管理的預設情況<br />//當方法開始時開始事務,方法結束時事務結束。【unchecked】運行期例外交易回復。<br />//1:【checked】方法裡面thorws new Exception,方法拋出。外面調用時捕獲,不復原。<br />@Transactional<br />public class SuServiceImpl implements SuService {<br /> private JdbcTemplate jdbcTemplate;<br /> private NamedParameterJdbcTemplate namedJdbcTemplate;<br /> private SimpleJdbcTemplate simpleJdbcTemplate;</p><p> public void setDataSource(DataSource dataSource) {<br /> this.jdbcTemplate = new JdbcTemplate(dataSource);<br /> }<br /> //配置該屬性後,出現上面1checked情況時也會復原<br /> @Transactional(rollbackFor=RuntimeException.class)<br /> //@Transactional(noRollbackFor=RuntimeException.class)//不會復原<br /> public void deleteSu(Integer id) {<br /> jdbcTemplate.update("delete su where id=? ",<br /> new Object[] {id},<br /> new int[] { java.sql.Types.INTEGER });<br /> }</p><p> @SuppressWarnings("unchecked")<br /> public List<Su> queryAll() {<br /> System.out.println(this.simpleJdbcTemplate+"::::::::::::::::");<br /> System.out.println(this.namedJdbcTemplate+"::::::::::::::::");<br /> this.simpleJdbcTemplate.update("update su set message=? where id=?", "heshaohui",2);<br /> throw new RuntimeException();<br />// return (List<Su>)jdbcTemplate.query("select * from su",new SuRowMapper());<br /> }</p><p> public Su querySuById(Integer id) {<br /> return (Su)jdbcTemplate.queryForObject("select * from su where id=?", new Object[]{id},new SuRowMapper());<br /> }<br /> //配置該屬性後,不開啟事務。因為開啟事務對效能會有一定的影響<br /> @Transactional(propagation=Propagation.NOT_SUPPORTED)<br /> public void save(Su s) {<br /> jdbcTemplate.update("insert into su(message) value(?)",<br /> new Object[] { s.getMessage() },<br /> new int[] { java.sql.Types.VARCHAR });<br /> }</p><p> public void update(Su s) {<br /> jdbcTemplate.update("upate su set message=? where id=?",<br /> new Object[] { s.getMessage() ,s.getId()},<br /> new int[] { java.sql.Types.VARCHAR,java.sql.Types.INTEGER });<br /> }</p><p> public void setNamedJdbcTemplate(NamedParameterJdbcTemplate namedJdbcTemplate) {<br /> this.namedJdbcTemplate = namedJdbcTemplate;<br /> }<br /> public void setSimpleJdbcTemplate(SimpleJdbcTemplate simpleJdbcTemplate) {<br /> this.simpleJdbcTemplate = simpleJdbcTemplate;<br /> }<br />}</p><p>
bean類:
package bean;</p><p>public class Su {<br />private Integer id;<br />private String message;<br />public Su(){}<br />public Su(String message){this.message=message;}<br />public Integer getId() {<br /> return id;<br />}<br />public void setId(Integer id) {<br /> this.id = id;<br />}<br />public String getMessage() {<br /> return message;<br />}<br />public void setMessage(String message) {<br /> this.message = message;<br />}<br />}</p><p>
測試:
package test;</p><p>import org.junit.BeforeClass;<br />import org.junit.Test;<br />import org.springframework.context.ApplicationContext;<br />import org.springframework.context.support.ClassPathXmlApplicationContext;<br />import bean.Su;<br />import service.SuService;</p><p>public class SuTest {</p><p>private static SuService suService;</p><p> @BeforeClass<br /> public static void setUpBeforeClass() throws Exception {<br /> ApplicationContext cx = new ClassPathXmlApplicationContext(<br /> "applicationContext.xml");<br /> suService=(SuService) cx.getBean("suService");<br /> }<br /> @Test public void save(){<br /> suService.save(new Su("賀少輝"));<br /> System.out.println(suService.queryAll().size());<br /> }<br />}</p><p>
設定檔:
<?xml version="1.0" encoding="UTF-8"?><br /><beans xmlns="http://www.springframework.org/schema/beans"<br /> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"<br /> xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"<br /> xsi:schemaLocation=" </p><p>http://www.springframework.org/schema/beans</p><p>http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</p><p>http://www.springframework.org/schema/context</p><p>http://www.springframework.org/schema/context/spring-context-2.5.xsd</p><p>http://www.springframework.org/schema/aop</p><p>http://www.springframework.org/schema/aop/spring-aop-2.5.xsd</p><p>http://www.springframework.org/schema/tx</p><p> http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"></p><p> <!-- 載入資料庫的屬性檔案:兩種方式,1:直接把value的值寫在dataSource中對應的屬性處<br /> 2:寫在jdbc.properties檔案中,加上下面這句代碼 --><br /> <context:property-placeholder location="classpath:jdbc.properties" /></p><p> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><br /> <property name="driverClassName" value="${jdbc.driverClassName}"></property><br /> <property name="url" value="${jdbc.url}"></property><br /> <property name="username" value="${jdbc.username}"></property><br /> <property name="password" value="${jdbc.password}"></property><br /> <!-- 串連池啟動時的初始值,一般兩三條就夠了 --><br /> <property name="initialSize" value="${jdbc.initialSize}"></property><br /> <!-- 串連池的最大值 --><br /> <property name="maxActive" value="${jdbc.maxActive}"></property><br /> <!-- 最大空閑值,當經過一個高峰時間後,串連池可以慢慢將用不到的串連釋放一部分,一直減少到maxIdle為止 --><br /> <property name="maxIdle" value="${jdbc.maxIdle}"></property><br /> <!-- 最小空閑值,當閒置串連數小於閥值時,串連池就會預申請一些串連,以免峰值到時來不及申請--><br /> <property name="minIdle" value="${jdbc.minIdle}"></property><br /> </bean><br /> <!-- 配置事務bean --><br /> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><br /> <property name="dataSource" ref="dataSource"></property><br /> </bean><br /> <!-- 封裝了JdbcTemplate,在SQL語句中增加了具名引數的支援。 --><br /> <bean id="namedJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"><br /> <constructor-arg ref="dataSource"/><br /> </bean><br /> <!-- JdbcTemplate的封裝類,利用了JAVA5的一些特性,如泛型。 --><br /> <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"><br /> <constructor-arg ref="dataSource"/><br /> </bean><br /> <!-- 將事務交與spring容器管理 --><br /> <tx:annotation-driven transaction-manager="transactionManager"/></p><p> <bean id="suService" class="service.imp.SuServiceImpl"><br /> <!--下面這個配的是jdbcTemplate,注意下的set方法的寫法。。。 --><br /> <property name="dataSource" ref="dataSource"></property><br /> <property name="simpleJdbcTemplate" ref="simpleJdbcTemplate"></property><br /> <property name="namedJdbcTemplate" ref="namedJdbcTemplate"></property><br /> </bean><br /></beans></p><p>
到此結束。