day_05

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" 遇到全部的異常都不回滾

本站公眾號
   歡迎關注本站公眾號,獲取更多信息