spring(4)
JdbcTemplate
1JdbcTemplate是spring提供的操作對(duì)象,是對(duì)Jdbc API的簡(jiǎn)單封裝
JdbcTemplate的使用
1 導(dǎo)入相關(guān)的jar包 2 在配置文件中配置數(shù)據(jù)源 3 在配置文件中將數(shù)據(jù)源注入到JdbcTemplate中 4 在操作類(lèi)中獲取JdbcTemplate。JdbcTemplate.execute()JdbcTemplate.update()JdbcTemplate.query()Jdbc.queryForObject()存在的問(wèn)題
我們的dao 有很多時(shí),每個(gè)dao 都有一些重復(fù)性的代碼。下面就是重復(fù)代碼:
private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; }解決的方法(這種方式只適用于XML配置的情況,如果是注解配置還是得使用上一種方式)
 讓dao 繼承JdbcDaoSupport
 當(dāng)然也需要給這個(gè)dao類(lèi)注入一個(gè)數(shù)據(jù)源
Spring 中的事務(wù)控制
第一:JavaEE 體系進(jìn)行分層開(kāi)發(fā),事務(wù)處理位于業(yè)務(wù)層,Spring 提供了分層設(shè)計(jì)業(yè)務(wù)層的事務(wù)處理解決方案。
 第二:spring 框架為我們提供了一組事務(wù)控制的接口。具體在后面的第二小節(jié)介紹。這組接口是在spring-tx-5.0.2.RELEASE.jar 中。
 第三:spring 的事務(wù)控制都是基于AOP 的,它既可以使用編程的方式實(shí)現(xiàn),也可以使用配置的方式實(shí)現(xiàn)。我們學(xué)習(xí)的重點(diǎn)是使用配置的方式實(shí)現(xiàn)。
PlatformTransactionManager此接口是spring 的事務(wù)管理器。
 包含三個(gè)具體操作:
 獲取事物狀態(tài)信息:getTransaction()
 提交:commit()
 回滾:rollback()
主要是使用它的兩個(gè)實(shí)現(xiàn)類(lèi):
 DataSourceTransactionManager(JdcTemplate和mybatis用)
 HibernateTransactionManager (Hibernate 用)
TransactionDefinition:
 隔離級(jí)別
 傳播行為:REQUIRED(有就用,沒(méi)有就建),SUPPORTS(有就用,沒(méi)有就非事物運(yùn)行)
 是否只讀
 超時(shí)時(shí)間
TransactionStatus:
 刷新事物
 是否存在存儲(chǔ)點(diǎn)
 事物是否完成
 事物是否為新事物
 是否回滾
基于XML的聲明式配置
1 配置事物管理器(DataSourceTransactionManager),并給注入數(shù)據(jù)源 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 注入DataSource --> <property name="dataSource" ref="dataSource"></property> </bean> 2 配置事物的通知引用事物管理器 <!-- 事務(wù)的配置--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> </tx:advice> 3 配置事物的屬性 <!--在tx:advice 標(biāo)簽內(nèi)部配置事務(wù)的屬性--> <tx:attributes> <!-- 指定方法名稱:是業(yè)務(wù)核心方法 read-only:是否是只讀事務(wù)。默認(rèn)false,不只讀。 isolation:指定事務(wù)的隔離級(jí)別。默認(rèn)值是使用數(shù)據(jù)庫(kù)的默認(rèn)隔離級(jí)別。 propagation:指定事務(wù)的傳播行為。 timeout:指定超時(shí)時(shí)間。默認(rèn)值為:-1。永不超時(shí)。 rollback-for:用于指定一個(gè)異常,當(dāng)執(zhí)行產(chǎn)生該異常時(shí),事務(wù)回滾。產(chǎn)生其他異常,事務(wù)不回滾。 沒(méi)有默認(rèn)值,任何異常都回滾。 no-rollback-for:用于指定一個(gè)異常,當(dāng)產(chǎn)生該異常時(shí),事務(wù)不回滾,產(chǎn)生其他異常時(shí),事務(wù)回 滾。沒(méi)有默認(rèn)值,任何異常都回滾。 --> <tx:method name="*" read-only="false" propagation="REQUIRED"/> <tx:method name="find*" read-only="true" propagation="SUPPORTS"/> </tx:attributes> 4 配置AOP切入點(diǎn)表達(dá)式 <!-- 配置aop --> <aop:config> <!-- 配置切入點(diǎn)表達(dá)式--> <aop:pointcut expression="execution(* com.itheima.service.impl.*.*(..))" id="pt1"/> </aop:config> 5 配置切入點(diǎn)表達(dá)式和事務(wù)通知的對(duì)應(yīng)關(guān)系 <!-- 在aop:config 標(biāo)簽內(nèi)部:建立事務(wù)的通知和切入點(diǎn)表達(dá)式的關(guān)系--> <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>基于注解的配置方式
1 配置事務(wù)管理器并注入數(shù)據(jù)源 2 在業(yè)務(wù)層使用@Transactional 注解 @Transactional(readOnly=true,propagation=Propagation.SUPPORTS) 該注解的屬性和xml 中的屬性含義一致。該注解可以出現(xiàn)在接口上,類(lèi)上和方法上。 出現(xiàn)接口上,表示該接口的所有實(shí)現(xiàn)類(lèi)都有事務(wù)支持。 出現(xiàn)在類(lèi)上,表示類(lèi)中所有方法有事務(wù)支持 出現(xiàn)在方法上,表示方法有事務(wù)支持。 以上三個(gè)位置的優(yōu)先級(jí):方法>類(lèi)>接口 3 在配置文件中開(kāi)啟spring 對(duì)注解事務(wù)的支持 <!-- 開(kāi)啟spring 對(duì)注解事務(wù)的支持--> <tx:annotation-driven transaction-manager="transactionManager"/>完全使用注解的方式:
在@Configuration標(biāo)記的注解類(lèi)上使用@EnableTransactionManagement注解總結(jié)
 
                            
                        - 上一篇: 字体:Verdana
- 下一篇: 测绘程序设计——坐标方位角推算(C#)
