欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

MyBatis集成方法是什么

這篇文章主要介紹“MyBatis集成方法是什么”,在日常操作中,相信很多人在MyBatis集成方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”MyBatis集成方法是什么”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

站在用戶的角度思考問題,與客戶深入溝通,找到固安網(wǎng)站設(shè)計(jì)與固安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋固安地區(qū)。

1 概述

MyBaits是一個(gè)著名的持久層框架,本文首先介紹了MyBatis的簡單使用,接著與Spring進(jìn)行整合,最后簡單地使用了Generator去自動(dòng)生成代碼。

2 MyBatis簡介

MyBatis本來是Apache的一個(gè)開源項(xiàng)目——iBatis,2010年由Apaceh Software Foundation遷移到了Google Code,并改名為MyBatis

MyBatis是一個(gè)基于Java的持久層框架,提供的持久層框架包括SQL MapsData Access Objects,使用簡單的XML或者注解用于配置映射,將接口和POJO映射成數(shù)據(jù)庫中的記錄,是一個(gè)小巧、方便、高效、簡單、直接、半自動(dòng)化的持久層框架。

3 工作原理

上圖:

MyBatis集成方法是什么

  • 讀取配置文件:mybatis-config.xml是全局MyBatis配置文件,配置了MyBatis運(yùn)行環(huán)境信息

  • 加載映射文件:也就是SQL映射文件,配置了操作數(shù)據(jù)庫的SQL語句

  • 構(gòu)造會(huì)話工廠:通過配置文件構(gòu)造會(huì)話工廠SqlSessionFactory

  • 創(chuàng)建會(huì)話對(duì)象:由上一步的會(huì)話工廠創(chuàng)建會(huì)話對(duì)象SqlSession

  • 獲取MapperStatement:通過用戶調(diào)用的apiStatement ID獲取MapperStatement對(duì)象

  • 輸入?yún)?shù)映射:通過Executor對(duì)MapperStatement進(jìn)行解析,將各種Java基本類型轉(zhuǎn)化為SQL操作語句中的類型

  • 輸出結(jié)果映射:JDBC執(zhí)行SQL后,借助MapperStatement的映射關(guān)系將返回結(jié)果轉(zhuǎn)化為Java基本類型并返回

4 MyBatis示例

首先先來看一下純MyBaits的示例,沒有整合Spring,一個(gè)簡單的Maven工程,項(xiàng)目結(jié)構(gòu)如下:

MyBatis集成方法是什么

4.1 依賴

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

<!--驅(qū)動(dòng)用的是MySQL,版本請(qǐng)自行修改-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>

Gradle

compile group: 'org.mybatis', name: 'mybatis', version: '3.5.5'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21'

4.2 實(shí)體類

@Setter
@Getter
@Builder
public class User {
    private Integer id;
    private String name;

    @Override
    public String toString() {
        return "id:"+id+"\tname:"+name;
    }
}

4.3 映射文件

新建一個(gè)叫UserMapper.xml的映射文件:

<?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="UserMapper">
    <select id="selectById" parameterType="Integer" resultType="pers.entity.User">
        select * from user where id=#{id}
    </select>
    <select id="selectAll" resultType="pers.entity.User">
        select * from user
    </select>

    <insert id="insert" parameterType="pers.entity.User">
        INSERT INTO `user` (`id`,`name`)
        VALUES (#{id},#{name})
    </insert>

    <update id="update" parameterType="pers.entity.User">
        UPDATE `user` set `name`=#{name} where id=#{id}
    </update>

    <delete id="delete" parameterType="Integer">
        DELETE FROM `user` WHERE `id` = #{id}
    </delete>
</mapper>

映射文件是一個(gè)XML文件,根元素為<mapper>,需要注意其中的namespace屬性,調(diào)用的時(shí)候通過該namespace調(diào)用。其中的子元素表示SQL語句:

  • <select>:查詢,id指定了這條語句的id號(hào),調(diào)用時(shí)通過namespace.id的方式調(diào)用,比如該條select需要通過UserMapper.selectById調(diào)用,parameterType指定參數(shù)類型,這里是一個(gè)Integer的參數(shù),resultType指定返回類型,實(shí)體類

  • <insert>/<update>/<delete>:對(duì)應(yīng)的插入/修改/刪除語句

  • 關(guān)于占位符:#{}表示是占位符,相當(dāng)于傳統(tǒng)JDBC中的?#{id}表示該占位符等待接收的參數(shù)名稱為id

4.4 配置文件

MyBatis的配置文件,叫mybatis-config.xml

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="test"/>
                <property name="password" value="test"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="mapper/UserMapper.xml" />
    </mappers>
</configuration>

指定了數(shù)據(jù)庫的一些連接屬性還有mapper的位置。

4.5 測試

public class Main {
    public static void main(String[] args) {
        try
        {
            InputStream inputStream = Resources.getResourceAsStream("config/mybatis-config.xml");
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession session = factory.openSession();
            User user = session.selectOne("UserMapper.selectById",1);
            System.out.println(user);
            User user1 = User.builder().name("test").build();
            session.insert("UserMapper.insert",user1);
            user1.setName("222");
            session.update("UserMapper.update",user1);
            List<User> list = session.selectList("UserMapper.selectAll");
            list.forEach(System.out::println);
            session.delete("UserMapper.delete",1);
            session.commit();
            session.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

主要流程如下:

  • 讀取配置文件:根據(jù)org.apache.ibatis.io.Resources讀取配置文件mybatis-config.xml,請(qǐng)注意配置文件的位置正確,這里的配置文件都放在resources下,mybatis-config.xml放在其中的config

  • 構(gòu)建Session:根據(jù)配置文件構(gòu)建SqlSessionFactory后,通過openSession創(chuàng)建Session

  • 業(yè)務(wù)操作:通過sessionselectOne/insert/update等進(jìn)行業(yè)務(wù)操作,這類操作帶兩個(gè)參數(shù),第一個(gè)參數(shù)是String,表示配置文件中的SQL語句,采用namespace.id的形式,比如這里的UserMapper.xml中聲明namespaceUserMapper,其中帶有一條idselectByIdselect語句,因此調(diào)用時(shí)使用UserMapper.selectById的形式,第二個(gè)參數(shù)是一個(gè)Object,表示要傳遞的參數(shù),也就是綁定到配置文件中對(duì)應(yīng)占位符的值

  • 提交與關(guān)閉:業(yè)務(wù)操作完成后提交事務(wù)并關(guān)閉session

示例測試結(jié)果:

MyBatis集成方法是什么

5 Spring整合示例

上面的例子只是為了演示MyBatis的基本使用,沒有整合Spring,這里的例子是把Spring整合進(jìn)來,流程也大概差不多,項(xiàng)目結(jié)構(gòu)如下:

MyBatis集成方法是什么

5.1 依賴

分為5類JAR

  • MyBatis需要的JAR

  • Spring需要的JAR

  • MyBatisSpring整合的中間JAR

  • 數(shù)據(jù)庫驅(qū)動(dòng)JAR

  • 數(shù)據(jù)源JAR

完整依賴如下:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.12</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>5.2.9.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.5</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.5</version>
</dependency>

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.8.0</version>
</dependency>

Gradle

compile group: 'org.springframework', name: 'spring-beans', version: '5.2.9.RELEASE'
compile group: 'org.springframework', name: 'spring-context', version: '5.2.9.RELEASE'
compile group: 'org.springframework', name: 'spring-core', version: '5.2.9.RELEASE'
compile group: 'org.springframework', name: 'spring-tx', version: '5.2.9.RELEASE'
compile group: 'org.springframework', name: 'spring-jdbc', version: '5.2.9.RELEASE'
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.21'
compile group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.8.0'
compile group: 'org.mybatis', name: 'mybatis', version: '3.5.5'
compile group: 'org.mybatis', name: 'mybatis-spring', version: '2.0.5'

5.2 配置文件

配置文件分為三類:

  • MyBatis映射文件:編寫mapper的地方,也就是業(yè)務(wù)需要的SQL語句

  • MyBatis全局配置文件:由于整合了Spring,數(shù)據(jù)源的配置放在了Spring的配置文件中,而只需要保留mapper的查找位置

  • Spring配置文件:配置數(shù)據(jù)源+事務(wù)管理+MyBaitssqlSssionFactory+組件掃描

5.2.1 MyBatis映射文件

與上面的例子差不多,只是修改了namespace包名.類名的形式:

<?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="pers.dao.UserDao">
    <select id="selectById" parameterType="Integer" resultType="pers.entity.User">
        select * from user where id=#{id}
    </select>
    <select id="selectAll" resultType="pers.entity.User">
        select * from user
    </select>

    <insert id="insert" parameterType="pers.entity.User">
        INSERT INTO `user` (`id`,`name`)
        VALUES (#{id},#{name})
    </insert>

    <update id="update" parameterType="pers.entity.User">
        UPDATE `user` set `name`=#{name} where id=#{id}
    </update>

    <delete id="delete" parameterType="Integer">
        DELETE FROM `user` WHERE `id` = #{id}
    </delete>
</mapper>

namespace需要與對(duì)應(yīng)包名的帶有@Mapper的類配置一致。

5.2.2 MyBatis配置文件

<?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>
    <mappers>
        <mapper resource="mapper/UserMapper.xml" />
    </mappers>
</configuration>

5.2.3 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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd"
       >

    <context:component-scan base-package="pers.dao"/>
    <context:component-scan base-package="pers.service"/>
    <!--數(shù)據(jù)源-->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="test"/>
        <property name="password" value="test"/>
        <!--最大連接數(shù)+最大空閑數(shù)+初始連接數(shù)-->
        <property name="maxTotal" value="30"/>
        <property name="maxIdle" value="10"/>
        <property name="initialSize" value="5"/>
    </bean>
    
    <!--事務(wù)管理-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource"  ref="dataSource"/>
    </bean>

	<!--開啟事務(wù)注解-->
    <tx:annotation-driven transaction-manager="txManager" />

	<!--創(chuàng)建SqlSessionFactory Bean-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:config/mybatis-config.xml"/>
    </bean>

	<!--注解掃描,主要用于@Mapper,會(huì)掃描basePackge下的@Mapper注解的接口并自動(dòng)裝配為MyBatis的映射接口-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="pers.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
</beans>

5.3 持久層

需要加上@Mapper注解,表示自動(dòng)裝配為MyBatis的映射接口,注意:

  • 映射文件中的namespace需要與包名.類名對(duì)應(yīng),比如這里的包為pers.dao,類名為UserDao,那么映射文件中的namespacepers.dao.UserDao

  • id需要與方法名對(duì)應(yīng),比如映射文件中的有一條select語句的idselectById,那么方法就需要命名為selectById,且參數(shù)類型需要對(duì)應(yīng)一致

@Repository
@Mapper
public interface UserDao {
    User selectById(Integer id);
    List<User> selectAll();
    int insert(User user);
    int update(User user);
    int delete(Integer id);
}

5.4 業(yè)務(wù)層

@Service
@Transactional
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class MyBatisService {
    private final UserDao dao;

    public void test(){
        User user = dao.selectById(13);
        System.out.println(user);
        dao.insert(User.builder().name("333").build());
        dao.update(User.builder().name("88888").id(13).build());
        dao.selectAll().forEach(System.out::println);
        dao.delete(12);
        dao.selectAll().forEach(System.out::println);
    }
}

注入UserDao后進(jìn)行簡單的測試,結(jié)果如下:

MyBatis集成方法是什么

6 自動(dòng)生成代碼

相信很多程序員也討厭寫又長又麻煩的XML配置文件,因此,MyBatis也提供了一個(gè)生成器插件,可以直接從表中生成實(shí)體類、dao接口以及映射文件,可以省去很多操作。

步驟如下:

  • 導(dǎo)入依賴

  • 編寫Generator配置文件

  • 生成代碼

6.1 依賴

其實(shí)就是加入一個(gè)插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.4.0</version>
            <configuration>
                <!-- 在控制臺(tái)打印執(zhí)行日志 -->
                <verbose>true</verbose>
                <!-- 重復(fù)生成時(shí)會(huì)覆蓋之前的文件-->
                <overwrite>true</overwrite>
                <configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.21</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

數(shù)據(jù)庫驅(qū)動(dòng)請(qǐng)對(duì)應(yīng)修改。

至于Gradle版請(qǐng)看Kotlin版源碼。

6.2 配置文件

這里是參考別人的配置文件,修改數(shù)據(jù)庫連接、表名、包名即可:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- context 是逆向工程的主要配置信息 -->
    <!-- id:起個(gè)名字 -->
    <!-- targetRuntime:設(shè)置生成的文件適用于那個(gè) mybatis 版本 -->
    <context id="default" targetRuntime="MyBatis3">
        <!--optional,指在創(chuàng)建class時(shí),對(duì)注釋進(jìn)行控制-->
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自動(dòng)生成的注釋 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--jdbc的數(shù)據(jù)庫連接 wg_insert 為數(shù)據(jù)庫名字-->
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="test" password="test" />
        <!--非必須,類型處理器,在數(shù)據(jù)庫類型和java類型之間的轉(zhuǎn)換控制-->
        <javaTypeResolver>
            <!-- 默認(rèn)情況下數(shù)據(jù)庫中的 decimal,bigInt 在 Java 對(duì)應(yīng)是 sql 下的 BigDecimal 類 -->
            <!-- 不是 double 和 long 類型 -->
            <!-- 使用常用的基本類型代替 sql 包下的引用類型 -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- targetPackage:生成的實(shí)體類所在的包 -->
        <!-- targetProject:生成的實(shí)體類所在的硬盤位置 -->
        <javaModelGenerator targetPackage="pers.entity"
                            targetProject="src/main/java">
            <!-- 是否允許子包 -->
            <property name="enableSubPackages" value="false"/>
            <!-- 是否對(duì)modal添加構(gòu)造函數(shù) -->
            <property name="constructorBased" value="true"/>
            <!-- 是否清理從數(shù)據(jù)庫中查詢出的字符串左右兩邊的空白字符 -->
            <property name="trimStrings" value="true"/>
            <!-- 建立modal對(duì)象是否不可改變 即生成的modal對(duì)象不會(huì)有setter方法,只有構(gòu)造方法 -->
            <property name="immutable" value="false"/>
        </javaModelGenerator>
        <!-- targetPackage 和 targetProject:生成的 mapper 文件的包和位置 -->
        <sqlMapGenerator targetPackage="mapper"
                         targetProject="src/main/resources">
            <!-- 針對(duì)數(shù)據(jù)庫的一個(gè)配置,是否把 schema 作為字包名 -->
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>
        <!-- targetPackage 和 targetProject:生成的 interface 文件的包和位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="pers.dao" targetProject="src/main/java">
        </javaClientGenerator>
        <!-- tableName是數(shù)據(jù)庫中的表名,domainObjectName是生成的JAVA模型名,后面的參數(shù)不用改,要生成更多的表就在下面繼續(xù)加table標(biāo)簽 -->
        <table tableName="user" domainObjectName="User"
               enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false"
               selectByExampleQueryId="false" />
    </context>
</generatorConfiguration>

6.3 生成代碼

MyBatis集成方法是什么

雙擊生成即可:

MyBatis集成方法是什么

生成了實(shí)體類、dao接口以及mapper文件。

到此,關(guān)于“MyBatis集成方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

網(wǎng)站題目:MyBatis集成方法是什么
文章出自:http://aaarwkj.com/article4/jeepie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站排名網(wǎng)站改版、微信公眾號(hào)、定制開發(fā)、動(dòng)態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
亚洲熟妇人妻一区二区三区| 久久一二三四区中文字幕| 亚洲欧美日韩一区中文字幕| 未满十八禁止观看免费| 亚洲欧美日韩精品一区二| 日韩欧美一区二区麻豆| 视频精品一区二区在线观看| 国产国语久久91老女人| 国产高清不卡午夜福利| 亚洲成人午夜激情在线| 亚洲精品一区二区日本| 国产剧情av专业在线观看| av天堂中文一区二区三区| 日韩欧美亚洲国产另类| 国产亚洲男人av一区三区| 国产中文字幕婷婷丁香| 熟妇人妻中文字幕在线| 亚洲欧美另类不卡专区| 久久精品噜噜噜成人av农村| 美女张开腿让男人插进去| 97资源在线公开视频| 国产精品国产三级区别| 在线免费观看日韩黄片| 中文字幕人妻熟人妻熟丝| 播放欧美日韩特黄大片| 精品一区2区3区4区| 美女网站色在线免费观看午夜精品| 国产精品国产亚洲精品| 午夜夫妻生活视频在线观看| 国产亚洲综合久久系列| 亚洲成色在线综合剧情网站| 精品久久少妇激情视频| 萌白的所有视频在线观看| 黄色录像一级大片中国的| 亚洲日本精品免费在线观看 | 日本黄色中文字幕网站| 国产尹人99大香蕉| 国产在线播放精品视频| 国产精品日韩伦理一区二区| 亚洲一区免费在线视频| 亚洲精品主播一区二区三区|