Spring學習筆記(六)

本教程對應視頻課程:http://edu.51cto.com/course/14731.htmlhtml

一、SpringJDBC

1.一、Spring在jdbc中的做用

mark

1.二、SpringJDBC實踐

一、添加jar包支持類java

spring-jdbc-4.3.14.RELEASE.jar、spring-tx-4.3.14.RELEASE.jarspring

package cn.org.kingdom.dao.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import cn.org.kingdom.dao.DeptDao;
import cn.org.kingdom.vo.Dept;
@Repository
public class DeptDaoImpl implements DeptDao {
    @Autowired
    private JdbcTemplate jt  ; 
    public JdbcTemplate getJt() {
        return jt;
    }
    public void setJt(JdbcTemplate jt) {
        this.jt = jt;
    }
    @Override
    public int addUser(Dept vo) throws Exception {
        return jt.update("insert into dept(deptno,dname,loc) values(?,?,?)", vo.getDeptno(),vo.getDname(),vo.getLoc());
    }
}

二、xml配置數據庫

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        ">
   <context:property-placeholder location="classpath:db.properties"/>
   <!-- 掃包 -->
   <context:component-scan base-package="cn.org.kingdom"/>
   <bean id="ds" class = "org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${db.driver}"/>
        <property name="url" value="${db.url}"/>
        <property name="username" value="${db.username}"/>
        <property name="password" value="${db.password}"/>
   </bean>  
   <bean id = "jt" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="ds"/>
   </bean>
</beans>

1.三、事務處理

1.3.一、spring對事務的支持

Spring對事務有很好的支持.提供了事務管理器. PlatformTransactionManager:平臺事務管理器(頂層)express

配置事務管理交給Spring來作apache

<!—①配置事務管理器(AOP:作什麼) --> 
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
        p:dataSource-ref="dataSource"/>
    <!-- 2.配置加強(AOP:什麼時機:本質是一個環繞加強) --> 
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="trans"/>
        </tx:attributes>     
    </tx:advice>
    <!-- 3.配置加強的地點(AOP:在哪裏加強) --> 
    <aop:config>
        <aop:pointcut expression="execution(* cn.org.kingdom.service.*Service.*(..))" id="txPoint"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>
    </aop:config>

1.3.二、spring事務的屬性說明

一、name:匹配到的方法模式(支持統配符);dom

二、read-only:查詢的時候,設置爲true,其餘設置爲false (也能夠默認不設置) ide

三、isolation:表明數據庫事務隔離級別(默認不用配置此項)DEFAULT:讓spring使用數據庫默認的事務隔離級別;其餘:spring模擬;this

四、no-rollback-for: 若是遇到的異常是匹配的異常類型,就不回滾事務;(記錄日誌等)url

五、rollback-for:若是遇到的異常是指定匹配的異常類型,纔回滾事務; 注意:Spring中默認只能回滾RuntimeException及其子類異常類型.(Exception.Throwabale就不能回滾) 、要求咱們:在Service層中全部的異常,使用RuntimeException類型、若原始異常不是RuntimeException,從新包裝成RuntimeException.

六、propagation:事務的傳播方式(當一個方法已經在一個開啓的事務當中了,應該怎麼處理自身的事務)

​ ①REQUIRED(默認的傳播屬性):若是當前方法運行在一個沒有事務環境的狀況下,則開啓一個新的事務,若是當前方法運行在一個已經開啓了的事務裏面,把本身加入到開啓的那個事務中 (通常默認選擇此項)

​ ②REQUIRES_NEW:無論當前方法是否運行在一個事務空間以內,都要開啓本身的事務保存數據建議使用這個

.(瞭解)

通用的事務管理器

<tx:advice id="crudAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="save*" propagation="REQUIRES_NEW" />
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="del*" />
            <tx:method name="get*" read-only="true"/>
            <tx:method name="list*" read-only="true"/>
            <tx:method name="find*" read-only="true"/>
            <tx:method name="query*" read-only="true"/>
            //此配置必須必須放在最後
           <tx:method name="*"/>
        </tx:attributes>
</tx:advice>

1.3.三、事務的註解配置

@Service("accountService")
@Transactional:該類中全部方法都使用默認的屬性加強 
public class AccountServiceImpl implements IAccountService {
    @Autowired
    @Qualifier("accountDAO")
    private IAccountDAO dao;
    @Transactional(propagation=Propagation.REQUIRES_NEW) 
    public void save(){}
    @Transactional(readOnly=true) 
    public void get(){}
    public void trans(Long outId, Long inId, Integer money) {
        System.out.println("11");
        dao.transIn(inId, money);
        System.out.println(1/0);//模擬停電
        dao.transOut(outId, money);
    }
}
@Repository("accountDAO")
public class AccountDAOImpl implements IAccountDAO {
    private JdbcTemplate jdbcTemplate;
    @Resource(name="dataSource")
    public void setDataSource(DataSource ds){
        jdbcTemplate = new JdbcTemplate(ds);
    }
}
相關文章
相關標籤/搜索