Spring第五天java
2016年11月4日程序員
9:33spring
1:切面的執行順序sql
說明:當在切面中執行環繞通知中的proceed方法時,它有兩個做用。數據庫
1.讓目標方法執行。express
2.執行下一個通知安全
當執行時若是還有下一個通知 就會先去執行該通知。直到全部的通知執行完畢。最後執行目標方法。而且程序按照遞歸(嵌套)的方式執行。優化
2.Spring和JDBC整合 url
1.第一步導入jar包spa
2.配置數據源
<!--spring和JDBC進行整合 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${c3p0.driver}"></property>
<property name="jdbcUrl" value="${c3p0.url}"></property>
<property name="user" value="${c3p0.user}"></property>
<property name="password" value="${c3p0.password}"></property>
</bean>
3.配置JDBCTemplate
這個是jdbc模板類,能夠經過Spring爲咱們提供的版本進行快速的增刪改操做。不須要像原生的jdbc那樣複雜的代碼。
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--配置數據源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
4.模板類的使用
JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
String sql = "insert into user values(null,?,?)";
int row = jdbcTemplate.update(sql, "白骨精",5000);
System.out.println("影響的行數"+row);
說明:模板類自動的會使用預編譯的方式。保證數據的安全。
使用預編譯時 參數用「?」代替。具體的參數賦值 在執行模板方法時指定
jdbcTemplate.update(sql, "白骨精",5000);
全部的增刪改操做 都用jdbcTemplate.update(sql,arg0,arg1);
5.JDBC模板類中的查詢方法
一般狀況下 查詢的結果結經過List進行封裝。每個list中的元素都是一個對象(實體類對象),而原始的模板對象方法jdbcTemplate.queryForList(sql);返回一個List<Map<key,value>>的形式 這樣不符合咱們的習慣。而且處理起來很麻煩。
5.1轉化方法
5.2
兩種轉化方式的區別:
第二種轉化方法比較浪費時間。由於底層經過各類反射調用。對象的屬性判斷才能進行賦值。。
全部建議使用接口的形式進行轉化。
6:說明
雖然jdbcTemplate在使用上比jdbc原生的簡單。但是在現實的開發中幾乎不用。
7:Spring的聲明式的事務處理
1.能夠指定具體的方法來控制事務。例如增刪改 添加事務,而查詢方法和其餘方法都不須要事務。
2.只要在Spring中使用了聲明式的事務處理,未來全部的事務都不須要程序員本身維護。spring會很是智能幫你維護數據庫事務。
分析:
問題:若是控制事務。
專門的事務管理器。專門負責數據源的管理。
步驟:
1.修改配置文件的頭
2.配置事務管理器
<!--事務管理器的id 默認都叫 transactionManager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
3.配置事務通知
<!-- method name="事務指定的方法"
propagation = REQUIRED (必須的) 未來執行addUser方法的時候就是添加事務。
propagation="SUPPORTS" 事務無關緊要。
read-only="true" spring會自動優化 查詢效率更高
-->
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="*" propagation="SUPPORTS"/>
4.配置切面
<aop:config>
<aop:pointcut expression="execution(* service..*(..))" id="pc"/>
<aop:advisor advice-ref="tx" pointcut-ref="pc"/>
</aop:config>
8:傳播屬性
propagation="REQUIRED"
propagation="SUPPORTS"
實現事務的傳播屬性REQUIRED,能夠作到多表操做時事務的一致性。
propagation="SUPPORTS"
若是一直操做有事務。那麼當執行find()時,這個方法也會添加事務。
9:事務的回滾策略
1.當程序執行遇到運行時異常時 事務會回滾。
2當程序執行遇到檢查異常時 事務不會回滾
3.修改回滾策略
rollback-for="java.sql.SQLException" 遇到那種異常 事務回滾
no-rollback-for="java.la1:切面的執行順序
說明:當在切面中執行環繞通知中的proceed方法時,它有兩個做用。
1.讓目標方法執行。
2.執行下一個通知
當執行時若是還有下一個通知 就會先去執行該通知。直到全部的通知執行完畢。最後執行目標方法。而且程序按照遞歸(嵌套)的方式執行。
2.Spring和JDBC整合
1.第一步導入jar包
2.配置數據源
<!--spring和JDBC進行整合 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${c3p0.driver}"></property>
<property name="jdbcUrl" value="${c3p0.url}"></property>
<property name="user" value="${c3p0.user}"></property>
<property name="password" value="${c3p0.password}"></property>
</bean>
3.配置JDBCTemplate
這個是jdbc模板類,能夠經過Spring爲咱們提供的版本進行快速的增刪改操做。不須要像原生的jdbc那樣複雜的代碼。
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<!--配置數據源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
4.模板類的使用
JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
String sql = "insert into user values(null,?,?)";
int row = jdbcTemplate.update(sql, "白骨精",5000);
System.out.println("影響的行數"+row);
說明:模板類自動的會使用預編譯的方式。保證數據的安全。
使用預編譯時 參數用「?」代替。具體的參數賦值 在執行模板方法時指定
jdbcTemplate.update(sql, "白骨精",5000);
全部的增刪改操做 都用jdbcTemplate.update(sql,arg0,arg1);
5.JDBC模板類中的查詢方法
一般狀況下 查詢的結果結經過List進行封裝。每個list中的元素都是一個對象(實體類對象),而原始的模板對象方法jdbcTemplate.queryForList(sql);返回一個List<Map<key,value>>的形式 這樣不符合咱們的習慣。而且處理起來很麻煩。
5.1轉化方法
5.2
兩種轉化方式的區別:
第二種轉化方法比較浪費時間。由於底層經過各類反射調用。對象的屬性判斷才能進行賦值。。
全部建議使用接口的形式進行轉化。
6:說明
雖然jdbcTemplate在使用上比jdbc原生的簡單。但是在現實的開發中幾乎不用。
7:Spring的聲明式的事務處理
1.能夠指定具體的方法來控制事務。例如增刪改 添加事務,而查詢方法和其餘方法都不須要事務。
2.只要在Spring中使用了聲明式的事務處理,未來全部的事務都不須要程序員本身維護。spring會很是智能幫你維護數據庫事務。
分析:
問題:若是控制事務。
專門的事務管理器。專門負責數據源的管理。
步驟:
1.修改配置文件的頭
2.配置事務管理器
<!--事務管理器的id 默認都叫 transactionManager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
3.配置事務通知
<!-- method name="事務指定的方法"
propagation = REQUIRED (必須的) 未來執行addUser方法的時候就是添加事務。
propagation="SUPPORTS" 事務無關緊要。
read-only="true" spring會自動優化 查詢效率更高
-->
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="*" propagation="SUPPORTS"/>
4.配置切面
<aop:config>
<aop:pointcut expression="execution(* service..*(..))" id="pc"/>
<aop:advisor advice-ref="tx" pointcut-ref="pc"/>
</aop:config>
8:傳播屬性
propagation="REQUIRED"
propagation="SUPPORTS"
實現事務的傳播屬性REQUIRED,能夠作到多表操做時事務的一致性。
propagation="SUPPORTS"
若是一直操做有事務。那麼當執行find()時,這個方法也會添加事務。
9:事務的回滾策略
1.當程序執行遇到運行時異常時 事務會回滾。
2當程序執行遇到檢查異常時 事務不會回滾
3.修改回滾策略
rollback-for="java.sql.SQLException" 遇到那種異常 事務回滾
no-rollback-for="java.lang.Exception" 遇到全部的異常都不回滾