日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Spring学习总结三

發(fā)布時間:2025/3/15 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring学习总结三 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Spring框架JdbcTemplate與事務(wù)

  • Spring學習總結(jié)三
    • 0、需要的jar包
    • 1、JdbcTemplate模板
      • 1.1、JdbcTemplateAPI的操作
        • 1.1.1、User類
        • 1.1.2、測試類
      • 1.2、配置spring.xml實現(xiàn)操作數(shù)據(jù)庫的例子(采用DBCP數(shù)據(jù)源)
        • 1.2.1、創(chuàng)建User實體類
        • 1.2.2、創(chuàng)建UserDao類
        • 1.2.3、配置spring.xml,將生產(chǎn)bean的任務(wù)交給spring容器
        • 1.2.4、測試
      • 1.3、配置spring.xml實現(xiàn)操作數(shù)據(jù)庫的例子(采用C3P0數(shù)據(jù)源)
        • 1.3.1、創(chuàng)建User實體類
        • 1.3.2、創(chuàng)建UserDao類
        • 1.3.3、配置spring.xml
        • 1.3.4、測試類
      • 1.4、繼承JdbcDaoSupport的例子
        • 1.4.1、實體類
        • 1.4.2、UserDao類并繼承JdbcDaoSupport類
        • 1.4.3、配置spring.xml
        • 1.4.4、寫jdbc.properties配置文件
        • 1.4.5、測試類
    • 2、轉(zhuǎn)賬的例子,層層遞進
    • 2.0、首先事務(wù)分級別
      • 2.1、Read Uncommitted, Read commited, Repeatable read, Serializable
        • 2.1.1、Read Uncommitted
        • 2.1.1、Read Committed
        • 2.1.1、Repeatable Read
        • 2.1.1、Serializable
      • 2.2、并發(fā)問題
        • 2.2.1、臟讀
        • 2.2.2、不可重復(fù)讀
        • 2.2.3、幻讀
      • 2.1、正常的一個轉(zhuǎn)賬(不存在事務(wù))
        • 2.1.1、創(chuàng)建AccountDao接口
        • 2.1.2、創(chuàng)建實現(xiàn)類AccountDaoImp
        • 2.1.3、創(chuàng)建AccountService接口
        • 2.1.4、創(chuàng)建實現(xiàn)類AccountServiceImp
        • 2.1.5、配置applicationContext.xml
        • 2.1.6、測試
      • 2.2、使用事務(wù)管理器+事務(wù)模板來處理事務(wù)
        • 2.2.1、接口AccountDao
        • 2.2.1、實現(xiàn)類AccountDaoImp
        • 2.2.1、接口AccountService
        • 2.2.1、實現(xiàn)類AccountServiceImp
        • 2.2.1、applicationContext配置
        • 2.2.1、測試
      • 2.3、使用事務(wù)代理器來處理事務(wù)
        • 2.3.1、創(chuàng)建2個接口
        • 2.3.2、創(chuàng)建2個實現(xiàn)類
        • 2.3.3、編寫applicationContext.xml
        • 2.3.4、測試
      • 2.4、使用AOP來處理事務(wù)
        • 2.4.1、2個接口
        • 2.4.2、2個實現(xiàn)類
        • 2.4.3、編寫applicationContext.xml(重頭戲)
        • 2.4.4、測試
      • 2.5、使用注解來處理事務(wù)
        • 2.5.1、2個接口
        • 2.5.2、2個實現(xiàn)類
        • 2.5.3、配置applicationContext.xml
        • 2.5.4、測試
    • 至此,spring除了整合沒有說以外,其他的都寫的差不多了!
    • 參考

Spring學習總結(jié)三

今天主要說下面幾個點:

  • JdbcTemplate模板
  • API的例子
  • 配置spring.xml實現(xiàn)操作數(shù)據(jù)庫的例子(采用DBCP數(shù)據(jù)源)
  • 配置spring.xml實現(xiàn)操作數(shù)據(jù)庫的例子(采用C3P0數(shù)據(jù)源)
  • 繼承JdbcDaoSupport的例子
  • 事務(wù)的講解(轉(zhuǎn)賬的例子,層層遞進)
  • 正常的一個轉(zhuǎn)賬(不存在事務(wù))
  • 使用事務(wù)管理器+事務(wù)模板來處理事務(wù)
  • 使用事務(wù)代理器來處理事務(wù)
  • 使用AOP來處理事務(wù)
  • 使用注解來處理事務(wù)

  • 0、需要的jar包

    下面的包太多了,就不幫大家找了哈!一般這樣百度mchange.c3p0 commons.dbcp commons.logging就可以找到對應(yīng)的jar,spring的話直接百度Spring下載地址就行了


    1、JdbcTemplate模板

    說到JdbcTemplate模板,其實我也沒學過!我只學過Hibernate的模板。不過都是數(shù)據(jù)庫,大體操作類似!

    1.1、JdbcTemplateAPI的操作

    大概需要下面幾個步驟:

  • 一個實體類
  • 一個測試類
  • 1.1.1、User類

    package com.csa.entity;public class User {private String username;private String phone;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "User [username=" + username + ", phone=" + phone + ", password=" + password + "]";} }

    1.1.2、測試類

    package com.csa.main;import java.util.List; import org.apache.commons.dbcp.BasicDataSource; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import com.csa.entity.User; public class JdbcTemplateAPI {public static void main(String[] args) {// 1.創(chuàng)建數(shù)據(jù)源(連接池)dhcpBasicDataSource dataSource = new BasicDataSource();// * 基本4項dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:自己數(shù)據(jù)庫的端口號/自己的數(shù)據(jù)庫");dataSource.setUsername("自己的用戶名");dataSource.setPassword("自己的密碼");// 2.創(chuàng)建模板,JdbcTemplate需要一個數(shù)據(jù)源,這里是基本的數(shù)據(jù)源JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);// 3.通過api操作@SuppressWarnings({ "unchecked", "rawtypes" })List<User> queryForList = jdbcTemplate.query("select * from User",new BeanPropertyRowMapper(User.class));for (User user : queryForList) {System.out.println(user);}} }

    測試結(jié)果:根據(jù)大家數(shù)據(jù)庫的不同,數(shù)據(jù)結(jié)果自然不一樣!

    1.2、配置spring.xml實現(xiàn)操作數(shù)據(jù)庫的例子(采用DBCP數(shù)據(jù)源)

    從上面的例子我們可以看出,dataSource和jdbcTemplate可以交由給spring容器來做!

    于是接下來我們將把生成bean的任務(wù)交給spring容器,實驗需要做的幾步:

  • 創(chuàng)建一個實體類(與上面的User一樣)
  • 創(chuàng)建一個UserDao
  • 配置spring.xml,將生產(chǎn)bean的任務(wù)給spring容器
  • 測試
  • 1.2.1、創(chuàng)建User實體類

    同上!

    1.2.2、創(chuàng)建UserDao類

    下面采用的是依賴注入的思想。

    package com.csa.dao; import java.util.List; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import com.csa.entity.User;public class UserDao {private JdbcTemplate jdbcTemplate;public JdbcTemplate getJdbcTemplate() {return jdbcTemplate;}public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@SuppressWarnings({ "rawtypes", "unchecked" })public List<User> list(){return jdbcTemplate.query("select * from User", new BeanPropertyRowMapper(User.class));} }

    1.2.3、配置spring.xml,將生產(chǎn)bean的任務(wù)交給spring容器

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 數(shù)據(jù)源 --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:端口/數(shù)據(jù)庫名"></property><property name="username" value="用戶名"></property><property name="password" value="密碼"></property></bean><!-- jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!-- Dao --><bean id="userDao" class="com.csa.dao.UserDao"><property name="jdbcTemplate" ref="jdbcTemplate"></property></bean></beans>

    1.2.4、測試

    import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.csa.dao.UserDao; import com.csa.entity.User;public class TestDBCP {public static void main(String[] args) {String xmlPath = "config/spring.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);UserDao userDao = (UserDao) applicationContext.getBean("userDao");List<User> list = userDao.list();for (User user : list) {System.out.println(user);}} }

    1.3、配置spring.xml實現(xiàn)操作數(shù)據(jù)庫的例子(采用C3P0數(shù)據(jù)源)

    我們現(xiàn)在采用的數(shù)據(jù)源是基本的數(shù)據(jù)源,于是我們可以改變一下數(shù)據(jù)源。改為C3P0數(shù)據(jù)源!

    同樣我們把生成bean的任務(wù)交給spring容器,實驗需要做的幾步:

  • 創(chuàng)建一個實體類(與上面的User一樣)
  • 創(chuàng)建一個UserDao
  • 配置spring.xml,將生產(chǎn)bean的任務(wù)給spring容器
  • 測試
  • 1.3.1、創(chuàng)建User實體類

    同上!

    1.3.2、創(chuàng)建UserDao類

    同上!使用依賴注入的思想!

    1.3.3、配置spring.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 這里要注意,BasicDataSource類的屬性名與C3P0的屬性名有點不同!大家寫的時候別忽略了! --><!-- 數(shù)據(jù)源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:端口/數(shù)據(jù)庫名"></property><property name="user" value="用戶名"></property><property name="password" value="密碼"></property></bean><!-- jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean><!-- Dao --><bean id="userDao" class="com.csa.dao.UserDao"><property name="jdbcTemplate" ref="jdbcTemplate"></property></bean></beans>

    1.3.4、測試類

    import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.csa.dao.UserDao; import com.csa.entity.User; public class TestC3P0 {public static void main(String[] args) {String xmlPath = "config/spring.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);UserDao userDao = (UserDao) applicationContext.getBean("userDao");List<User> list = userDao.list();for (User user : list) {System.out.println(user);}} }

    1.4、繼承JdbcDaoSupport的例子

    我們從上面的DBCP和C3P0的例子中可以看到,我們在Dao里面總要寫一個JdbcTemplate模板!很麻煩,這種事情應(yīng)該交給框架來做。

    于是要做下面幾個步驟:

  • 實體類
  • Dao類,并且繼承一個JdbcDaoSupport的類
  • 配置spring.xml,將IoC和DI給spring來做
  • 寫jdbc.properties配置文件
  • 測試類
  • 1.4.1、實體類

    同上!

    1.4.2、UserDao類并繼承JdbcDaoSupport類

    package com.csa.dao; import java.util.List; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.support.JdbcDaoSupport; import com.csa.entity.User; // 這樣簡潔多了! public class UserDao extends JdbcDaoSupport {@SuppressWarnings({ "rawtypes", "unchecked" })public List<User> list(){return this.getJdbcTemplate().query("select * from User", new BeanPropertyRowMapper(User.class));} }

    1.4.3、配置spring.xml

    我們發(fā)現(xiàn)spring.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 加載jdbc配置文件 --><context:property-placeholder location="classpath:config/jdbc.properties"/><!-- 數(shù)據(jù)源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 下面的有點像EL表達式 --><property name="driverClass" value="${jdbc.driverClass}"></property><property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property><property name="user" value="${jdbc.user}"></property><property name="password" value="${jdbc.password}"></property></bean><!-- Dao --><bean id="userDao" class="com.csa.dao.UserDao"><property name="dataSource" ref="dataSource"></property></bean></beans>

    1.4.4、寫jdbc.properties配置文件

    我們看到了在spring.xml中有一個元素是<context:property-placeholder location="classpath:config/jdbc.properties"/>。

    這個我們要在src/config/下創(chuàng)建一個jdbc.properties配置文件!內(nèi)容如下:

    jdbc.driverClass=com.mysql.jdbc.Driver jdbc.jdbcUrl=jdbc:mysql://localhost:端口/數(shù)據(jù)庫名 jdbc.user=用戶名 jdbc.password=密碼

    1.4.5、測試類

    import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.csa.dao.UserDao; import com.csa.entity.User;public class TestSupport {public static void main(String[] args) {String xmlPath = "config/spring.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);UserDao userDao = (UserDao) applicationContext.getBean("userDao");List<User> list = userDao.list();for (User user : list) {System.out.println(user);}} }

    2、轉(zhuǎn)賬的例子,層層遞進

    要說事務(wù),首先是事務(wù)具有 原子性、一致性、隔離性、持久性 ,而轉(zhuǎn)賬的例子可以說是非常經(jīng)典了

    需要的jar(多了AOP):

    2.0、首先事務(wù)分級別

    在mysql的默認隔離級別是4,而oracle默認隔離級別是2

    2.1、Read Uncommitted, Read commited, Repeatable read, Serializable

    2.1.1、Read Uncommitted

    最低的隔離級別,Read Uncommitted最直接的效果就是一個事務(wù)可以讀取另一個事務(wù)并未提交的更新結(jié)果。

    2.1.1、Read Committed

    Read Committed通常是大部分數(shù)據(jù)庫采用的默認隔離級別,它在Read Uncommitted隔離級別基礎(chǔ)上所做的限定更進一步, 在該隔離級別下,一個事務(wù)的更新操作結(jié)果只有在該事務(wù)提交之后,另一個事務(wù)才可能讀取到同一筆數(shù)據(jù)更新后的結(jié)果。 所以,Read Committed可以避免Read Uncommitted隔離級別下存在的臟讀問題, 但,無法避免不可重復(fù)讀取和幻讀的問題。

    2.1.1、Repeatable Read

    Repeatable Read隔離級別可以保證在整個事務(wù)的過程中,對同一筆數(shù)據(jù)的讀取結(jié)果是相同的,不管其他事務(wù)是否同時在對同一筆數(shù)據(jù)進行更新,也不管其他事務(wù)對同一筆數(shù)據(jù)的更新提交與否。 Repeatable Read隔離級別避免了臟讀和不可重復(fù)讀取的問題,但無法避免幻讀。(mysql默認隔離級別)

    2.1.1、Serializable

    最為嚴格的隔離級別,所有的事務(wù)操作都必須依次順序執(zhí)行,可以避免其他隔離級別遇到的所有問題,是最為安全的隔離級別, 但同時也是性能最差的隔離級別,因為所有的事務(wù)在該隔離級別下都需要依次順序執(zhí)行,所以,并發(fā)度下降,吞吐量上不去,性能自然就下來了。 因為該隔離級別極大的影響系統(tǒng)性能,所以,很少場景會使用它。通常情況下,我們會使用其他隔離級別加上相應(yīng)的并發(fā)鎖的機制來控制對數(shù)據(jù)的訪問,這樣既保證了系統(tǒng)性能不會損失太大,也能夠一定程度上保證數(shù)據(jù)的一致性。

    2.2、并發(fā)問題

    2.2.1、臟讀

    針對未提交數(shù)據(jù)如果一個事務(wù)中對數(shù)據(jù)進行了更新,但事務(wù)還沒有提交,另一個事務(wù)可以“看到”該事務(wù)沒有提交的更新結(jié)果,這樣造成的問題就是,如果第一個事務(wù)回滾,那么,第二個事務(wù)在此之前所“看到”的數(shù)據(jù)就是一筆臟數(shù)據(jù)。

    2.2.2、不可重復(fù)讀

    針對其他提交前后,讀取數(shù)據(jù)本身的對比不可重復(fù)讀取是指同一個事務(wù)在整個事務(wù)過程中對同一筆數(shù)據(jù)進行讀取,每次讀取結(jié)果都不同。如果事務(wù)1在事務(wù)2的更新操作之前讀取一次數(shù)據(jù),在事務(wù)2的更新操作之后再讀取同一筆數(shù)據(jù)一次,兩次結(jié)果是不同的,所以,Read Uncommitted也無法避免不可重復(fù)讀取的問題。

    2.2.3、幻讀

    針對其他提交前后,讀取數(shù)據(jù)條數(shù)的對比 幻讀是指同樣一筆查詢在整個事務(wù)過程中多次執(zhí)行后,查詢所得的結(jié)果集是不一樣的。幻讀針對的是多筆記錄。在Read Uncommitted隔離級別下, 不管事務(wù)2的插入操作是否提交,事務(wù)1在插入操作之前和之后執(zhí)行相同的查詢,取得的結(jié)果集是不同的,所以,Read Uncommitted同樣無法避免幻讀的問題。

    2.1、正常的一個轉(zhuǎn)賬(不存在事務(wù))

    說完事務(wù),接下來我們來做一個關(guān)于轉(zhuǎn)賬,然后不存在事務(wù)的情況會發(fā)生什么?

    需要的幾個步驟:

  • 創(chuàng)建AccountDao接口
  • 創(chuàng)建實現(xiàn)類AccountDaoImp
  • 創(chuàng)建AccountService接口
  • 創(chuàng)建實現(xiàn)類AccountServiceImp
  • 配置applicationContext.xml
  • 測試
  • 2.1.1、創(chuàng)建AccountDao接口

    package com.csa.dao; public interface AccountDao {/*** 出賬* @param outer* @param money*/public void out(String outer, Integer money);/*** 入賬* @param inter* @param money*/public void in(String inner, Integer money); }

    2.1.2、創(chuàng)建實現(xiàn)類AccountDaoImp

    package com.csa.dao.imp;import org.springframework.jdbc.core.support.JdbcDaoSupport;import com.csa.dao.AccountDao;public class AccountDaoImp extends JdbcDaoSupport implements AccountDao {@Overridepublic void out(String outer, Integer money) {this.getJdbcTemplate().update("update account set money = money - ? where username = ?", money, outer);}@Overridepublic void in(String inner, Integer money) {this.getJdbcTemplate().update("update account set money = money + ? where username = ?", money, inner);}}

    2.1.3、創(chuàng)建AccountService接口

    package com.csa.service; public interface AccountService {/*** 轉(zhuǎn)賬* @param outer 出賬人* @param inner 入賬人* @param money 金錢*/public void transfer(String outer, String inner, int money); }

    2.1.4、創(chuàng)建實現(xiàn)類AccountServiceImp

    package com.csa.service.imp; import com.csa.dao.AccountDao; import com.csa.service.AccountService;public class AccountServiceImp implements AccountService {private AccountDao accountDao;public void setAccountDao(AccountDao accountDao) {this.accountDao = accountDao;}@Overridepublic void transfer(String outer, String inner, int money) {accountDao.out(outer, money);// 如果將下面的語句放開,程序執(zhí)行后將報錯,并且出賬人會減1000大洋,而入賬人并沒有增加1000大洋// int i = 1/0;accountDao.in(inner, money);}}

    2.1.5、配置applicationContext.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- dataSource --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><!-- 我這里采用的數(shù)據(jù)庫名是transferAccounts其中有一個表:Account表,存儲每個人的"大洋"信息!--><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/transferAccounts"></property><property name="user" value="用戶名"></property><property name="password" value="密碼"></property></bean><!-- dao --><bean id="accountDao" class="com.csa.dao.imp.AccountDaoImp"><property name="dataSource" ref="dataSource"></property></bean><!-- service --><bean id="accountService" class="com.csa.service.imp.AccountServiceImp"><property name="accountDao" ref="accountDao"></property></bean></beans>

    2.1.6、測試

    package com.csa.app;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.csa.service.AccountService;public class App {public static void main(String[] args) {String xmlPath = "applicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);AccountService accountService = (AccountService) applicationContext.getBean("accountService");// 數(shù)據(jù)庫中有jack和rose這兩個條目!accountService.transfer("jack","rose",1000);} }

    2.2、使用事務(wù)管理器+事務(wù)模板來處理事務(wù)

    我們發(fā)現(xiàn),如果上面**出現(xiàn)除零異常后,在我們轉(zhuǎn)賬的邏輯上出現(xiàn)了異常,這1000大洋不翼而飛(入我們的口袋了)!**這不是我們想要的結(jié)果。那該怎么辦呢?

    spring處理事務(wù)的其中一種,它的操作如下:

  • 在applicationContext.xml中配置事務(wù)管理器
  • 在applicationContext.xml配置事務(wù)模板
  • 在需要處理事務(wù)的地方使用事務(wù)模板
  • 這個例子的幾個步驟:

  • 接口AccountDao
  • 實現(xiàn)類AccountDaoImp
  • 接口AccountService
  • 實現(xiàn)類AccountServiceImp
  • applicationContext.xml配置
  • 測試
  • 2.2.1、接口AccountDao

    與上面的一樣!

    2.2.1、實現(xiàn)類AccountDaoImp

    與上面的一樣!

    2.2.1、接口AccountService

    與上面的一樣!

    2.2.1、實現(xiàn)類AccountServiceImp

    需要注入一個TransactionTemplate,事務(wù)模板調(diào)用execute方法

    package com.csa.service.imp;import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.TransactionCallbackWithoutResult; import org.springframework.transaction.support.TransactionTemplate;import com.csa.dao.AccountDao; import com.csa.service.AccountService;public class AccountServiceImp implements AccountService {private AccountDao accountDao;public void setAccountDao(AccountDao accountDao) {this.accountDao = accountDao;}private TransactionTemplate transactionTemplate;public void setTransactionTemplate(TransactionTemplate transactionTemplate) {this.transactionTemplate = transactionTemplate;}@Overridepublic void transfer(String outer, String inner, int money) {transactionTemplate.execute(new TransactionCallbackWithoutResult() {@Overrideprotected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {accountDao.out(outer, money);int i = 1/0;accountDao.in(inner, money);}});} }

    2.2.1、applicationContext配置

    需要配置事務(wù)管理器和事務(wù)模板,并且將事務(wù)模板注入到Serveice中。

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- dataSource --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/transferAccounts"></property><property name="user" value="用戶名"></property><property name="password" value="密碼"></property></bean><!-- dao --><bean id="accountDao" class="com.csa.dao.imp.AccountDaoImp"><property name="dataSource" ref="dataSource"></property></bean><!-- service --><bean id="accountService" class="com.csa.service.imp.AccountServiceImp"><property name="accountDao" ref="accountDao"></property><property name="transactionTemplate" ref="transactionTemplate"></property></bean><!-- transactionManager管理器 --><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- transactionTemplate模板 --><bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"><property name="transactionManager" ref="txManager"></property></bean></beans>

    2.2.1、測試

    package com.csa.app; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.csa.service.AccountService;public class App {public static void main(String[] args) {String xmlPath = "applicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);AccountService accountService = (AccountService) applicationContext.getBean("accountService");accountService.transfer("jack","rose",1000);} }

    2.3、使用事務(wù)代理器來處理事務(wù)

    使用事務(wù)代理來處理事務(wù)需要以下幾個步驟:

  • 在applicationContext.xml中配置事務(wù)管理器
  • 在applicationContext.xml中創(chuàng)建事務(wù)代理
  • 在事務(wù)代理中配置事務(wù)屬性
  • 我們的例子需要做下面幾個步驟:

  • 創(chuàng)建2個接口
  • 創(chuàng)建2個實現(xiàn)類
  • 編寫applicationContext.xml
  • 測試
  • 2.3.1、創(chuàng)建2個接口

    兩個接口都未改變!

    2.3.2、創(chuàng)建2個實現(xiàn)類

    UserDao沒變,UserService改變?yōu)榈谝粋€版本!

    package com.csa.service.imp; import com.csa.dao.AccountDao; import com.csa.service.AccountService;public class AccountServiceImp implements AccountService {private AccountDao accountDao;public void setAccountDao(AccountDao accountDao) {this.accountDao = accountDao;}@Overridepublic void transfer(String outer, String inner, int money) {accountDao.out(outer, money);// int i = 1/0;accountDao.in(inner, money);}}

    2.3.3、編寫applicationContext.xml

    需要配置事務(wù)管理器,事務(wù)代理,然后再事務(wù)代理中注入兩個屬性,分別是事務(wù)管理器和事務(wù)屬性

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- dataSource --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/transferAccounts"></property><property name="user" value="用戶名"></property><property name="password" value="密碼"></property></bean><!-- dao --><bean id="accountDao" class="com.csa.dao.imp.AccountDaoImp"><property name="dataSource" ref="dataSource"></property></bean><!-- service --><bean id="accountService" class="com.csa.service.imp.AccountServiceImp"><property name="accountDao" ref="accountDao"></property></bean><!-- transactionManager管理器 --><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 4 service 代理對象 4.1 proxyInterfaces 接口 4.2 target 目標類4.3 transactionManager 事務(wù)管理器4.4 transactionAttributes 事務(wù)屬性(事務(wù)詳情)prop.key :確定哪些方法使用當前事務(wù)配置prop.text:用于配置事務(wù)詳情格式:PROPAGATION,ISOLATION,readOnly,-Exception,+Exception傳播行為 隔離級別 是否只讀 異常回滾 異常提交例如:<prop key="transfer">PROPAGATION_REQUIRED,ISOLATION_DEFAULT</prop> 默認傳播行為,和隔離級別<prop key="transfer">PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly</prop> 只讀<prop key="transfer">PROPAGATION_REQUIRED,ISOLATION_DEFAULT,+java.lang.ArithmeticException</prop> 有異常扔提交--><bean id="proxyAccountService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><property name="proxyInterfaces" value="com.csa.service.AccountService"></property><property name="target" ref="accountService"></property><!-- 事務(wù)管理器 --><property name="transactionManager" ref="txManager"></property><!-- 事務(wù)屬性 --><property name="transactionAttributes"><props><prop key="transfer">PROPAGATION_REQUIRED,ISOLATION_DEFAULT</prop></props></property></bean></beans>

    2.3.4、測試

    package com.csa.app; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.csa.service.AccountService;public class App {public static void main(String[] args) {String xmlPath = "applicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);AccountService accountService = (AccountService) applicationContext.getBean("proxyAccountService");accountService.transfer("jack","rose",1000);} }

    2.4、使用AOP來處理事務(wù)

    AOP來處理事務(wù)需要做的事情:

  • 在applicationContext.xml中配置事務(wù)管理器
  • 將事務(wù)管理器當做切面類,應(yīng)該叫做事務(wù)通知
  • 這個事務(wù)通知(切面類)中設(shè)置事務(wù)屬性
  • AOP編程,將事務(wù)通知(切面類)與需要織入的方法關(guān)聯(lián)
  • 我們要做的事情:

  • 2個接口
  • 2個實現(xiàn)類
  • 編寫applicationContext.xml
  • 測試
  • 2.4.1、2個接口

    沒變!

    2.4.2、2個實現(xiàn)類

    沒變!

    2.4.3、編寫applicationContext.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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!-- dataSource --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/transferAccounts"></property><property name="user" value="用戶名"></property><property name="password" value="密碼"></property></bean><!-- dao --><bean id="accountDao" class="com.csa.dao.imp.AccountDaoImp"><property name="dataSource" ref="dataSource"></property></bean><!-- service --><bean id="accountService" class="com.csa.service.imp.AccountServiceImp"><property name="accountDao" ref="accountDao"></property></bean><!-- 1.事務(wù)管理器 --><!-- transactionManager管理器 --><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 2.事務(wù)詳情(事務(wù)通知) , 在aop篩選基礎(chǔ)上,對ABC三個確定使用什么樣的事務(wù)。例如:AC讀寫、B只讀 等<tx:attributes> 用于配置事務(wù)詳情(屬性屬性)<tx:method name=""/> 詳情具體配置propagation 傳播行為 , REQUIRED:必須;REQUIRES_NEW:必須是新的isolation 隔離級別--><tx:advice id="txAdvisor" transaction-manager="txManager"><tx:attributes><tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT"/></tx:attributes></tx:advice><!-- 3.AOP編程,目標類有ABCD(4個連接點),切入點表達式 確定增強的連接器,從而獲得切入點:ABC --><aop:config><aop:advisor advice-ref="txAdvisor" pointcut="execution(* com.csa.service..*.*(..))"/></aop:config></beans>

    2.4.4、測試

    package com.csa.app; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.csa.service.AccountService;public class App {public static void main(String[] args) {String xmlPath = "applicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);AccountService accountService = (AccountService) applicationContext.getBean("accountService");accountService.transfer("jack","rose",1000);} }

    2.5、使用注解來處理事務(wù)

    用注解來處理事務(wù):

  • 在applicationContext.xml中配置注解掃描器。
  • 在需要添加事務(wù)的方法之上,或者類之上添加@Transactional。
  • 我們需要做的事情:

  • 2個接口
  • 2個實現(xiàn)類
  • 配置applicationContext.xml
  • 測試
  • 2.5.1、2個接口

    與上面的一樣,沒變!

    2.5.2、2個實現(xiàn)類

    UserDao沒變,UserService添加了注解

    package com.csa.service.imp; import org.springframework.transaction.annotation.Transactional; import com.csa.dao.AccountDao; import com.csa.service.AccountService;// 在類上面加的話,是作用于這個類的所有方法 @Transactional public class AccountServiceImp implements AccountService {private AccountDao accountDao;public void setAccountDao(AccountDao accountDao) {this.accountDao = accountDao;}// 在方法上面加的話只作用于這個方法。// @Transactional@Overridepublic void transfer(String outer, String inner, int money) {accountDao.out(outer, money);int i = 1/0;accountDao.in(inner, money);}}

    2.5.3、配置applicationContext.xml

    主要編寫一個注解驅(qū)動(掃描器)

    <?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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd"><!-- dataSource --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/transferAccounts"></property><property name="user" value="root"></property><property name="password" value="3306"></property></bean><!-- dao --><bean id="accountDao" class="com.csa.dao.imp.AccountDaoImp"><property name="dataSource" ref="dataSource"></property></bean><!-- service --><bean id="accountService" class="com.csa.service.imp.AccountServiceImp"><property name="accountDao" ref="accountDao"></property></bean><!-- transactionManager管理器 --><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean><!-- 注解驅(qū)動 --><tx:annotation-driven transaction-manager="txManager"/></beans>

    2.5.4、測試

    package com.csa.app;import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.csa.service.AccountService;public class App {public static void main(String[] args) {String xmlPath = "applicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);AccountService accountService = (AccountService) applicationContext.getBean("accountService");accountService.transfer("jack","rose",1000);} }

    至此,spring除了整合沒有說以外,其他的都寫的差不多了!


    參考

    各種博客,各種百度,各種以前的案例,黑馬的筆記等!鏈接太多!

    總結(jié)

    以上是生活随笔為你收集整理的Spring学习总结三的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    国产理论影院 | 狠狠狠狠狠色综合 | 91在线你懂的 | 亚洲精品国产精品国 | 欧美伦理一区二区 | 99精品亚洲| 丁香婷婷色综合亚洲电影 | 亚洲激情校园春色 | 日韩大片在线看 | 亚欧日韩av | 一二三区av | 射九九 | 亚洲成人第一区 | 日韩一区二区三区免费视频 | 久久国产网站 | 日韩精品一区二区电影 | 久久99久久99精品免观看粉嫩 | 中文字幕在线免费观看视频 | h网站免费在线观看 | 中文字幕色婷婷在线视频 | 黄色av一级片 | 国产精品永久久久久久久www | 99久久婷婷国产 | 在线综合色 | 特级西西444www大精品视频免费看 | 久久色在线播放 | 青青河边草免费视频 | 亚洲爱视频 | 99久久久久免费精品国产 | 在线日韩中文字幕 | 一区二区精品在线 | 国产自制av| 国产日韩精品欧美 | 婷婷色综合色 | 欧美永久视频 | 亚洲黑丝少妇 | 天天射天天射天天射 | 久久亚洲专区 | 97理论电影| 免费观看国产精品视频 | 碰超在线| 男女日麻批 | 久久久久免费 | 亚洲一二三在线 | 国产99久久九九精品免费 | 一区二区三区在线观看免费 | 久久久综合九色合综国产精品 | 国产精品伦一区二区三区视频 | 欧美性生爱 | 在线观看日韩免费视频 | 99精品国产高清在线观看 | 91免费日韩 | 欧美激情精品久久久久久 | 丁香花在线观看免费完整版视频 | 欧美日韩亚洲第一 | 国产精品久久久久9999吃药 | 亚洲一区二区精品3399 | 一区二区三区四区五区在线 | 69国产成人综合久久精品欧美 | 亚色视频在线观看 | www五月婷婷 | 六月丁香激情综合色啪小说 | 在线精品在线 | 国产精品第10页 | 日韩动漫免费观看高清完整版在线观看 | 日韩av在线高清 | 美女网站黄在线观看 | 国产亚洲精品无 | 亚洲精品中文字幕在线观看 | 久久久av电影 | 91香蕉视频 mp4 | 久久精品久久久精品美女 | 精品专区一区二区 | 久久综合九色 | 国产精品观看在线亚洲人成网 | www.夜色321.com | 国产视频一级 | 天天综合网久久 | 91精品久久久久久综合五月天 | 99精品欧美一区二区三区黑人哦 | 国产高清av免费在线观看 | 天天爱天天 | 亚洲国产精品电影在线观看 | 777视频在线观看 | 91看毛片 | 91九色最新地址 | 欧美精品免费在线 | 在线a视频 | 9i看片成人免费看片 | 亚洲免费精品一区二区 | 黄色aa久久 | 99国产精品视频免费观看一公开 | 天天操天天干天天操天天干 | 一区二区三区视频在线 | 国产91精品一区二区麻豆亚洲 | 91精品视频免费观看 | 欧美精品在线观看免费 | 免费av的网站 | 久久国产精品视频免费看 | 24小时日本在线www免费的 | 天天爽天天射 | 日韩中文字幕亚洲一区二区va在线 | 91精品爽啪蜜夜国产在线播放 | 高清av网站 | 久久黄色精品视频 | 国产成人精品不卡 | 日日干av | 99久热在线精品视频 | 欧美日韩破处 | 久草在线99 | 涩涩网站在线看 | 久久国产色 | 国产黄色播放 | 国产精品一区二区电影 | 在线 影视 一区 | 香蕉在线视频播放网站 | 免费在线黄网 | 久久精彩免费视频 | 亚洲黄a| 久久99精品久久久久久 | 欧美精品网站 | 黄色亚洲 | 国产视频一区二区在线播放 | 蜜臀av在线一区二区三区 | 午夜精品久久久久久久爽 | 曰本免费av| 96久久欧美麻豆网站 | 国产在线观看免费av | 在线激情小视频 | 最新日韩视频在线观看 | 精品成人久久 | 9热精品 | 欧美在线一二区 | 日本爽妇网 | 91成人精品在线 | www久久精品| 国产精品久久久视频 | 久99久在线 | 久久久国产成人 | 97超碰资源站 | 婷婷亚洲综合五月天小说 | 在线免费高清视频 | 天天操天天操天天干 | 国产在线更新 | 天天射天天做 | 天天综合五月天 | 国产一级高清视频 | 成人一区在线观看 | 亚洲日本欧美在线 | 四虎国产视频 | 国产夫妻性生活自拍 | 色综合久久综合中文综合网 | 黄色福利网站 | 在线观看av大片 | 日韩精品免费在线观看视频 | 国产天天综合 | 久久精品一区二区三区中文字幕 | 日韩精品一区二区久久 | 国产成人精品久久久 | 成人v| 中文字幕日韩国产 | 玖玖在线播放 | www色com | 日韩理论 | 国产精品成久久久久 | 天天爱天天色 | 国产精品久久久久一区二区三区共 | 久久久福利视频 | 亚洲精品免费在线观看视频 | 亚洲精品国产精品国自 | 91成人精品观看 | 久久成人午夜 | 久久精品女人毛片国产 | 国产黄在线 | 日韩精品一区二区三区免费观看视频 | 中文字幕免费高清在线观看 | 久久99精品久久久久久三级 | 人人爽人人爽人人爽学生一级 | 日韩欧美高清不卡 | 国产无套精品久久久久久 | 亚洲另类交 | 欧美一级视频在线观看 | 精品视频久久久久久 | 免费在线观看污 | 超碰人人干人人 | 国产高清在线永久 | 免费欧美高清视频 | 日日操夜夜操狠狠操 | 久久艹欧美 | 欧美亚洲精品在线观看 | 中文字幕在线电影 | av中文字幕网址 | 视频国产精品 | 久久综合九色欧美综合狠狠 | 国产精品av免费在线观看 | 国产在线成人 | 国产精品99精品久久免费 | 69亚洲乱 | 五月网婷婷 | 国产亚洲一区二区在线观看 | free,性欧美 九九交易行官网 | 美女免费黄网站 | 一区二区三区免费播放 | 色婷婷狠狠18 | 久久久久久久久久久久久国产精品 | 欧美日韩高清 | 亚洲精品成人av在线 | av免费电影在线 | 二区精品视频 | 中文字幕.av.在线 | 国产伦理剧| 国产精品激情 | 日日夜夜天天射 | 国产一二区视频 | 亚洲桃花综合 | 亚洲特级片 | 狠狠色狠狠色合久久伊人 | 久久97超碰| 天天综合网久久 | 亚洲一区二区三区精品在线观看 | 六月丁香在线视频 | 奇米影视四色8888 | 少妇视频一区 | 国内揄拍国产精品 | 亚洲精品字幕在线观看 | 久久99国产综合精品 | 国产婷婷一区二区 | 色综合天天色综合 | 午夜电影 电影 | 中文国产在线观看 | 99久久这里有精品 | 成人免费网站在线观看 | 91毛片视频 | 亚洲精品播放 | av女优中文字幕在线观看 | 天天色天 | av直接看| 中文字幕91 | 99爱视频| 国产福利午夜 | 国产精品观看在线亚洲人成网 | 99在线免费观看 | 黄色资源网站 | 国产96av | 国产精品不卡av | 又黄又爽又刺激的视频 | 午夜影院在线观看18 | 黄污网站在线 | 91在线亚洲| 一区二区三区韩国免费中文网站 | 成人a在线观看高清电影 | 亚洲国产成人在线观看 | 偷拍精品一区二区三区 | 又黄又爽的免费高潮视频 | 婷婷视频在线观看 | 成人免费精品 | 精品一区电影 | 国产亚洲高清视频 | 午夜神马福利 | 国产色秀视频 | 黄色三级免费看 | www最近高清中文国语在线观看 | 国产午夜精品在线 | 久久久久夜色 | 国产中文字幕视频在线观看 | 91av在线免费观看 | 四虎在线免费观看 | 狠狠的日 | 国产高清不卡在线 | av在线亚洲天堂 | 久草视频在线资源站 | 99视频免费在线观看 | www黄色av| 偷拍精偷拍精品欧洲亚洲网站 | 国产一级电影免费观看 | 成人午夜影院在线观看 | 国产xxxx| 久久av中文字幕片 | 国产成人免费观看久久久 | 视频 国产区 | 人人躁| 九九热视频在线 | 精品五月天| 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 808电影免费观看三年 | 日韩a在线| 日日夜夜狠狠操 | 国产成人av电影 | 欧美性天天| 日本中文字幕电影在线免费观看 | 欧美aa级 | 日韩在线视频在线观看 | 中文字幕中文字幕在线一区 | 久久午夜精品视频 | 91亚洲精品国产 | 亚洲人成在线电影 | 久久久免费 | 国产片免费在线观看视频 | 久久不见久久见免费影院 | 欧美日韩免费在线视频 | 成人欧美日韩国产 | 国产精品第72页 | 久草视频手机在线 | 在线看片一区 | 国产成人av在线影院 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 人人狠 | 成人 亚洲 欧美 | 黄在线免费观看 | 亚洲一级片免费观看 | 成人av免费网站 | 毛片a级片 | 国产一区久久久 | 日韩欧美视频免费观看 | 国内成人精品视频 | 日日夜夜天天久久 | 91免费高清视频 | 国产尤物一区二区三区 | 91在线视频 | 成人黄色在线电影 | 亚洲 欧美 日韩 综合 | 日产乱码一二三区别在线 | 就要干b | 日精品在线观看 | 国产一级片免费播放 | 日韩国产高清在线 | 中文字幕欧美日韩va免费视频 | 区一区二区三区中文字幕 | 精品国产成人在线影院 | 91日韩精品视频 | 色婷婷成人网 | 亚洲精选视频在线 | 99精品免费在线 | 国内视频一区二区 | 国产在线欧美 | 国产91大片 | 在线免费黄 | 色五月成人 | 欧美另类69 | 国产欧美精品一区二区三区四区 | 国产69久久久 | 在线观看成人av | 狠狠操导航 | 一本之道乱码区 | 免费看亚洲毛片 | 国产亚洲精品久 | 免费av网址在线观看 | 91精品在线视频观看 | 99免费精品视频 | 黄色一级免费电影 | 玖玖视频精品 | 综合色狠狠 | 97爱爱爱| 久久久久久久福利 | 久久人人爽人人人人片 | 香蕉视频国产在线 | 999免费视频 | 亚洲黄网址 | 热久久免费视频精品 | 在线观看中文av | 日韩精品1区2区 | 国内久久精品视频 | 亚洲a色| 中文字幕无吗 | 国产精品岛国久久久久久久久红粉 | 公与妇乱理三级xxx 在线观看视频在线观看 | 99九九99九九九视频精品 | 日韩电影中文字幕 | 91麻豆精品| 国产成人三级在线观看 | 国产精品久久久久久久久免费看 | 99欧美精品 | 色综合天天天天做夜夜夜夜做 | 亚洲精品免费在线播放 | 国产精品亚洲片在线播放 | 国产高清一区二区 | 久久99网站 | 天天干视频在线 | 一区三区在线欧 | 在线免费高清一区二区三区 | 91av在线播放 | 国产精品成人一区二区三区吃奶 | 99久久99热这里只有精品 | 久久9精品| 日韩日韩日韩日韩 | 日日操网站 | 欧美日韩国产在线观看 | 国产中文字幕第一页 | 最新真实国产在线视频 | 欧美成人h版在线观看 | 狠狠色丁香婷婷综合欧美 | 狠狠色丁香 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久人人精品 | 在线观看理论 | 制服丝袜亚洲 | 日本精品久久 | 久久精品国产精品 | 日韩av高潮| 亚洲欧美视频在线播放 | 亚洲综合干 | 国产精品免费高清 | 久久在线精品 | 久久精品国产久精国产 | av免费在线网站 | 91人人揉日日捏人人看 | 久久er99热精品一区二区 | 精品久久久久久久久久久久久久久久久久 | 91精品网站 | 久久久高清一区二区三区 | 91网在线观看 | 国产高清一区二区 | 成人免费在线播放视频 | 亚洲精品免费在线 | 久久手机视频 | 91av在线免费观看 | 中文字幕综合在线 | 日韩午夜三级 | 337p日本大胆噜噜噜噜 | 国产经典三级 | 中文字幕人成不卡一区 | 91理论电影 | www.狠狠色| 九九视频精品免费 | 国产精美视频 | 日韩av男人的天堂 | 天天操天天干天天爽 | 黄色毛片视频免费 | 狠狠五月天 | 成人a免费看| 91 | 中文字幕国内精品 | 97在线成人 | 国产精品原创 | 久久露脸国产精品 | 国产乱码精品一区二区蜜臀 | 97激情影院 | 韩国av在线 | 日韩在线观看第一页 | 精品日韩中文字幕 | 精品久久亚洲 | 欧美日韩视频 | 91精品国产三级a在线观看 | 91片网| av久久在线 | 国产精品久久久久一区二区三区 | 91九色蝌蚪视频在线 | 99一区二区三区 | 精品一区二区久久久久久久网站 | 国产91对白在线播 | av在线免费在线观看 | 韩国av免费观看 | 日韩在线一区二区免费 | 69久久夜色精品国产69 | 在线看片日韩 | 国产精华国产精品 | 天天干天天操av | 乱子伦av| 96久久久| 国产性天天综合网 | 在线看污网站 | 国产一级视屏 | 欧美激情在线网站 | 精品久久久久久亚洲综合网 | 91在线精品播放 | www.狠狠插.com | 色久av| 欧美色婷 | 久久最新网址 | 日韩午夜大片 | 日韩在线视频播放 | 黄网站www | 欧美二区三区91 | 日韩特黄一级欧美毛片特黄 | 在线久热| 97在线视频网站 | 欧美性生活小视频 | 天天爱天天操 | 日本久久久精品视频 | 日日碰狠狠躁久久躁综合网 | 免费福利影院 | av天天色 | 国产精品av免费在线观看 | 亚洲h视频在线 | www国产亚洲精品久久麻豆 | 中文字幕色站 | 日日干狠狠操 | 色婷婷视频在线观看 | 在线看岛国av| 欧美一级电影免费观看 | 午夜精品久久久久久久99无限制 | 久久久久久久久久久国产精品 | 国产特级毛片aaaaaa毛片 | 永久黄网站色视频免费观看w | 色噜噜狠狠狠狠色综合久不 | 久久亚洲精品国产亚洲老地址 | 色91av| 69av国产| 国产毛片久久 | 日韩国产在线观看 | 国产在线观看网站 | 激情五月六月婷婷 | 中文字幕一区二区三区四区久久 | 亚洲精品字幕 | 手机成人在线电影 | 丁香导航 | 国产精品高潮呻吟久久久久 | 一区二区视频在线播放 | 亚洲爱视频 | 天天插天天狠天天透 | 欧美日韩在线视频免费 | 777xxx欧美 | 狠狠色噜噜狠狠狠狠2022 | 婷婷伊人综合亚洲综合网 | 欧美精品一区二区三区四区在线 | 99这里都是精品 | 99久久精品免费看国产麻豆 | 香蕉视频国产在线观看 | 欧美一区二区三区在线播放 | 婷婷精品在线 | 亚洲电影久久久 | 国产中文在线字幕 | 国产在线精品一区二区三区 | 日韩av中文字幕在线 | 成人av在线直播 | 欧美日韩视频 | 国产拍揄自揄精品视频麻豆 | 国产伦精品一区二区三区高清 | 欧美在线aaa | 最新av在线网站 | 999视频网站 | 国产精品久久久久久久久久久免费 | 亚洲国产日韩在线 | 精品国产免费久久 | 久久精品国产成人 | 亚洲美女免费视频 | 美女福利视频 | 日韩精品播放 | 999男人的天堂 | 久久综合狠狠综合 | 国产精品高潮久久av | 日韩欧美在线高清 | 国产又黄又猛又粗 | 99久久这里只有精品 | 欧美精品乱码99久久影院 | 精品亚洲va在线va天堂资源站 | 久久综合干 | 偷拍精偷拍精品欧洲亚洲网站 | 日韩久久网站 | 久久五月婷婷丁香 | 午夜在线观看一区 | av电影在线免费观看 | 久草在线综合网 | 亚洲午夜久久久久久久久 | 黄色片免费看 | 一区二区三区四区在线免费观看 | 国产亚洲精品xxoo | 日本精品va在线观看 | 99c视频在线 | 久久国产精品影视 | 日韩av一区二区三区四区 | 国内精品久久久久影院一蜜桃 | 国产高清专区 | 国产特级毛片aaaaaa毛片 | 99re久久精品国产 | 日日爱网站 | 国产精品精品久久久久久 | 成年免费在线视频 | 成人免费观看视频网站 | 亚洲欧洲av在线 | 亚洲在线黄色 | 亚洲精品久久久蜜桃直播 | 亚洲精品午夜aaa久久久 | 精品久久久久一区二区国产 | 免费看黄在线看 | 婷婷丁香五 | 久久久免费av | 香蕉影院在线 | 亚洲精品动漫久久久久 | 91麻豆精品国产91久久久更新时间 | 日韩欧美高清 | 日韩色一区二区三区 | 国产区免费在线 | 97超碰香蕉 | 成年人黄色免费网站 | 久久国产精品免费 | 二区三区中文字幕 | 久久高清国产视频 | 99热在线国产 | 欧美亚洲成人免费 | 人人爽人人爽人人片av | 最近免费中文字幕 | 国产一级免费av | 国模一区二区三区四区 | 久草免费在线视频观看 | 丁香六月国产 | 99re8这里有精品热视频免费 | 中文字幕激情 | 五月婷婷久久综合 | 国产亚州av | 日韩爱爱网站 | 久热免费在线观看 | 免费国产在线观看 | 视频在线观看一区 | 中文字幕免费观看 | 三级在线视频观看 | 中文字幕在线播放av | 久久香蕉一区 | 奇米影视8888在线观看大全免费 | 探花视频在线观看+在线播放 | 亚洲精品国产品国语在线 | 天天操天天操天天操天天操天天操 | 亚洲高清视频在线 | 中文av一区二区 | 懂色av一区二区三区蜜臀 | 久久久久免费网 | 亚洲视频精选 | 日韩成人免费在线 | 欧美日韩色婷婷 | 日韩欧美网址 | 天天操福利视频 | 国产91九色视频 | 在线看污网站 | 99精品在线免费 | 婷婷六月丁 | 久久精品国产免费 | 久久精品99久久久久久2456 | 欧洲一区二区在线观看 | 久久久福利影院 | 91完整版在线观看 | 91人人澡人人爽人人精品 | 人人干天天射 | 日韩精品一区在线播放 | 国产小视频免费在线观看 | 在线观看涩涩 | 99精品在线免费 | 日本视频网 | 精品国产日本 | 日韩中文字幕视频在线观看 | 国产成人免费网站 | 精品国产伦一区二区三区观看方式 | 一区二区中文字幕在线观看 | 久九视频| 国产精品视频一二三 | 国产香蕉视频 | 国产精品免费观看国产网曝瓜 | 欧美9999| 国产亚洲亚洲 | 国产精品激情在线观看 | 奇米影视8888在线观看大全免费 | 特黄色大片 | 国产在线 一区二区三区 | 婷婷丁香狠狠爱 | 久久久精品在线观看 | 在线亚洲日本 | 一二三久久久 | 日韩一区二区三区视频在线 | 国产精品欧美激情在线观看 | 99精品免费在线 | 五月天精品视频 | 免费三级骚 | 国产传媒一区在线 | 日韩无在线 | 国产黄色一级片在线 | 欧美一区免费在线观看 | 亚洲精品久久久久999中文字幕 | 手机在线欧美 | 国产精品自产拍在线观看桃花 | 夜夜操天天干, | 精品欧美乱码久久久久久 | 日韩欧美在线中文字幕 | 2024国产在线| 国产尤物一区二区三区 | 99国产免费网址 | 亚洲国产日韩欧美在线 | 伊人狠狠色 | 蜜臀久久99精品久久久久久网站 | 国产视频网站在线观看 | 精品免费视频. | a视频免费在线观看 | 天堂网一区二区三区 | 国产成人精品一区二区 | 999久久久精品视频 日韩高清www | 久久精品99国产精品日本 | 在线观看亚洲国产 | 国产免费叼嘿网站免费 | 久久深夜福利免费观看 | 国产中文视 | 天天干,天天操,天天射 | 久久久午夜影院 | 色综合色综合久久综合频道88 | 美女网站视频免费黄 | 国产一区欧美二区 | 日韩专区av| 一区视频在线 | 中文欧美字幕免费 | 久久国产精品99久久人人澡 | 夜夜操天天干, | 日韩夜夜爽 | 成人观看 | 亚洲成人国产精品 | 欧美日产在线观看 | 在线视频观看91 | 黄色av电影一级片 | 成人国产电影在线观看 | 免费观看国产成人 | 亚洲色图27p| 91xav| 国产精品免费视频久久久 | 久久兔费看a级 | 手机在线欧美 | 成人一级电影在线观看 | 精品91| 美州a亚洲一视本频v色道 | 久久视频在线免费观看 | 日韩在线第一 | 国内精品久久久久久久97牛牛 | 欧美日韩成人 | 九九在线视频免费观看 | 欧美伦理一区二区三区 | 中文在线a√在线 | 国产精品久久久久一区二区三区共 | av 在线观看 | 丝袜美腿在线播放 | 色婷婷久久一区二区 | 久久男女视频 | 色婷五月天 | 免费看的黄网站 | 久久久国产精品一区二区中文 | 97在线成人 | 国产精品久久久久久久久久不蜜月 | 一区二区三区国产欧美 | 亚洲成人国产精品 | 青春草国产视频 | 日韩欧美电影在线 | 91在线视频免费播放 | 精品久久网 | 国产精品免费视频一区二区 | 免费久久网 | 国产视频一二区 | 亚洲精品在线二区 | 亚洲精品视频在线免费播放 | 久久综合五月天 | 国产电影黄色av | 国产精品成人免费一区久久羞羞 | 欧美美女激情18p | 日韩有码网站 | 91免费版成人 | 国产成人高清 | 色视频在线观看 | 成人黄色免费观看 | 蜜臀一区二区三区精品免费视频 | 欧美日韩不卡在线 | 在线观看一区 | 国产xxxx性hd极品 | a级一a一级在线观看 | 久久99网| 国产精品videossex国产高清 | 色综合天天色 | 精品一区二区三区久久 | 国产精品久久久久久久久久东京 | 日韩成人中文字幕 | 亚洲精品国产视频 | 午夜色大片在线观看 | 超碰97.com | 久久伊人八月婷婷综合激情 | 中文字幕av有码 | 最新高清无码专区 | 中文字幕电影一区 | 一区二区三区动漫 | www.天天操.com | 91高清完整版在线观看 | 视频二区在线视频 | 麻豆va一区二区三区久久浪 | 激情欧美xxxx | 国产一区二区久久久 | 亚洲精品视频一 | 日韩电影精品一区 | 91视频高清 | 最新国产在线观看 | 亚洲激情av| 亚洲人久久久 | 亚洲人精品午夜 | 色五月成人 | 天天爽天天碰狠狠添 | 日本精品视频免费 | 国产一级片免费观看 | 青青河边草观看完整版高清 | 国产精品你懂的在线观看 | 国产视频黄 | 91视频在线网址 | 国产亚洲精品日韩在线tv黄 | 国产精品99视频 | 久久这里有精品 | 久久精品国产一区二区 | 韩国av一区二区三区 | 91av视频在线免费观看 | 成人黄色片在线播放 | 欧美黄在线 | 色综合亚洲精品激情狠狠 | 日韩www在线 | 亚洲3级 | 国产精品久久久久影视 | 日韩精品免费一线在线观看 | 久久久久久久久影院 | 日本99热| 国产亚洲va综合人人澡精品 | 免费瑟瑟网站 | 婷婷深爱激情 | 在线观看av网 | 亚洲高清久久久 | 五月天综合网站 | 精品一二 | 成人午夜黄色 | 国产精品精品久久久 | 欧美黄污视频 | 国产91精品看黄网站在线观看动漫 | 在线观看爱爱视频 | 亚洲午夜大片 | 久久撸在线视频 | 婷婷激情在线观看 | 亚洲一级黄色av | 99热这里只有精品在线观看 | 久久网站免费 | 狠狠干激情| 不卡视频一区二区三区 | 国产精品色婷婷视频 | 亚洲无线视频 | 国产免费观看久久 | 69国产盗摄一区二区三区五区 | 免费看黄色小说的网站 | 91你懂的 | 91在线视频观看免费 | 欧美日韩在线免费观看视频 | 国产黄色看片 | 日韩在线视频观看 | 亚洲国产精品成人综合 | 免费网站黄色 | 中文字幕文字幕一区二区 | 成人中文字幕+乱码+中文字幕 | 6080yy精品一区二区三区 | 日韩免费 | 国产精品一区二区av麻豆 | 国产原创在线 | 国产精品乱码高清在线看 | 美女在线免费视频 | 中文永久免费观看 | 午夜国产福利在线观看 | 国内精品久久久久国产 | 亚洲精品97| 久久国产精品免费 | 婷婷久月 | 欧美性直播| 天天爽夜夜操 | 亚洲一区二区精品在线 | 欧美日韩一区二区免费在线观看 | 人人爽人人香蕉 | 国产视频综合在线 | 亚洲六月丁香色婷婷综合久久 | 四虎4hu永久免费 | 91中文视频| 亚洲成人av电影 | 国产高清不卡av | 国产成人99av超碰超爽 | 国产九色视频在线观看 | www.午夜 | 中文字幕一区二区在线播放 | 国产亚洲aⅴaaaaaa毛片 | 国内视频在线观看 | 久青草影院 | 亚洲女人av | 午夜三级大片 | 久久综合久久综合这里只有精品 | 日本中文字幕在线一区 | 国产精品视频永久免费播放 | 日韩精品久久中文字幕 | 久草com| 欧美国产日韩一区二区 | 国产精品片 | av播放在线| 美女国内精品自产拍在线播放 | 伊人开心激情 | 免费视频一区二区 | 在线 你懂| 国产精品免费av | 国产精品久久久久久模特 | 少妇性bbb搡bbb爽爽爽欧美 | 久久国产精品精品国产色婷婷 | 亚洲h视频在线 | 99综合电影在线视频 | 免费看成人 | 欧美性色xo影院 | 丰满少妇高潮在线观看 | 国产片免费在线观看视频 | 免费在线观看日韩欧美 | 麻豆91在线看 | 亚洲国产大片 | 手机看片1042| 国产高清视频在线 | 黄色一级大片免费看 | 国产精品成人在线 | av网站免费在线 | 蜜臀久久99精品久久久酒店新书 | 狠狠狠色丁香综合久久天下网 | 天干啦夜天干天干在线线 | 天天操操操操操操 | 五月婷婷一区 | 中文字幕国产精品一区二区 | 欧美性猛片, | 高清不卡免费视频 | 欧美a√大片 | 欧美日韩免费一区二区 | 免费看的黄网站 | 日韩精品一区二区在线观看 | 色综合天天综合 | 视频在线观看亚洲 | 国产精品久久久久久久久久尿 | av黄在线播放 | 亚洲一区二区精品视频 | 园产精品久久久久久久7电影 | 99精品在线观看 | 国产人成免费视频 | 久久综合免费 | 亚洲日日日 | 菠萝菠萝蜜在线播放 | 久久综合色8888 | 狠狠色狠狠色综合系列 | 午夜婷婷综合 | 成人国产亚洲 | 亚洲aaa级| 国产福利在线免费观看 | 亚洲区另类春色综合小说校园片 | 中文字幕区 | 国产精品99久久免费观看 | 色久五月| 91精品1区2区 | 亚洲美女在线国产 | 日韩a在线播放 | 欧美一级特黄aaaaaa大片在线观看 | 亚洲人成免费网站 | 久久精品一二三 | 一本一道久久a久久精品 | 日操操| 国产精品免费观看在线 | 亚洲国产中文字幕在线观看 | www91在线 | 亚洲日本国产精品 | 69夜色精品国产69乱 | 日韩在线观看一区二区三区 | 激情丁香综合五月 | 一区二区视频在线播放 | 色婷婷导航| 超碰在线人 | www.av小说 | 国产精品99爱| 精品一区二区三区久久久 | 久久麻豆精品 | 欧美精品一区二区三区四区在线 | 久久精品免费电影 | 天天色天天干天天色 | 免费亚洲一区二区 | 久久久久久久免费 | 亚洲精品午夜久久久久久久 | 久一在线 | 99热这里有 | 一区二区影院 | 最近中文字幕在线 | 精品亚洲视频在线观看 | 国产伦精品一区二区三区无广告 | 久久99精品久久久久婷婷 | 精品视频久久久久久 | 五月婷婷影视 | 欧美黄污视频 | 国产成人精品综合 | 国产精品9999久久久久仙踪林 | 亚洲精品国产日韩 | 天天爱天天舔 | 一区二区视频在线播放 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 97在线免费 | 国产录像在线观看 | 五月婷激情 | 18+视频网站链接 | 久久午夜精品 | 九月婷婷人人澡人人添人人爽 | 国产在线精品二区 | 福利一区二区 | 久久一区91 | 99精品在线免费视频 | 在线性视频日韩欧美 | 九九热免费在线视频 | 欧美久久久久久久久久 | 成人av免费| 三级av在线免费观看 | 狠狠色噜噜狠狠狠合久 | 午夜少妇 | 精品综合久久久 | 欧美乱大交 |