亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

整合 spring 4(包括mvc、context、orm) + mybatis 3 示例

2019-11-10 16:55:32
字體:
來源:轉載
供稿:網友
作者各必備工具的版本如下:MySQL:5.6.25-log MySQL Community Server (GPL) (下載地址)Tomcat:apache-tomcat-7.0.63 (下載鏈接)java EE - Eclipse:Luna Service Release 1 v4.4.1 (下載鏈接)SPRing:4.2.0.RELEASE (無須下載)MyBatis:3.3.0 (無須下載)JDK:1.7.0_67 (下載鏈接)

項目搭建

第三方包依賴 pom.xml[html] view plain copy print?<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">      <modelVersion>4.0.0</modelVersion>      <groupId>bdp</groupId>      <artifactId>bdp</artifactId>      <version>1.0.0</version>      <packaging>war</packaging>      <name>bdp</name>      <description>Basic Data Platform</description>        <properties>          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>          <spring.version>4.2.0.RELEASE</spring.version>      </properties>        <dependencies>            <!-- spring mvc related.....start --> <!-- TODO: replace jackson with fastjson -->          <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-context</artifactId>              <version>${spring.version}</version>          </dependency>          <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-aop</artifactId>              <version>${spring.version}</version>          </dependency>          <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-webmvc</artifactId>              <version>${spring.version}</version>          </dependency>          <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-web</artifactId>              <version>${spring.version}</version>          </dependency>          <dependency>              <groupId>javax.servlet</groupId>              <artifactId>jstl</artifactId>              <version>1.2</version>          </dependency>          <dependency>              <groupId>commons-logging</groupId>              <artifactId>commons-logging</artifactId>              <version>1.1.3</version>          </dependency>          <dependency>              <groupId>org.codehaus.jackson</groupId>              <artifactId>jackson-mapper-asl</artifactId>              <version>1.9.13</version>          </dependency>          <dependency>              <groupId>com.fasterxml.jackson.core</groupId>              <artifactId>jackson-annotations</artifactId>              <version>2.6.1</version>          </dependency>          <dependency>              <groupId>com.fasterxml.jackson.core</groupId>              <artifactId>jackson-core</artifactId>              <version>2.6.1</version>          </dependency>          <dependency>              <groupId>com.fasterxml.jackson.core</groupId>              <artifactId>jackson-databind</artifactId>              <version>2.6.1</version>          </dependency>          <!-- spring mvc related.....end -->            <!-- mybatis orm related.....start -->          <dependency>              <groupId>org.springframework</groupId>              <artifactId>spring-orm</artifactId>              <version>${spring.version}</version>          </dependency>          <dependency>              <groupId>org.mybatis</groupId>              <artifactId>mybatis-spring</artifactId>              <version>1.2.3</version>          </dependency>          <dependency>              <groupId>mysql</groupId>              <artifactId>mysql-connector-java</artifactId>              <version>5.1.36</version>          </dependency>          <dependency>              <groupId>org.mybatis</groupId>              <artifactId>mybatis</artifactId>              <version>3.3.0</version>          </dependency>          <dependency>              <groupId>c3p0</groupId>              <artifactId>c3p0</artifactId>              <version>0.9.1.2</version>          </dependency>          <!-- mybatis orm related.....end -->              <!-- project log related.....start -->          <dependency>              <groupId>log4j</groupId>              <artifactId>log4j</artifactId>              <version>1.2.17</version>          </dependency>          <!-- project log related.....end -->        </dependencies>        <build>          <plugins>              <plugin>                  <artifactId>maven-compiler-plugin</artifactId>                  <version>3.1</version>                  <configuration>                      <source>1.7</source>                      <target>1.7</target>                  </configuration>              </plugin>              <plugin>                  <artifactId>maven-war-plugin</artifactId>                  <version>2.4</version>                  <configuration>                      <warSourceDirectory>WebContent</warSourceDirectory>                      <failOnMissingWebXml>false</failOnMissingWebXml>                  </configuration>              </plugin>          </plugins>      </build>  </project>  測試用表 CITY_CODE_CN:[sql] view plain copy print?CREATE TABLE `CITY_CODE_CN` (    `ID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵',    `CITY_CODE` CHAR(4) NOT NULL COMMENT '城市代碼》四位阿拉伯數字',    `CITY_JB` TINYINT UNSIGNED NOT NULL COMMENT '城市級別》非空。1:省級;2:地級;3:縣級',    `PROVINCE_CODE` CHAR(4) NOT NULL COMMENT '所在省份代碼》非空',    `STATE` CHAR(1) NOT NULL DEFAULT '1' COMMENT '城市狀態》非空。0:無效城市;1:有效城市',    `CITY_NAME` VARCHAR(50) NOT NULL COMMENT '城市名稱',    `CITY` VARCHAR(50) NOT NULL COMMENT '所在地級市名稱',    `PROVINCE` VARCHAR(50) NOT NULL COMMENT '所在省份名稱',    PRIMARY KEY (`ID`)  ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8 COMMENT '全國城市表';  注意存儲引擎不可以是不支持事務的 MyISAM(InnoDB 和 MyISAM 的區別參考博客《MySql 存儲引擎的選取》)。表 CITY_CODE_CN 映射到的 xml 文件 com.defonds.bdp.city.mapper.CityMapper.xml:[html] view plain copy print?<?xml version="1.0" encoding="UTF-8" ?>  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >  <mapper namespace="com.defonds.bdp.city.mapper.CityMapper" >           <insert id="insertCity" parameterType="com.defonds.bdp.city.bean.City">          insert into city_code_cn (city_code, city_jb, province_code, city_name, city, province)          values ( #{cityCode,jdbcType=CHAR}, #{cityJb,jdbcType=INTEGER}, #{provinceCode,jdbcType=CHAR},          #{cityName,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{province,jdbcType=VARCHAR} )      </insert>  </mapper>  表 CITY_CODE_CN 映射到的 java 文件 com.defonds.bdp.city.bean.City.java:[java] view plain copy print?/**  * File Name:City.java  *  * Copyright Defonds Corporation 2015   * All Rights Reserved  *  */  package com.defonds.bdp.city.bean;    import org.codehaus.jackson.map.annotate.JsonSerialize;    import com.fasterxml.jackson.databind.PropertyNamingStrategy;  import com.fasterxml.jackson.databind.annotation.JsonNaming;    /**  *   * Project Name:bdp  * Type Name:City  * Type Description:  *      1. annotation @JsonSerialize, Entity serialized to json  *      2. annotation @JsonNaming, convert Higher case to under score   *          and Lower case, example: cityCode,   *          after json naming convert, will be city_code  * Author:Defonds  * Create Date:2015-08-28  * @version   *   */  @JsonSerialize  @JsonNaming(PropertyNamingStrategy.LowerCaseWithUnderscoresStrategy.class)    public class City {      private String id;      private String cityCode;      private String provinceCode;      private String cityName;      private String cityJb;      private String city;      private String province;      public String getId() {          return id;      }      public void setId(String id) {          this.id = id;      }      public String getCityCode() {          return cityCode;      }      public void setCityCode(String cityCode) {          this.cityCode = cityCode;      }      public String getCityName() {          return cityName;      }      public void setCityName(String cityName) {          this.cityName = cityName;      }      public String getCityJb() {          return cityJb;      }      public void setCityJb(String cityJb) {          this.cityJb = cityJb;      }      public String getCity() {          return city;      }      public void setCity(String city) {          this.city = city;      }      public String getProvince() {          return province;      }      public void setProvince(String province) {          this.province = province;      }      public String getProvinceCode() {          return provinceCode;      }      public void setProvinceCode(String provinceCode) {          this.provinceCode = provinceCode;      }  }  處理所有 MyBatis 的配置文件的配置文件 mybatis-config.xml:[html] view plain copy print?<?xml version="1.0" encoding="UTF-8"?>  <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">  <configuration>      <settings>          <setting name="mapUnderscoreToCamelCase" value="true"/>      </settings>  </configuration>  無須將每個小配置單獨導入,mapUnderscoreToCamelCase 是把 db CITY_CODE_CN 的下劃線字段和 java 實體 bean 的駝峰標識相互轉化。Spring 上下文配置文件 bdp-applicationContext.xml:[html] view plain copy print?<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"       xmlns:tx="http://www.springframework.org/schema/tx"      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd          http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">                <!-- mybatis related... start -->      <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">          <property name="locations">              <list>                  <!-- 這里支持多種尋址方式:classpath和file -->                  <value>classpath:jdbc.properties</value>                  <!-- 推薦使用file的方式引入,這樣可以將配置和代碼分離 -->              </list>          </property>      </bean>      <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource "          destroy-method="close">          <property name="driverClass" value="com.mysql.jdbc.Driver" />          <property name="jdbcUrl" value="jdbc:mysql://${jdbc.host}:${jdbc.port}/${jdbc.database}?useUnicode=true&amp;characterEncoding=utf8" />          <property name="user" value="${jdbc.username}" />          <property name="passWord" value="${jdbc.password}" />          <property name="acquireIncrement" value="1" />          <property name="initialPoolSize" value="5" />          <property name="maxPoolSize" value="20" />          <property name="minPoolSize" value="5" />          <property name="maxStatements" value="100" />          <property name="testConnectionOnCheckout" value="true" />      </bean>      <bean id="sqlsessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">          <property name="dataSource" ref="dataSource" />          <property name="configLocation" value="/WEB-INF/classes/mybatis-config.xml" />      </bean>      <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">          <property name="basePackage" value="com.defonds.bdp.*.mapper"/>      </bean>      <!-- mybatis related... end -->        <!-- class annotation related... start -->      <context:component-scan base-package="com.defonds.bdp.*.service" />      <!-- class annotation related... end -->      <context:annotation-config />            <!-- transaction config related... start -->      <tx:annotation-driven transaction-manager="transactionManager" />      <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">          <property name="dataSource" ref="dataSource" />      </bean>      <!-- transaction config related... end -->  </beans>  Spring MVC 配置文件 bdpmvc-servlet.xml:[html] view plain copy print?<?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:p="http://www.springframework.org/schema/p"      xmlns:context="http://www.springframework.org/schema/context"      xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-4.0.xsd  http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-4.0.xsd">         <!-- class annotation related... start -->      <context:component-scan base-package="com.defonds.bdp.*.controller" />      <!-- class annotation related... end -->         <!-- jsp page related... start -->      <bean id="viewResolver"          class="org.springframework.web.servlet.view.UrlBasedViewResolver">          <property name="viewClass"              value="org.springframework.web.servlet.view.JstlView" />          <property name="prefix" value="/WEB-INF/jsp/" />          <property name="suffix" value=".jsp" />      </bean>      <!-- jsp page related... end -->            <!-- rest json related... start -->      <bean id="mappingJacksonHttpMessageConverter"            class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">          <property name="supportedMediaTypes">              <list>                  <value>application/json;charset=UTF-8</value>              </list>          </property>      </bean>      <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">          <property name="messageConverters">              <list>                  <ref bean="mappingJacksonHttpMessageConverter"/>              </list>          </property>      </bean>      <!-- rest json related... end -->  </beans>  將所有 Spring 配置文件注冊到 web.xml:[html] view plain copy print?<?xml version="1.0" encoding="UTF-8"?>  <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xmlns="http://java.sun.com/xml/ns/javaee"      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"      id="WebApp_ID" version="3.0">      <display-name>bdp</display-name>      <welcome-file-list>          <welcome-file>index.jsp</welcome-file>      </welcome-file-list>        <context-param>          <param-name>contextConfigLocation</param-name>          <param-value>/WEB-INF/classes/*-applicationContext.xml</param-value>      </context-param>      <listener>          <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>      </listener>        <servlet>          <servlet-name>bdpmvc</servlet-name>          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>          <init-param>              <param-name>contextConfigLocation</param-name>              <param-value>/WEB-INF/classes/*-servlet.xml</param-value>          </init-param>          <load-on-startup>1</load-on-startup>      </servlet>      <servlet-mapping>          <servlet-name>bdpmvc</servlet-name>          <url-pattern>*.json</url-pattern>          <url-pattern>*.html</url-pattern>      </servlet-mapping>  </web-app>  數據庫連接配置文件 jdbc.properties:[plain] view plain copy print?jdbc.host=192.168.1.30  jdbc.database=bdpdb  jdbc.port=3306  jdbc.username=bdpdev  jdbc.password=xqder798  log4j 配置文件 log4j.properties:[plain] view plain copy print?# Global logging configuration  log4j.rootLogger=WARN,stdout  log4j.logger.com.defonds=DEBUG     log4j.rootLogger=WARN,stdout     # Console output...  log4j.appender.stdout=org.apache.log4j.ConsoleAppender  log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c:%L - %m%n  測試用 mapper 文件 com.defonds.bdp.city.mapper.CityMapper.java:[java] view plain copy print?/**  * File Name:CityMapper.java  *  * Copyright Defonds Corporation 2015   * All Rights Reserved  *  */  package com.defonds.bdp.city.mapper;    import com.defonds.bdp.city.bean.City;    /**  *   * Project Name:bdp  * Type Name:CityMapper  * Type Description:  * Author:Defonds  * Create Date:2015-08-31  * @version   *   */  public interface CityMapper {      public void insertCity(City city);  }  服務層處理類 com.defonds.bdp.city.service.CityService.java:[java] view plain copy print?/**  * File Name:CityService.java  *  * Copyright Defonds Corporation 2015   * All Rights Reserved  *  */  package com.defonds.bdp.city.service;    import org.apache.commons.logging.Log;  import org.apache.commons.logging.LogFactory;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Service;  import org.springframework.transaction.annotation.Propagation;  import org.springframework.transaction.annotation.Transactional;    import com.defonds.bdp.city.bean.City;  import com.defonds.bdp.city.mapper.CityMapper;    /**  *   * Project Name:bdp  * Type Name:CityService  * Type Description:  * Author:Defonds  * Create Date:2015-08-31  * @version   *   */  @Service  @Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)  public class CityService {       private final Log logger = LogFactory.getLog(this.getClass());      @Autowired      private CityMapper cityMapper;            public void insertCity() {          City city = new City();          city.setCityCode("1100");          city.setCityJb("1");           city.setProvinceCode("1100");          city.setCityName("天津市");          city.setCity("天津市");          city.setProvince("天津市");          logger.debug("before insert the first city");          cityMapper.insertCity(city);          logger.debug("after insert the first city, and before insert the second city");          cityMapper.insertCity(new City()); // this will throw an exception          logger.debug("after insert the second city");      }  }  最后的是 mvc controller 文件 com.defonds.bdp.city.controller.CityController.java:[java] view plain copy print?/**  * File Name:CityController.java  *  * Copyright Defonds Corporation 2015   * All Rights Reserved  *  */  package com.defonds.bdp.city.controller;    import java.util.ArrayList;  import java.util.List;    import org.apache.commons.logging.Log;  import org.apache.commons.logging.LogFactory;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.ResponseBody;  import org.springframework.web.servlet.ModelAndView;    import com.defonds.bdp.city.bean.City;  import com.defonds.bdp.city.service.CityService;    /**  *   * Project Name:bdp  * Type Name:CityController  * Type Description:  * Author:Defonds  * Create Date:2015-08-27  * @version   *   */  @Controller  @RequestMapping("/city")  public class CityController {      private final Log logger = LogFactory.getLog(this.getClass());            @Autowired      private CityService cityService;            @RequestMapping("/welcome")      public ModelAndView helloWorld() {             String message = "<br><div style='text-align:center;'>"                  + "<h3>********** Hello World, Spring MVC Tutorial</h3>This message is coming from CityController.java **********</div><br><br>";          return new ModelAndView("welcome", "message", message);      }            /**      * provinceCities(這里用一句話描述這個方法的作用)      * TODO(這里描述這個方法適用條件 – 可選)      * TODO(這里描述這個方法的執行流程 – 可選)      * TODO(這里描述這個方法的使用方法 – 可選)      * TODO(這里描述這個方法的注意事項 – 可選)      * @param   name      * @param  @return    設定文件      * @return String    DOM對象      * @Exception 異常對象      * @since  CodingExample Ver(編碼范例查看) 1.0.0      */       @RequestMapping("/province/cities")      @ResponseBody      public Object provinceCities() {                    List<City> list = new ArrayList<City>();          City city1 = new City();          city1.setId("126");          city1.setCity("濟南市");          city1.setCityCode("4510");          city1.setCityJb("省級");          city1.setCityName("濟南市");          city1.setProvince("山東省");                    list.add(city1);                    City city2 = new City();          city2.setId("127");          city2.setCity("濟南市");          city2.setCityCode("4510");          city2.setCityJb("縣級");          city2.setCityName("商河縣");          city2.setProvince("山東省");                    list.add(city2);                    return list;      }            @RequestMapping("/create")      @ResponseBody      public Integer create() {          try {              this.cityService.insertCity();              return 1;          } catch (Exception e) {              logger.error(e);          }          return 0;                }  }  我們來看一下我們的 dbp 項目結構:dbp 項目結構.png

事務測試

訪問事務測試頁面如下:訪問事務測試頁面.png控制臺打印日志:2015-08-31 18:29:13 DEBUG com.defonds.bdp.city.service.CityService:45 - before insert the first city2015-08-31 18:29:13 DEBUG com.defonds.bdp.city.mapper.CityMapper.insertCity:54 - ==>  Preparing: insert into city_code_cn (city_code, city_jb, province_code, city_name, city, province) values ( ?, ?, ?, ?, ?, ? ) 2015-08-31 18:29:13 DEBUG com.defonds.bdp.city.mapper.CityMapper.insertCity:54 - ==> Parameters: 1100(String), 1(String), 1100(String), 天津市(String), 天津市(String), 天津市(String)2015-08-31 18:29:13 DEBUG com.defonds.bdp.city.mapper.CityMapper.insertCity:54 - <==    Updates: 12015-08-31 18:29:13 DEBUG com.defonds.bdp.city.service.CityService:47 - after insert the first city, and before insert the second city2015-08-31 18:29:13 DEBUG com.defonds.bdp.city.mapper.CityMapper.insertCity:54 - ==>  Preparing: insert into city_code_cn (city_code, city_jb, province_code, city_name, city, province) values ( ?, ?, ?, ?, ?, ? ) 2015-08-31 18:29:13 DEBUG com.defonds.bdp.city.mapper.CityMapper.insertCity:54 - ==> Parameters: null, null, null, null, null, null2015-08-31 18:29:13 ERROR com.defonds.bdp.city.controller.CityController:97 - org.springframework.dao.DataIntegrityViolationException: ### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'CITY_CODE' cannot be null### The error may involve com.defonds.bdp.city.mapper.CityMapper.insertCity-Inline### The error occurred while setting parameters### SQL: insert into city_code_cn (city_code, city_jb, province_code, city_name, city, province)         values ( ?, ?, ?,         ?, ?, ? )### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'CITY_CODE' cannot be null; SQL []; Column 'CITY_CODE' cannot be null; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'CITY_CODE' cannot be null查看 db 的 CITY_CODE_CN 表,沒有新記錄插入,spring 4 + mybatis 3 成功。

源碼下載

本文側重講 spring ioc、orm 和 mybatis 的事務集成,有評論問關于 spring mvc 的相關配置,請參考另一篇專門講 spring mvc 搭建的博客《零基礎搭建 spring mvc 4 項目(本文基于 Servlet 3.0)》,本文就是在該文基礎上進行進一步添加了 service 和 dao 層的擴展而已。本文示例項目源碼已共享到 CSDN 資源,有興趣的朋友可以去下載下來參考:http://download.csdn.net/detail/defonds/9068147。

參考資料

http://edwin.baculsoft.com/2015/01/a-simple-spring-4-and-mybatis-transaction-example/http://zhaozhiming.github.io/blog/2014/11/15/spring4-and-mybatis/
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲视频在线免费观看| 日韩国产高清视频在线| 日韩精品极品在线观看播放免费视频| 国内精品400部情侣激情| 色综合天天综合网国产成人网| 欧美天天综合色影久久精品| 91免费高清视频| 亚洲欧美成人一区二区在线电影| 国产精品伦子伦免费视频| 91亚洲精品一区二区| 亚洲精品一区在线观看香蕉| 午夜精品久久久久久久久久久久久| 亚洲欧洲日韩国产| 超碰91人人草人人干| 一本色道久久综合狠狠躁篇的优点| 精品女同一区二区三区在线播放| 国内精品一区二区三区| 国自产精品手机在线观看视频| 欧美电影免费观看高清| 国产91精品青草社区| 欧美中文字幕视频| 九九热最新视频//这里只有精品| 亚洲欧美在线一区| 亚洲sss综合天堂久久| 成人在线中文字幕| 色婷婷亚洲mv天堂mv在影片| 亚洲韩国日本中文字幕| 亚洲一区二区久久久久久久| 亚洲成人精品久久| 国产色婷婷国产综合在线理论片a| 91精品视频一区| 欧美激情精品久久久久久黑人| 亚洲男人天天操| 欧美大片va欧美在线播放| 欧美—级a级欧美特级ar全黄| 色综合久久悠悠| 亚洲精品综合精品自拍| 久久精品这里热有精品| 国产欧美日韩中文字幕在线| 在线观看成人黄色| 国产精品女人久久久久久| 欧美色另类天堂2015| 精品亚洲一区二区三区在线观看| 亚洲国产精品久久久| 国产suv精品一区二区三区88区| 久久久精品国产亚洲| 国语自产偷拍精品视频偷| 国产日产亚洲精品| 亚洲国产美女久久久久| 2019中文字幕在线免费观看| 久久影院免费观看| 热99精品只有里视频精品| 欧美精品久久久久久久久| 欧美风情在线观看| 欧美性猛交xxxx| 亚洲精品综合久久中文字幕| 中文字幕免费国产精品| 欧美成人在线网站| 欧美日韩亚洲视频| 91香蕉国产在线观看| 97在线视频观看| 人人澡人人澡人人看欧美| 欧美国产高跟鞋裸体秀xxxhd| 一区二区三区 在线观看视| 日本一区二区在线播放| 一本色道久久88亚洲综合88| 91亚洲精品在线观看| 555www成人网| 成人日韩在线电影| 美女啪啪无遮挡免费久久网站| 日韩电影中文字幕一区| 亚洲free性xxxx护士白浆| 日韩免费观看网站| 5252色成人免费视频| 国产精品综合网站| 亚洲专区在线视频| 欧美最猛性xxxxx亚洲精品| 国产精品久久久久久av福利软件| 91在线国产电影| 欧美小视频在线| 久久久精品999| 国模私拍视频一区| 亚洲自拍另类欧美丝袜| 亚洲高清福利视频| 最近2019免费中文字幕视频三| 国产精品精品久久久| 国产成人综合一区二区三区| 亚洲人午夜精品免费| 91夜夜揉人人捏人人添红杏| 国模gogo一区二区大胆私拍| 国产成+人+综合+亚洲欧美丁香花| 久久久亚洲影院| 日本欧美在线视频| 国产欧美在线播放| 日韩高清中文字幕| 亚州av一区二区| 欧美成人精品不卡视频在线观看| 国产欧美一区二区三区视频| 国产精品一区二区久久久| 色与欲影视天天看综合网| 亚洲欧美中文在线视频| 久久精品国产一区| 国产精品吹潮在线观看| 中文字幕亚洲综合久久筱田步美| 一本一本久久a久久精品综合小说| 日韩成人在线视频观看| 久久精品国产成人精品| 欧美激情精品在线| 97av在线视频| 在线精品播放av| 国产91精品久久久久久久| 欧美日韩在线另类| 久久国产精品久久久| 亚洲91av视频| 久久精品久久久久久国产 免费| 热久久这里只有精品| 成人性生交大片免费看视频直播| 欧美激情日韩图片| 日韩av网站电影| 亚洲国产精品va在线看黑人动漫| 日韩欧美在线视频免费观看| 欧美日韩一区二区三区在线免费观看| 国产在线视频2019最新视频| 中文字幕在线视频日韩| 亚洲综合第一页| 福利一区福利二区微拍刺激| 亚洲精品美女在线| 亚洲视频在线观看网站| 精品国产区一区二区三区在线观看| 亚洲bt欧美bt日本bt| 久久高清视频免费| 成人国产精品色哟哟| 亚洲第一精品福利| 精品成人69xx.xyz| 777国产偷窥盗摄精品视频| 国产精品一区二区三区久久| 欧美午夜精品久久久久久人妖| 日韩av高清不卡| 免费不卡欧美自拍视频| 日本亚洲欧美三级| 欧美日韩在线观看视频| 亚洲石原莉奈一区二区在线观看| 亚洲一区二区中文| 95av在线视频| 久久久天堂国产精品女人| 在线一区二区日韩| 亚洲欧美在线免费观看| 麻豆国产va免费精品高清在线| 亚洲新中文字幕| 国产日产久久高清欧美一区| 国产精品免费一区| 精品偷拍一区二区三区在线看| 欧美极品少妇与黑人| 欧美日韩国产色视频| 日韩成人av在线播放| 成人av资源在线播放| 日韩久久免费视频| 久久久影视精品| 136fldh精品导航福利| 久久精品亚洲国产| 亚洲成人精品视频| 91老司机精品视频| 欧美日韩精品在线视频| 国产午夜一区二区|