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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis 高级结果映射 ResultMap Association Collection

發布時間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis 高级结果映射 ResultMap Association Collection 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:http://www.verydemo.com/demo_c152_i1880.html

MyBatis的創建基于這樣一個思想:數據庫并不是您想怎樣就怎樣的。雖然我們希望所有的數據庫遵守第三范式或BCNF(修正的第三范式),但它們不是。如果有一個數據庫能夠完美映射到所有應用程序,也將是非常棒的,但也沒有。結果映射就是MyBatis為解決這些問題而提供的解決方案。例如,我們如何映射下面這條語句?

查看文本打印?
  • <!--?Very?Complex?Statement?-->??
  • <select?id="selectBlogDetails"?parameterType="int"?resultMap="detailedBlogResultMap">??
  • select??
  • B.id?as?blog_id,??
  • B.title?as?blog_title,??
  • B.author_id?as?blog_author_id,??
  • A.id?as?author_id,??
  • A.username?as?author_username,??
  • A.password?as?author_password,??
  • A.email?as?author_email,??
  • A.bio?as?author_bio,??
  • A.favourite_section?as?author_favourite_section,??
  • P.id?as?post_id,??
  • P.blog_id?as?post_blog_id,??
  • P.author_id?as?post_author_id,??
  • P.created_on?as?post_created_on,??
  • P.section?as?post_section,??
  • P.subject?as?post_subject,??
  • P.draft?as?draft,??
  • P.body?as?post_body,??
  • C.id?as?comment_id,??
  • C.post_id?as?comment_post_id,??
  • C.name?as?comment_name,??
  • C.comment?as?comment_text,??
  • T.id?as?tag_id,??
  • T.name?as?tag_name??
  • from?Blog?B??
  • left?outer?join?Author?A?on?B.author_id?=?A.id??
  • left?outer?join?Post?P?on?B.id?=?P.blog_id??
  • left?outer?join?Comment?C?on?P.id?=?C.post_id??
  • left?outer?join?Post_Tag?PT?on?PT.post_id?=?P.id??
  • left?outer?join?Tag?T?on?PT.tag_id?=?T.id??
  • where?B.id?=?#{id}??
  • </select>??
  • <wbr>??
  • 您可能想要把它映射到一個智能的對象模型,包括由一個作者寫的一個博客,有許多文章(Post,帖子),每個文章由0個或者多個評論和標簽。下面是一個復雜ResultMap?的完整例子(假定作者、博客、文章、評論和標簽都是別名)。仔細看看這個例子,但是不用太擔心,我們會一步步地來分析,一眼看上去可能讓人沮喪,但是實際上非常簡單的

    查看文本打印?
  • <!--?Very?Complex?Result?Map?-->??
  • <resultMap?id="detailedBlogResultMap"?type="Blog">??
  • <constructor>??
  • <idArg?column="blog_id"?javaType="int"/>??
  • </constructor>??
  • <result?property="title"?column="blog_title"/>??
  • <association?property="author"?column="blog_author_id"?javaType="?Author">??
  • <id?property="id"?column="author_id"/>??
  • <result?property="username"?column="author_username"/>??
  • <result?property="password"?column="author_password"/>??
  • <result?property="email"?column="author_email"/>??
  • <result?property="bio"?column="author_bio"/>??
  • <result?property="favouriteSection"?column="author_favourite_section"/>??
  • </association>??
  • <collection?property="posts"?ofType="Post">??
  • <id?property="id"?column="post_id"/>??
  • <result?property="subject"?column="post_subject"/>??
  • <association?property="author"?column="post_author_id"?javaType="Author"/>??
  • <collection?property="comments"?column="post_id"?ofType="?Comment">??
  • <id?property="id"?column="comment_id"/>??
  • </collection>??
  • <collection?property="tags"?column="post_id"?ofType="?Tag"?>??
  • <id?property="id"?column="tag_id"/>??
  • </collection>??
  • <discriminator?javaType="int"?column="draft">??
  • <case?value="1"?resultType="DraftPost"/>??
  • </discriminator>??
  • </collection>??
  • </resultMap>?<wbr>??
  • 這個resultMap?的元素的子元素比較多,討論起來比較寬泛。下面我們從概念上概覽一下這個resultMap的元素。

    ?

    resultMap

    ·constructor實例化的時候通過構造器將結果集注入到類中

    oidArg– ID?參數;?將結果集標記為ID,以方便全局調用

    oarg注入構造器的結果

    ·id結果ID,將結果集標記為ID,以方便全局調用

    ·result注入一個字段或者javabean屬性的結果

    ·association復雜類型聯合;許多查詢結果合成這個類型

    o嵌套結果映射– associations能引用自身,或者從其它地方引用

    ·collection復雜類型集合

    o嵌套結果映射– collections能引用自身,或者從其它地方引用

    ·discriminator使用一個結果值以決定使用哪個resultMap

    ocase基于不同值的結果映射

    §嵌套結果映射–case也能引用它自身,?所以也能包含這些同樣的元素。它也可以從外部引用resultMap

    ?

    è最佳實踐:逐步地生成resultMap,單元測試對此非常有幫助。如果您嘗試一下子就生成像上面這樣巨大的resultMap,可能會出錯,并且工作起來非常吃力。從簡單地開始,再一步步地擴展,并且進行單元測試。使用框架開發有一個缺點,它們有時像是一個黑合。為了確保達到您所預想的行為,最好的方式就是進行單元測試。這對提交bugs?也非常有用。

    ?

    下一節,我們一步步地查看這些細節。

    id, result元素

    <id property="id" column="post_id"/>

    <result property="subject" column="post_subject"/>

    ?

    這是最基本的結果映射id?和result?將列映射到屬性或簡單的數據類型字段(String, int, double, Date)

    這兩者唯一不同的是,在比較對象實例時id?作為結果集的標識屬性。這有助于提高總體性能,特別是應用緩存和嵌套結果映射的時候。

    ?

    Idresult屬性如下:

    ?

    Attribute

    Description

    property

    映射數據庫列的字段或屬性。如果JavaBean?的屬性與給定的名稱匹配,就會使用匹配的名字。否則,MyBatis?將搜索給定名稱的字段。兩種情況下您都可以使用逗點的屬性形式。比如,您可以映射到“username”,也可以映射到“address.street.number”

    column

    數據庫的列名或者列標簽別名。與傳遞給resultSet.getString(columnName)的參數名稱相同。

    javaType

    完整java類名或別名(參考上面的內置別名列表)。如果映射到一個JavaBean,那MyBatis?通常會自行檢測到。然而,如果映射到一個HashMap,那您應該明確指定javaType?來確保所需行為。

    jdbcType

    這張表下面支持的JDBC類型列表列出的JDBC類型。這個屬性只在insertupdatedelete?的時候針對允許空的列有用。JDBC?需要這項,但MyBatis?不需要。如果您直接編寫JDBC代碼,在允許為空值的情況下需要指定這個類型。

    typeHandler

    我們已經在文檔中討論過默認類型處理器。使用這個屬性可以重寫默認類型處理器。它的值可以是一個TypeHandler實現的完整類名,也可以是一個類型別名。

    支持的JDBC類型

    MyBatis支持如下的JDBC類型:

    BIT

    FLOAT

    CHAR

    TIMESTAMP

    OTHER

    UNDEFINED

    TINYINT

    REAL

    VARCHAR

    BINARY

    BLOB

    NVARCHAR

    SMALLINT

    DOUBLE

    LONGVARCHAR

    VARBINARY

    CLOB

    NCHAR

    INTEGER

    NUMERIC

    DATE

    LONGVARBINARY

    BOOLEAN

    NCLOB

    BIGINT

    DECIMAL

    TIME

    NULL

    CURSOR

    ?

    ?

    Constructor元素

    <constructor>

    <idArg column="id" javaType="int"/>

    <arg column=”username” javaType=”String”/>

    </constructor>

    ?

    當屬性與DTO,或者與您自己的域模型一起工作的時候,許多場合要用到不變類。通常,包含引用,或者查找的數據很少或者數據不會改變的的表,適合映射到不變類中。構造器注入允許您在類實例化后給類設值,這不需要通過public方法。MyBatis同樣也支持private屬性和JavaBeans的私有屬性達到這一點,但是一些用戶可能更喜歡使用構造器注入。構造器元素可以做到這點。

    ?

    考慮下面的構造器:

    ?

    public class User {

    //…

    public User(int id, String username) {

    //…

    }

    //…

    }

    ?

    為了將結果注入構造器,MyBatis需要使用它的參數類型來標記構造器。Java沒有辦法通過參數名稱來反射獲得。因此當創建constructor?元素,確保參數是按順序的并且指定了正確的類型。

    ?

    <constructor>

    <idArg column="id" javaType="int"/>

    <arg column=”username” javaType=”String”/>

    </constructor>

    ?

    其它的屬性與規則與idresult元素的一樣。

    ?

    Attribute

    Description

    column

    數據庫的列名或者列標簽別名。與傳遞給resultSet.getString(columnName)的參數名稱相同。

    javaType

    完整java類名或別名(參考上面的內置別名列表)。如果映射到一個JavaBean,那MyBatis?通常會自行檢測到。然而,如果映射到一個HashMap,那您應該明確指定javaType?來確保所需行為。

    jdbcType

    支持的JDBC類型列表中列出的JDBC類型。這個屬性只在insert,update?或delete?的時候針對允許空的列有用。JDBC?需要這項,但MyBatis?不需要。如果您直接編寫JDBC代碼,在允許為空值的情況下需要指定這個類型。

    typeHandler

    我們已經在文檔中討論過默認類型處理器。使用這個屬性可以重寫默認類型處理器。它的值可以是一個TypeHandler實現的完整類名,也可以是一個類型別名。

    Association元素

    <association property="author" column="blog_author_id" javaType=" Author">

    <id property="id" column="author_id"/>

    <result property="username" column="author_username"/>

    </association>

    Association元素處理“has-one”(一對一)這種類型關系。比如在我們的例子中,一個Blog有一個Author。聯合映射與其它的結果映射工作方式差不多,指定propertycolumnjavaType(通常MyBatis會自動識別)、jdbcType(如果需要)、typeHandler

    不同的地方是您需要告訴MyBatis?如何加載一個聯合查詢。MyBatis使用兩種方式來加載:

    ·Nested Select:通過執行另一個返回預期復雜類型的映射SQL語句(即引用外部定義好的SQL語句塊)。

    ·Nested Results:通過嵌套結果映射nested result mappings)來處理聯接結果集(joined results)的重復子集。

    首先,讓我們檢查一下元素屬性。正如您看到的,它不同于普通只有selectresultMap屬性的結果映射

    Attribute

    Description

    property

    映射數據庫列的字段或屬性。如果JavaBean?的屬性與給定的名稱匹配,就會使用匹配的名字。否則,MyBatis?將搜索給定名稱的字段。兩種情況下您都可以使用逗點的屬性形式。比如,您可以映射”username”,也可以映射到更復雜點的”address.street.number”

    column

    數據庫的列名或者列標簽別名。與傳遞給resultSet.getString(columnName)的參數名稱相同。

    注意: 在處理組合鍵時,您可以使用column= “{prop1=col1,prop2=col2}”這樣的語法,設置多個列名傳入到嵌套查詢語句。這就會把prop1prop2設置到目標嵌套選擇語句的參數對象中。

    javaType

    完整java類名或別名(參考上面的內置別名列表)。如果映射到一個JavaBean,那MyBatis?通常會自行檢測到。然而,如果映射到一個HashMap,那您應該明確指定javaType?來確保所需行為。

    jdbcType

    支持的JDBC類型列表中列出的JDBC類型。這個屬性只在insert,update?或delete?的時候針對允許空的列有用。JDBC?需要這項,但MyBatis?不需要。如果您直接編寫JDBC代碼,在允許為空值的情況下需要指定這個類型。

    typeHandler

    我們已經在文檔中討論過默認類型處理器。使用這個屬性可以重寫默認類型處理器。它的值可以是一個TypeHandler實現的完整類名,也可以是一個類型別名。

    聯合嵌套選擇(Nested Select for Association

    select

    通過這個屬性,通過ID引用另一個加載復雜類型的映射語句。從指定列屬性中返回的值,將作為參數設置給目標select?語句。表格下方將有一個例子。注意:在處理組合鍵時,您可以使用column={prop1=col1,prop2=col2}”這樣的語法,設置多個列名傳入到嵌套語句。這就會把prop1prop2設置到目標嵌套語句的參數對象中。

    ?例如:??

    查看文本打印?
  • <resultMap?id=”blogResult”?type=”Blog”>??
  • <association?property="author"?column="blog_author_id"?javaType="Author"??
  • select=”selectAuthor”/>??
  • </resultMap>??
  • ???
  • <select?id=”selectBlog”?parameterType=”int”?resultMap=”blogResult”>??
  • SELECT?*?FROM?BLOG?WHERE?ID?=?#{id}??
  • </select>??
  • ???
  • <select?id=”selectAuthor”?parameterType=”int”?resultType="Author">??
  • SELECT?*?FROM?AUTHOR?WHERE?ID?=?#{id}??
  • </select>??
  • <wbr>??
  • 我們使用兩個select語句:一個用來加載Blog,另一個用來加載AuthorBlogresultMap?描述了使用“selectAuthor”語句來加載author的屬性。

    如果列名和屬性名稱相匹配的話,所有匹配的屬性都會自動加載。

    ?

    譯者注:

    上面的例子,首先執行<select id=selectBlog”>,執行結果存放到<resultMap id=blogResult”>結果映射中。“blogResult”是一個Blog類型,從<select id=selectBlog”>查出的數據都會自動賦值給”blogResult”的與列名匹配的屬性,這時blog_idtitle等就被賦值了。同時“blogResult”還有一個關聯屬性"Author",執行嵌套查詢select=”selectAuthor”后,Author對象的屬性idusernamepasswordemailbio也被賦于數據庫匹配的值。

    ?

    Blog

    {

    blog_id;

    title;

    Author author

    {

    id;

    username;

    password;

    email;

    bio;

    ?

    }

    ?

    }

    ?

    雖然這個方法簡單,但是對于大數據集或列表查詢,就不盡如人意了。這個問題被稱為“N+1?選擇問題”(N+1 Selects Problem)。概括地說,N+1選擇問題是這樣產生的:

    ·您執行單條SQL語句去獲取一個列表的記錄( “+1”)

    ·對列表中的每一條記錄,再執行一個聯合select?語句來加載每條記錄更加詳細的信息(“N”)

    這個問題會導致成千上萬的SQL語句的執行,因此并非總是可取的。

    上面的例子,MyBatis可以使用延遲加載這些查詢,因此這些查詢立馬可節省開銷。然而,如果您加載一個列表后立即迭代訪問嵌套的數據,這將會調用所有的延遲加載,因此性能會變得非常糟糕。

    鑒于此,這有另外一種方式。

    聯合嵌套結果集(Nested Results for Association)?

    resultMap

    一個可以映射聯合嵌套結果集到一個適合的對象視圖上的ResultMap?。這是一個替代的方式去調用另一個select?語句。它允許您去聯合多個表到一個結果集里。這樣的結果集可能包括冗余的、重復的需要分解和正確映射到一個嵌套對象視圖的數據組。簡言之,MyBatis?讓您把結果映射‘鏈接’到一起,用來處理嵌套結果。舉個例子會更好理解,例子在表格下方。

    您已經在上面看到了一個非常復雜的嵌套聯合的例子,接下的演示的例子會更簡單一些。我們把BlogAuthor表聯接起來查詢,而不是執行分開的查詢語句:

    查看文本打印?
  • <select?id="selectBlog"?parameterType="int"?resultMap="blogResult">??
  • select??
  • B.id?as?blog_id,??
  • B.title?as?blog_title,??
  • B.author_id?as?blog_author_id,??
  • A.id?as?author_id,??
  • A.username?as?author_username,??
  • A.password?as?author_password,??
  • A.email?as?author_email,??
  • A.bio?as?author_bio??
  • from?Blog?B?left?outer?join?Author?A?on?B.author_id?=?A.id??
  • where?B.id?=?#{id}??
  • </select>?<wbr>??
  • 注意到這個連接(join),要確保所有的別名都是唯一且無歧義的。這使映射容易多了,現在我們來映射結果集:

    查看文本打印?
  • <resultMap?id="blogResult"?type="Blog">??
  • <id?property=”blog_id”?column="id"?/>??
  • <result?property="title"?column="blog_title"/>??
  • <association?property="author"?column="blog_author_id"?javaType="Author"??
  • resultMap=”authorResult”/>??
  • </resultMap>??
  • ???
  • <resultMap?id="authorResult"?type="Author">??
  • <id?property="id"?column="author_id"/>??
  • <result?property="username"?column="author_username"/>??
  • <result?property="password"?column="author_password"/>??
  • <result?property="email"?column="author_email"/>??
  • <result?property="bio"?column="author_bio"/>??
  • </resultMap>?<wbr>??
  • 在上面的例子中,您會看到Blog的作者(“author”)聯合一個“authorResult”結果映射來加載Author實例。

    重點提示:id元素在嵌套結果映射中扮演了非常重要的角色,您應該總是指定一個或多個屬性來唯一標識這個結果集。事實上,如果您沒有那樣做,MyBatis也會工作,但是會導致嚴重性能開銷。選擇盡量少的屬性來唯一標識結果,而使用主鍵是最明顯的選擇(即使是復合主鍵)。

    上面的例子使用一個擴展的resultMap?元素來聯合映射。這可使Author結果映射可重復使用。然后,如果您不需要重用它,您可以直接嵌套這個聯合結果映射。下面例子就是使用這樣的方式:?

    查看文本打印?
  • <resultMap?id="blogResult"?type="Blog">??
  • <id?property=”blog_id”?column="id"?/>??
  • <result?property="title"?column="blog_title"/>??
  • <association?property="author"?column="blog_author_id"?javaType="Author">??
  • <id?property="id"?column="author_id"/>??
  • <result?property="username"?column="author_username"/>??
  • <result?property="password"?column="author_password"/>??
  • <result?property="email"?column="author_email"/>??
  • <result?property="bio"?column="author_bio"/>??
  • </association>??
  • </resultMap>?<wbr>??
  • 在上面的例子中您已經看到如果處理“一對一”(“has one”)類型的聯合查詢。但是對于“一對多”(“has many”)的情況如果處理呢?這個問題在下一節討論。

    Collection元素?

    查看文本打印?
  • <collection?property="posts"?ofType="domain.blog.Post">??
  • <id?property="id"?column="post_id"/>??
  • <result?property="subject"?column="post_subject"/>??
  • <result?property="body"?column="post_body"/>??
  • </collection>??
  • <wbr>??
  • collection元素的作用差不多和association元素的作用一樣。事實上,它們非常相似,以至于再對相似點進行描述會顯得冗余,因此我們只關注它們的不同點。

    繼續我們上面的例子,一個Blog只有一個Author。但一個Blog有許多帖子(文章)。在Blog類中,會像下面這樣定義相應屬性:?

    private List<Post> posts;

    映射一個嵌套結果集到一個列表,我們使用collection元素。就像association?元素那樣,我們使用嵌套查詢,或者從連接中嵌套結果集。?

    集合嵌套選擇(Nested Select for Collection

    首先我們使用嵌套選擇來加載Blog的文章。?

    查看文本打印?
  • <resultMap?id=”blogResult”?type=”Blog”>??
  • <collection?property="posts"?javaType=”ArrayList”?column="blog_id"??
  • ofType="Post"?select=”selectPostsForBlog”/>??
  • </resultMap>??
  • ???
  • <select?id=”selectBlog”?parameterType=”int”?resultMap=”blogResult”>??
  • SELECT?*?FROM?BLOG?WHERE?ID?=?#{id}??
  • </select>??
  • ???
  • <select?id=”selectPostsForBlog”?parameterType=”int”?resultType="Author">??
  • SELECT?*?FROM?POST?WHERE?BLOG_ID?=?#{id}??
  • </select>?<wbr>??
  • 一看上去這有許多東西需要注意,但大部分看起與我們在association元素中學過的相似。首先,您會注意到我們使用了collection元素,然后會注意到一個新的屬性“ofType”。這個元素是用來區別JavaBean屬性(或者字段)類型和集合所包括的類型。因此您會讀到下面這段代碼。

    ?

    <collection property="posts" javaType=”ArrayList” column="blog_id"

    ofType="Post" select=”selectPostsForBlog”/>

    è理解為:“一個名為posts,類型為PostArrayList集合(A collection of posts in an ArrayList of type Post)” 。

    javaType屬性不是必須的,通常MyBatis?會自動識別,所以您通常可以簡略地寫成:

    <collection property="posts" column="blog_id" ofType="Post"

    select=”selectPostsForBlog”/>



    集合的嵌套結果集(Nested Results for Collection

    這時候,您可能已經猜出嵌套結果集是怎樣工作的了,因為它與association非常相似,只不過多了一個屬性“ofType”

    讓我們看下這個SQL:?

    查看文本打印?
  • <select?id="selectBlog"?parameterType="int"?resultMap="blogResult">??
  • select??
  • B.id?as?blog_id,??
  • B.title?as?blog_title,??
  • B.author_id?as?blog_author_id,??
  • P.id?as?post_id,??
  • P.subject?as?post_subject,??
  • P.body?as?post_body,??
  • from?Blog?B??
  • left?outer?join?Post?P?on?B.id?=?P.blog_id??
  • where?B.id?=?#{id}??
  • </select>??
  • <wbr>??
  • 同樣,我們把BlogPost兩張表連接在一起,并且也保證列標簽名在映射的時候是唯一且無歧義的。現在將BlogPost的集合映射在一起是多么簡單:

    查看文本打印?
  • <resultMap?id="blogResult"?type="Blog">??
  • <id?property=”id”?column="blog_id"?/>??
  • <result?property="title"?column="blog_title"/>??
  • <collection?property="posts"?ofType="Post">??
  • <id?property="id"?column="post_id"/>??
  • <result?property="subject"?column="post_subject"/>??
  • <result?property="body"?column="post_body"/>??
  • </collection>??
  • </resultMap>??
  • 再次強調一下,id?元素是非常重要的。如果您忘了或者不知道id?元素的作用,請先讀一下上面association?一節。

    如果希望結果映射有更好的可重用性,您可以使用下面的方式:

    查看文本打印?
  • <resultMap?id="blogResult"?type="Blog">??
  • <id?property=”id”?column="blog_id"?/>??
  • <result?property="title"?column="blog_title"/>??
  • <collection?property="posts"?ofType="Post"?resultMap=”blogPostResult”/>??
  • </resultMap>??
  • ???
  • <resultMap?id="blogPostResult"?type="Post">??
  • <id?property="id"?column="post_id"/>??
  • <result?property="subject"?column="post_subject"/>??
  • <result?property="body"?column="post_body"/>??
  • </resultMap>??
  • èNote:在您的映射中沒有深度、寬度、聯合和集合數目的限制。但應該謹記,在進行映射的時候也要考慮性能的因素。應用程序的單元測試和性能測試幫助您發現最好的方式可能要花很長時間。但幸運的是,MyBatis允許您以后可以修改您的想法,這時只需要修改少量代碼就行了。

    關于高級聯合和集合映射是一個比較深入的課題,文檔只能幫您了解到這里,多做一些實踐,一切將很快變得容易理解。

    Discriminator元素

    <discriminator javaType="int" column="draft">

    <case value="1" resultType="DraftPost"/>

    </discriminator>

    ?

    有時候一條數據庫查詢可能會返回包括各種不同的數據類型的結果集。Discriminator(識別器)元素被設計來處理這種情況,以及其它像類繼承層次情況。識別器非常好理解,它就像java里的switch語句。

    ?

    Discriminator定義要指定columnjavaType屬性。列是MyBatis將要取出進行比較的值,javaType用來確定適當的測試是否正確運行(雖然String在大部分情況下都可以工作),例:??

    查看文本打印?
  • <resultMap?id="vehicleResult"?type="Vehicle">??
  • <id?property=”id”?column="id"?/>??
  • <result?property="vin"?column="vin"/>??
  • <result?property="year"?column="year"/>??
  • <result?property="make"?column="make"/>??
  • <result?property="model"?column="model"/>??
  • <result?property="color"?column="color"/>??
  • <discriminator?javaType="int"?column="vehicle_type">??
  • <case?value="1"?resultMap="carResult"/>??
  • <case?value="2"?resultMap="truckResult"/>??
  • <case?value="3"?resultMap="vanResult"/>??
  • <case?value="4"?resultMap="suvResult"/>??
  • </discriminator>??
  • </resultMap>??
  • <wbr>??
  • 在這個例子中,MyBatis將會從結果集中取出每條記錄,然后比較它的vehicle type的值。如果匹配任何discriminator中的case,它將使用由case指定的resultMap。這是排它性的,換句話說,其它的caseresultMap將會被忽略(除非使用我們下面說到的extended)。如果沒有匹配到任何caseMyBatis只是簡單的使用定義在discriminator塊外面的resultMap。所以,如果carResult像下面這樣定義:

    ?

    <resultMap id="carResult" type="Car">

    <result property=”doorCount” column="door_count" />

    </resultMap>

    ?

    那么,只有doorCount屬性會被加載。這樣做是為了與識別器cases群組完全獨立開來,哪怕它與上一層的resultMap?一點關系都沒有。在剛才的例子里我們當然知道carsvehicles的關系,a Car is-a Vehicle。因此,我們也要把其它屬性加載進來。我們要稍稍改動一下resultMap

    ?

    <resultMap id="carResult" type="Car"extends=”vehicleResult”>

    <result property=”doorCount” column="door_count" />

    </resultMap>

    ?

    現在,vehicleResultcarResult的所有屬性都會被加載。

    可能有人會認為這樣擴展映射定義有一點單調了,所以還有一種可選的更加簡單明了的映射風格語法。例如:

    查看文本打印?
  • <resultMap?id="vehicleResult"?type="Vehicle">??
  • <id?property=”id”?column="id"?/>??
  • <result?property="vin"?column="vin"/>??
  • <result?property="year"?column="year"/>??
  • <result?property="make"?column="make"/>??
  • <result?property="model"?column="model"/>??
  • <result?property="color"?column="color"/>??
  • <discriminator?javaType="int"?column="vehicle_type">??
  • <case?value="1"?resultType="carResult">??
  • <result?property=”doorCount”?column="door_count"?/>??
  • </case>??
  • <case?value="2"?resultType="truckResult">??
  • <result?property=”boxSize”?column="box_size"?/>??
  • <result?property=”extendedCab”?column="extended_cab"?/>??
  • </case>??
  • <case?value="3"?resultType="vanResult">??
  • <result?property=”powerSlidingDoor”?column="power_sliding_door"?/>??
  • </case>??
  • <case?value="4"?resultType="suvResult">??
  • <result?property=”allWheelDrive”?column="all_wheel_drive"?/>??
  • </case>??
  • </discriminator>??
  • </resultMap>?<wbr>??
  • è記住:對于這么多的結果映射,如果您不指定任何的結果集,那么MyBatis?會自動地將列名與屬性相匹配。所以上面所舉的例子比實際中需要的要詳細。盡管如此,大部分數據庫有點復雜,并且它并不是所有情況都是完全可以適用的。

    Cache元素

    MyBatis包含一個強大的、可配置、可定制的查詢緩存機制。MyBatis 3?的緩存實現有了許多改進,使它更強大更容易配置。默認的情況,緩存是沒有開啟,除了會話緩存以外,它可以提高性能,且能解決循環依賴。開啟二級緩存,您只需要在SQL映射文件中加入簡單的一行:

    ?

    <cache/>

    ?

    這句簡單的語句作用如下:

    ·所有映射文件里的select語句的結果都會被緩存。

    ·所有映射文件里的insertupdatedelete語句執行都會清空緩存。

    ·緩存使用最近最少使用算法(LRU)來回收

    ·緩存不會被設定的時間所清空。

    ·每個緩存可以存儲1024?個列表或對象的引用(不管查詢方法返回的是什么)。

    ·緩存將作為“讀/寫”緩存,意味著檢索的對象不是共享的且可以被調用者安全地修改,而不會被其它調用者或者線程干擾。

    所有這些特性都可以通過cache元素進行修改。例如:

    <cache

    eviction="FIFO"

    flushInterval="60000"

    size="512"

    readOnly="true"/>

    ?

    這種高級的配置創建一個每60秒刷新一次的FIFO?緩存,存儲512結果對象或列表的引用,并且返回的對象是只讀的。因此在不用的線程里的調用者修改它們可能會引用沖突。

    ?

    可用的回收算法如下:

    ·LRU最近最少使用:移出最近最長時間內都沒有被使用的對象。

    ·FIFO先進先出:移除最先進入緩存的對象。

    ·SOFT軟引用:?基于垃圾回收機制和軟引用規則來移除對象(空間內存不足時才進行回收)。

    ·WEAK弱引用:基于垃圾回收機制和弱引用規則(垃圾回收器掃描到時即進行回收)。

    默認使用LRU

    flushInterval:設置任何正整數,代表一個以毫秒為單位的合理時間。默認是沒有設置,因此沒有刷新間隔時間被使用,在語句每次調用時才進行刷新。

    Size屬性可以設置為一個正整數,您需要留意您要緩存對象的大小和環境中可用的內存空間。默認是1024

    readOnly屬性可以被設置為true?或false。只讀緩存將對所有調用者返回同一個實例。因此這些對象都不能被修改,這可以極大的提高性能。可寫的緩存將通過序列化來返回一個緩存對象的拷貝。這會比較慢,但是比較安全。所以默認值是false

    ?

    使用自定義緩存

    除了上面已經定義好的緩存方式,您能夠通過您自己的緩存實現來完全重寫緩存行為,或者通過創建第三方緩存解決方案的適配器。

    <cache type=”com.domain.something.MyCustomCache”/>

    這個例子演示了如果自定義緩存實現。由type指定的類必須實現org.mybatis.cache.Cache接口。這個接口是MyBatis框架比較復雜的接口之一,先給個示例:

    public interface Cache {

    String getId();

    int getSize();

    void putObject(Object key, Object value);

    Object getObject(Object key);

    boolean hasKey(Object key);

    Object removeObject(Object key);

    void clear();

    ReadWriteLock getReadWriteLock();

    }

    ?

    要配置您的緩存,簡單地添加一個公共的JavaBeans?屬性到您的緩存實現中,然后通過cache?元素設置屬性進行傳遞,下面示例,將在您的緩存實現上調用一個setCacheFile(String file)方法。

    ?

    <cache type=”com.domain.something.MyCustomCache”>

    <property name=”cacheFile” value=”/tmp/my-custom-cache.tmp”/>

    </cache>

    ?

    您可以使用所有簡單的JavaBeans屬性,MyBatis會自動進行轉換。

    需要牢記的是一個緩存配置和緩存實例都綁定到一個SQL Map?文件命名空間。因此,所有的這個相同命名空間的語句也都和這個緩存綁定。語句可以修改如何與這個緩存相匹配,或者使用兩個簡單的屬性來完全排除它們自己。默認情況下,語句像下面這樣來配置:

    <select ... flushCache=”false” useCache=”true”/>

    <insert ... flushCache=”true”/>

    <update ... flushCache=”true”/>

    <delete ... flushCache=”true”/>?

    因為有默認值,所以您不需要使用這種方式明確地配置這些語句。如果您想改變默認的動作,只需要設置flushCacheuseCache?屬性即可。舉個例子來說,在許多的場合下您可能排除緩存中某些特定的select語句。或者您想用select語句清空緩存。同樣的,您也可能有一些update?語句在執行的時候不需要清空緩存。

    ?

    cache-ref元素

    回想上一節,我們僅僅只是討論在某一個命名空間里使用或者刷新緩存。但有可能您想要在不同的命名空間里共享同一個緩存配置或者實例。在這種情況下,您就可以使用cache-ref?元素來引用另外一個緩存。

    <cache-ref namespace=”com.someone.application.data.SomeMapper”/>


    總結

    以上是生活随笔為你收集整理的Mybatis 高级结果映射 ResultMap Association Collection的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    a在线免费观看视频 | 天天久久夜夜 | 丁香视频五月 | 日韩电影在线看 | 三级在线播放视频 | 91资源在线播放 | 狠狠综合网 | 亚洲精品女 | 精久久久久| 国产精品va最新国产精品视频 | 福利一区二区 | 中文在线字幕观看电影 | 一区二区电影在线观看 | 黄色片网站大全 | 日韩网站在线观看 | 亚洲 欧美日韩 国产 中文 | 东方av免费在线观看 | 中文字幕激情 | 少妇资源站| 成人国产精品 | 国产精品成人免费 | 日韩高清激情 | 亚洲午夜精品电影 | 青青草在久久免费久久免费 | 欧美片网站yy | 欧美老女人xx | 最近久乱中文字幕 | 久久高清免费 | 日韩精品视频免费专区在线播放 | 日日精品 | 日韩在线二区 | 日韩一区在线免费观看 | 不卡视频国产 | 婷婷播播网 | 天天干,夜夜爽 | 99久久综合狠狠综合久久 | 中国精品少妇 | 国产亚洲免费观看 | 九九视频免费 | 国产精品视频大全 | aaaaaa毛片| 成人av在线直播 | 91亚洲国产成人久久精品网站 | 日韩av看片 | 国产亚洲精品xxoo | 精品久久久久久综合 | 一区二区三区免费在线观看视频 | 免费一级特黄录像 | 欧洲一区二区在线观看 | 久久久久久高潮国产精品视 | 日韩国产欧美在线视频 | av免费网站 | 欧美日本一区 | 99久久99久国产黄毛片 | 国产成人精品在线播放 | 蜜臀av夜夜澡人人爽人人桃色 | 麻豆免费看片 | 99色人 | 国产精品欧美一区二区 | 蜜臀av夜夜澡人人爽人人 | 深爱开心激情 | 成人av资源在线 | 韩国av电影网 | 国产午夜精品一区二区三区四区 | 色www.| 日韩毛片在线播放 | 日韩黄色在线 | 免费久久99精品国产 | 国产精品99页 | 亚洲人av免费网站 | 日韩免费播放 | 一区二区三区 亚洲 | 国产小视频在线 | 天天干天天操天天搞 | 999久久国精品免费观看网站 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产精品久久久久久婷婷天堂 | 一区二区视频播放 | 日韩欧美高清一区二区三区 | av播放在线 | 婷婷激情五月综合 | 91av亚洲| 99久久日韩精品免费热麻豆美女 | 五月天亚洲激情 | 久久久精品在线观看 | 最新午夜电影 | 日本在线观看视频一区 | 久久最新网址 | 国产美腿白丝袜足在线av | 国产黄色观看 | 很黄很黄的网站免费的 | 五月天激情视频在线观看 | 亚洲aⅴ乱码精品成人区 | 高清中文字幕av | 免费婷婷| 9999精品免费视频 | 色av婷婷 | 高清国产午夜精品久久久久久 | 天天天干 | 在线成人免费电影 | 日韩在线观看第一页 | 久久久久久久国产精品影院 | 日韩精品一区二区三区电影 | 五月婷婷六月丁香在线观看 | 久久在线免费视频 | 亚洲精区二区三区四区麻豆 | 91中文字幕在线视频 | 久久久久国产精品一区二区 | 中文字幕在线视频免费播放 | 国产高清一级 | 日日夜夜91 | 国产成人精品一区二区三区在线 | www.久草视频 | 四虎最新入口 | 九九视频一区 | 正在播放国产一区 | 97精品视频在线播放 | 玖玖视频国产 | 三日本三级少妇三级99 | 色 中文字幕| 99热在线网站 | 欧美成年人在线观看 | 免费久久99精品国产婷婷六月 | 香蕉视频4aa| 在线视频久久 | 亚洲天天看 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 日本精品视频免费观看 | 奇米网在线观看 | 99超碰在线播放 | 91自拍视频在线 | 色综合天天射 | 一级黄色在线免费观看 | 国产不卡在线观看视频 | 久草网在线观看 | 国产精品永久免费观看 | 四虎国产永久在线精品 | 丁香六月中文字幕 | wwwwww色| 成人精品福利 | 超碰99在线 | 欧美a视频在线观看 | 人人舔人人插 | 黄色日本免费 | 激情久久网 | 久久久久久国产精品亚洲78 | 国产精品专区在线 | 日本中文字幕在线电影 | 久久久免费高清视频 | 狠狠操综合网 | 亚洲精品在线国产 | 五月天久久久久久 | 中文字幕国产精品一区二区 | 精品免费久久久久 | 探花视频在线版播放免费观看 | 精品一区二区在线观看 | 91麻豆精品91久久久久同性 | 日日干夜夜草 | 六月久久婷婷 | 国产第一页福利影院 | 国产色a在线观看 | 91精品视频免费 | 国产成人综合在线观看 | www.亚洲在线 | 国产精品视频久久 | 久久视频一区 | a级国产片 | 久久久久国产精品免费免费搜索 | 99看视频在线观看 | 日本黄色a级大片 | 九九热国产 | 天天亚洲| 国产精品片 | 精品99在线视频 | 成年人免费电影在线观看 | 久久97久久97精品免视看 | 在线观看精品视频 | 国产精品自产拍在线观看网站 | 免费视频网 | 欧美黑人巨大xxxxx | 久久精品99久久久久久 | 欧美日视频 | 一区在线观看 | 97热久久免费频精品99 | 91久久国产精品 | 伊人资源站 | 久久精品www人人爽人人 | 亚洲www天堂com | 久久精品国产亚洲精品 | 国产成人久久 | 亚洲午夜久久久久久久久 | 国产精品 中文在线 | 日本99精品 | 国产 在线观看 | 欧美精品在线观看免费 | 一本一本久久aa综合精品 | 中文字幕中文字幕在线一区 | 久久久精品在线观看 | av色综合网 | 国产a高清 | 国产麻豆精品久久 | 波多野结衣一区二区 | 欧美日韩破处 | 欧美亚洲成人xxx | 亚洲精品国产品国语在线 | 96久久精品 | 久久久久久免费视频 | 美女久久久久久 | 91毛片在线观看 | av丝袜在线| 激情五月婷婷丁香 | www.五月天 | 在线观看aaa | 久久黄色影视 | 久久高清av | 2019av在线视频 | 亚洲高清视频在线播放 | 国产精品a成v人在线播放 | 国产视频首页 | 亚洲精品美女久久久久 | 色婷婷狠狠五月综合天色拍 | 中字幕视频在线永久在线观看免费 | 伊人婷婷色 | 日韩av中文在线观看 | 欧美在线视频一区二区三区 | 中文字幕乱码亚洲精品一区 | 亚洲精品在线视频 | 成人免费在线电影 | 18+视频网站链接 | 中文字幕中文中文字幕 | 久久人操| 免费观看久久久 | 一本一本久久a久久精品综合小说 | 久久久久免费精品视频 | 一区二区三区视频在线 | 热99在线| 精品国产一区二区三区四区vr | 91亚色免费视频 | 日韩电影一区二区三区 | 天天操天天操天天操天天操天天操天天操 | 在线播放精品一区二区三区 | 国产剧情一区二区在线观看 | 在线 国产一区 | 天海翼一区二区三区免费 | 亚洲视频aaa | 日韩精品一区二区三区免费观看视频 | 丁香婷婷在线 | 亚洲综合成人av | 极品久久久 | 激情五月色播五月 | 婷婷5月色| 国产一区二区高清 | 亚洲精品在线一区二区 | 一区二区三区影院 | 国产成人黄色av | 国产九九热视频 | 一区二区三区四区在线 | www操操操 | wwwwww国产 | 美女精品在线 | 狠狠干电影| 豆豆色资源网xfplay | 亚洲.www | 国产一区二区三区免费在线观看 | 国产成人精品一区一区一区 | 欧美一二三四在线 | 日韩欧美高清一区二区三区 | 婷婷色婷婷 | 色综合色综合久久综合频道88 | 久久免费国产精品 | 亚洲九九九在线观看 | 美女黄频网站 | 香蕉网在线观看 | www.xxxx变态.com | 久久天天躁夜夜躁狠狠85麻豆 | 久久免费精品一区二区三区 | www.啪啪.com | 91黄色成人| 久久免费观看少妇a级毛片 久久久久成人免费 | 中文字幕在线视频国产 | 日日夜夜人人天天 | 99视频在线观看一区三区 | 永久免费的啪啪网站免费观看浪潮 | 久久免费视频国产 | 国产成人一区二区三区电影 | 欧美日韩在线免费观看 | 久久手机免费观看 | 久久蜜桃av | 久久无码av一区二区三区电影网 | 99热国产在线观看 | 一区二区精品在线 | 亚洲欧美激情精品一区二区 | 四虎成人免费观看 | 欧美日本啪啪无遮挡网站 | 91毛片在线| 国产蜜臀av | 国产尤物视频在线 | 91精选在线观看 | 最近免费中文字幕 | 日韩午夜三级 | 中文字幕中文字幕在线中文字幕三区 | 国产精品一区二区久久 | 美女视频黄频大全免费 | 天天干.com | 久久毛片网站 | 免费韩国av | 四虎成人精品永久免费av | 日韩r级电影在线观看 | 97精品伊人 | 美女av在线免费 | 人人爽人人 | 久久婷婷国产 | 精品国产乱码久久久久久天美 | 天天操人 | 国产色久 | 亚洲精品视频在线观看免费 | 国产精品久久精品国产 | 亚洲va欧美va人人爽春色影视 | 日韩在线视频免费观看 | 91免费观看 | 亚洲精品白浆高清久久久久久 | 亚洲电影一级黄 | 亚洲日日日 | 久久伊人精品天天 | 久久高清国产视频 | 成人午夜电影在线 | 97在线观看视频国产 | 久久福利在线 | 成人黄色电影在线播放 | 狠狠干2018| 深夜免费福利网站 | 中文字幕日本电影 | 日韩网站中文字幕 | 99在线精品视频观看 | 免费aa大片 | 不卡精品 | 精品免费99久久 | 国产成人一区二区三区免费看 | 国产一级视频免费看 | 91精品免费看 | 久久99精品国产麻豆宅宅 | 免费看v片 | 狠狠狠色丁香婷婷综合激情 | 中文字幕在线视频国产 | 在线观看免费色 | 在线观看亚洲国产 | 在线观看国产一区二区 | 国产a国产a国产a | 在线成人免费 | 亚洲精品国精品久久99热一 | 中文字幕超清在线免费 | 欧美国产三区 | 免费成人看片 | 国产在线最新 | 日韩字幕在线观看 | 亚洲乱码精品久久久久 | 久久免费视频5 | 日韩欧美黄色网址 | 9在线观看免费高清完整版在线观看明 | 西西www4444大胆视频 | 久久激情视频 | 亚洲日本va午夜在线电影 | 91福利社区在线观看 | av一级久久 | 手机看片久久 | 最近最新中文字幕 | www九九热| 国产成视频在线观看 | 一级黄色在线免费观看 | 91九色网站| 99免费在线观看 | 天天干夜夜夜 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 在线观看免费版高清版 | 久久国产91 | 国产精品久久免费看 | 91精品国产欧美一区二区成人 | 日韩黄色在线观看 | 国产一级做a爱片久久毛片a | 久久天天躁夜夜躁狠狠躁2022 | a黄色| 久久久久福利视频 | 91aaa在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | ,午夜性刺激免费看视频 | a国产精品| 91亚洲精品视频 | 在线免费高清一区二区三区 | 91视频 - 114av | 日本久久片| 五月婷婷爱 | 日韩伦理片hd | www.com.黄| 天天操天天干天天爽 | 国产91精品看黄网站 | 91精品国产乱码 | av资源网在线播放 | 亚洲日本va在线观看 | 亚洲国产欧美一区二区三区丁香婷 | 国产打女人屁股调教97 | 久久综合狠狠综合久久激情 | 欧美网站黄色 | av电影在线观看完整版一区二区 | 亚洲精品99久久久久久 | 亚洲精品美女久久17c | 天天爱天天爽 | 国产视频首页 | 六月婷操| 国产99久久久久 | 久久精品免费观看 | 国产成人61精品免费看片 | 久久久久久久久爱 | 综合网成人 | 国产流白浆高潮在线观看 | 九九九在线观看视频 | 国产一区二区久久精品 | 国产69精品久久久久久久久久 | 欧美性色xo影院 | 国产精在线| 亚洲免费一级 | 99久久这里有精品 | 99久久久久国产精品免费 | 又色又爽又黄高潮的免费视频 | 中文字幕国产在线 | 国产免费三级在线观看 | 日本99干网 | 精品字幕 | 在线免费观看视频a | 蜜臀久久99精品久久久酒店新书 | 又黄又爽又色无遮挡免费 | 日韩一区视频在线 | 日韩精品专区在线影院重磅 | 蜜桃视频日本 | 天天干天天做 | 91欧美日韩国产 | 99热国产在线观看 | 视频一区二区三区视频 | 亚洲欧美国内爽妇网 | 亚洲国产天堂av | a视频在线观看免费 | 精品视频久久 | 视频在线播放国产 | 久久精品激情 | 日韩精品免费一区二区在线观看 | 久久久国产一区二区三区四区小说 | 久久电影网站中文字幕 | 91精品国产乱码久久 | 一区二区三区高清不卡 | 不卡电影一区二区三区 | 黄色软件在线观看视频 | 亚洲色图色 | 国产精品一区二区在线 | 91在线免费视频 | av网站在线观看播放 | 色综合久久88色综合天天 | 色婷婷视频网 | 久久这里只有精品久久 | av片中文字幕 | 国产又粗又猛又色 | 91亚洲精品久久久中文字幕 | 国产精品岛国久久久久久久久红粉 | 嫩草伊人久久精品少妇av | 成人精品国产免费网站 | 日韩欧美视频在线 | 五月天久久综合网 | 性日韩欧美在线视频 | 国产精品一区在线观看你懂的 | 天天草夜夜 | 黄色av播放 | 国产综合福利在线 | 黄色小说18| 99久久精品免费看 | 久久99热这里只有精品 | 久久久久成人精品 | 91麻豆看国产在线紧急地址 | 欧美日韩另类在线观看 | 在线视频国产区 | 91视频免费视频 | 欧美成人aa | 亚洲91网站 | 亚洲伊人第一页 | 欧美a在线看| 免费在线观看污网站 | 久久久久国产精品厨房 | 国产精品视频内 | 久久国产精品视频 | 日本激情动作片免费看 | 亚洲永久精品在线 | 色网站视频 | 涩涩网站在线看 | 国产精品激情偷乱一区二区∴ | 国产中文字幕在线看 | 天天操福利视频 | 亚洲国产精品成人精品 | 中文在线字幕免费观看 | 久久久久久久久毛片精品 | 欧美夫妻性生活电影 | 国产无套精品久久久久久 | 久久草网站 | 在线观看av免费观看 | 亚洲天堂网在线视频观看 | 久久激情网站 | 久草视频手机在线 | 天天色综合1 | 免费看十八岁美女 | 黄色成人av网址 | 午夜精品久久久久久久久久 | 亚州天堂| 操高跟美女| 国产日本亚洲高清 | 狠狠色免费 | 亚州天堂 | 久久久国产一区二区 | 在线韩国电影免费观影完整版 | 久久精品国产第一区二区三区 | 久久一区二区三区国产精品 | 一级α片免费看 | 亚洲精品日韩在线观看 | 91九色蝌蚪国产 | 欧亚日韩精品一区二区在线 | 九九爱免费视频 | 成人四虎影院 | 91成人在线网站 | 91.精品高清在线观看 | 国产高清视频免费最新在线 | 91精品免费在线 | 天天干天天搞天天射 | 91在线视频免费播放 | 日韩综合一区二区 | 精品视频免费在线 | 国产精品久久视频 | 91在线播放国产 | 精品伊人久久久 | 中文字幕日韩伦理 | 国产精品毛片一区视频播不卡 | 韩国av一区二区 | 波多野结衣在线播放视频 | 精品久久久久久久久中文字幕 | 午夜成人影视 | 亚洲精品久久激情国产片 | 久久国产精品一区二区三区四区 | 日韩欧美在线高清 | 色综合色综合久久综合频道88 | 国产91精品在线播放 | 在线欧美最极品的av | 国产精品一区二区久久久 | 亚洲欧美视频在线播放 | 91看片淫黄大片在线播放 | 五月天综合色 | 天天草天天操 | 亚洲视频在线视频 | 在线观看911视频 | 日韩丝袜 | 九色视频网站 | 亚洲三级在线播放 | 九七在线视频 | 欧美久久成人 | 中文字幕网址 | 97视频在线看 | 香蕉视频在线观看免费 | 国产永久免费 | 99视频精品视频高清免费 | 国产精品美女久久久久久久久久久 | 97超碰影视 | 免费观看v片在线观看 | 一级黄色片在线观看 | 六月激情丁香 | 激情五月激情综合网 | 精品国产一区二区三区在线 | 亚洲精品黄网站 | 日本韩国中文字幕 | 国产一级在线免费观看 | 婷婷综合电影 | 日韩乱色精品一区二区 | 五月婷婷一区二区三区 | 国产美女视频免费观看的网站 | 五月开心网 | 亚洲一区二区精品 | 五月综合激情婷婷 | 日韩午夜在线播放 | 手机色在线 | 永久免费视频国产 | 久久免费精品视频 | 97精品久久人人爽人人爽 | 亚洲一区美女视频在线观看免费 | avwww在线| 欧美一区二区在线免费观看 | 日日夜夜网 | 91精品国产欧美一区二区成人 | 在线视频欧美精品 | 中文字幕在线免费观看 | 在线 高清 中文字幕 | 欧美在线视频二区 | 亚洲欧美日韩精品久久奇米一区 | 91精品国产自产老师啪 | 午夜精品久久久久久久久久久久久久 | 午夜在线资源 | 夜夜夜夜操 | 亚洲最大在线视频 | 国产精品成人久久 | 亚洲一级片免费观看 | 青青草在久久免费久久免费 | av超碰在线 | 精选久久 | 久草精品视频 | 精品乱码一区二区三四区 | 亚洲涩涩一区 | 香蕉在线视频观看 | 国产一区二区手机在线观看 | 日本护士三级少妇三级999 | 在线观看av小说 | 五月激情站 | 成 人 黄 色 免费播放 | 欧美一级在线看 | 西西大胆啪啪 | 中文字幕在线成人 | 999热视频| 亚洲专区在线播放 | 欧美精品国产综合久久 | www.大网伊人 | 成人久久久电影 | 欧美日韩在线免费观看视频 | 亚洲精品美女免费 | 特级毛片网站 | 成人免费在线播放视频 | 久久桃花网 | 久久久国产影视 | 精品国产三级 | 能在线看的av | 在线免费av播放 | 亚洲精品456在线播放第一页 | 日韩伦理片一区二区三区 | 久久99中文字幕 | 香蕉精品视频在线观看 | 麻豆国产在线播放 | 97av精品| 免费日韩一级片 | 日本电影久久 | 麻豆系列在线观看 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 免费网站黄 | 欧美一区日韩一区 | 国产精品免费视频网站 | 久久综合中文色婷婷 | 亚洲国产精彩中文乱码av | 亚洲综合视频在线 | 在线视频免费观看 | 亚洲精品mv在线观看 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 亚洲蜜桃在线 | 日日干夜夜爱 | 国产精品成人一区二区三区吃奶 | 国内免费久久久久久久久久久 | 另类老妇性bbwbbw高清 | 婷婷av资源| 日韩性片 | 中文字幕日韩伦理 | av在线免费网站 | 91精品视频免费看 | 国产精品手机看片 | 国产在线观看你懂得 | 日韩精品一二三 | 中文字幕在线观看第三页 | 香蕉久久久久 | av电影免费观看 | 激情九九 | 久久成人高清 | 欧美色精品天天在线观看视频 | 天堂av在线免费 | 在线视频1卡二卡三卡 | 久久精品国产成人精品 | 韩国三级一区 | 久黄色| 亚洲经典视频在线观看 | 久久免费99精品久久久久久 | 香蕉色综合 | 久久激情五月激情 | 蜜桃视频日韩 | 天天夜夜狠狠操 | av+在线播放在线播放 | 久久不射电影院 | 欧美日韩三区二区 | 欧美久久精品 | 波多野结衣视频一区二区三区 | 色综合色综合久久综合频道88 | 欧美日韩亚洲精品在线 | 久草在线播放视频 | 精品在线看 | 日韩高清免费观看 | 天天操天天干天天爽 | 欧美日韩不卡一区二区 | 中文字幕在线免费观看视频 | 国产91电影在线观看 | 久久亚洲国产精品 | av成人资源 | 国产97碰免费视频 | 精品99在线观看 | 国产精品18久久久久久久 | 婷婷国产v亚洲v欧美久久 | 久久久久亚洲精品成人网小说 | 成人精品一区二区三区电影免费 | 91成人在线观看喷潮 | 日本中文在线观看 | 久久精品一级片 | 色一色在线| 久久久久免费网 | 中文字幕在线专区 | 91久久一区二区 | 激情久久综合网 | 久草干 | 久久国产精品电影 | 亚洲国产中文字幕在线视频综合 | 日韩一区二区三区免费视频 | 日本精品久久久久影院 | 9在线观看免费高清完整版在线观看明 | 国产精品9999久久久久仙踪林 | 国产精品视频不卡 | 色www免费视频| 国产经典三级 | 伊人电影天堂 | 日本久久片 | 韩国av免费| 精品1区二区 | 五月开心激情网 | 综合色站| 免费视频在线观看网站 | 人人爽久久久噜噜噜电影 | 成人av亚洲 | 日日干日日操 | www看片网站 | 亚洲国产成人高清精品 | av线上免费观看 | 69亚洲视频 | 久久在现视频 | 欧美激情一区不卡 | 97超视频 | 九九在线高清精品视频 | 日韩资源在线播放 | 天天综合网~永久入口 | 久久99久久99精品免费看小说 | 国产色视频123区 | 人人爽人人爽人人爽 | 国产精品久一 | 超碰人人在线 | 999视频网站 | 99久久99视频只有精品 | 国产视频在线播放 | 97电院网手机版 | 中文字幕中文字幕在线中文字幕三区 | 99久久99久久综合 | 欧美日韩国产精品一区二区三区 | 播五月婷婷| 九色porny真实丨国产18 | 天天射天 | 黄色在线视频网址 | 久久香蕉国产 | 极品国产91在线网站 | 91精品国产三级a在线观看 | 国产伦精品一区二区三区高清 | 亚洲免费av在线播放 | 一级久久精品 | 最新av在线免费观看 | 午夜影视av | 久久午夜精品视频 | 精品不卡av | 中文字幕视频网站 | av资源网在线播放 | 亚洲波多野结衣 | 这里只有精彩视频 | 亚洲视频一区二区三区在线观看 | 人人干天天射 | 天天爽夜夜爽精品视频婷婷 | 久久网页| 国产无套精品久久久久久 | 午夜av免费在线观看 | 一区在线免费观看 | 狠狠干婷婷 | 欧美性猛片, | 久久久久久久久毛片 | 亚洲狠狠操 | 亚洲天堂网在线视频观看 | 麻豆视频国产精品 | 日韩精品高清不卡 | 天天做夜夜做 | 国产精品激情在线观看 | 88av视频| 日韩在线观看网址 | 免费av网站在线看 | 欧美日韩成人 | 超碰人在线 | 日韩欧美国产免费播放 | 免费碰碰 | 97视频免费| 国产系列精品av | 色在线视频 | 一区二区三区国产欧美 | 国产69精品久久99不卡的观看体验 | 亚洲精品乱码久久久久 | 国产成本人视频在线观看 | 国产成人精品一区二区三区在线 | 日日成人网 | 中文字幕欧美日韩va免费视频 | 国产精品资源在线观看 | 极品美女被弄高潮视频网站 | 国产成人精品一区二区三区网站观看 | 天天射天天干天天操 | 精品国产乱码久久久久久三级人 | 成人免费在线观看电影 | 久久久久久久久网站 | 亚洲桃花综合 | 国产精品亚洲片在线播放 | 中文网丁香综合网 | 成人免费观看视频大全 | 狠狠操夜夜操 | 日日综合网 | 黄色三级视频片 | 久久久黄色免费网站 | 国产视频一区在线免费观看 | 亚洲欧洲视频 | 97超碰资源 | 欧美性黑人 | 欧美一级专区免费大片 | 天天添夜夜操 | 久久草草热国产精品直播 | 久久精品三级 | 99热在线精品观看 | 国产精品久久久一区二区三区网站 | 日韩在线欧美在线 | 免费人成在线观看网站 | 久久国产一区二区三区 | 欧美性成人 | 成年人网站免费观看 | 国产中文字幕视频 | 四川妇女搡bbbb搡bbbb搡 | 激情av网| 亚洲天堂网视频在线观看 | 午夜久久福利视频 | 欧美一级性生活视频 | 国产男男gay做爰 | 欧美视频一区二 | 成人在线免费观看网站 | 97人人澡人人添人人爽超碰 | 97在线免费观看视频 | 成人网444ppp | 97电院网手机版 | 中文字幕日本在线 | 美女视频永久黄网站免费观看国产 | 蜜臀久久99静品久久久久久 | 在线视频麻豆 | 国产亚洲精品久久久久久久久久 | 综合激情网 | 欧美一级片在线免费观看 | 激情av资源网 | 成人动漫一区二区 | 久久久www成人免费精品张筱雨 | 日韩av一区二区三区在线观看 | 五月婷婷在线观看视频 | 欧美日韩免费视频 | 久久精品5 | 黄色午夜网站 | 国产精品人成电影在线观看 | 97成人精品视频在线播放 | 一区二区三区日韩在线观看 | 91视频a | 亚州国产视频 | 国产一级在线观看视频 | 天天干人人干 | 日韩国产精品毛片 | 国产精品久久久久久久久久99 | 欧美成人xxxxx | 中文字幕一区在线观看视频 | 91麻豆精品91久久久久同性 | 91九色精品| 91热视频| 欧美日韩高清免费 | 97在线观看免费高清 | 91在线一区 | 午夜久久网站 | 黄视频网站大全 | 97av视频 | 天天操天天色天天 | 亚洲理论电影 | 欧美日韩大片在线观看 | 操操操日日日干干干 | 亚洲精品资源在线观看 | 国产精品初高中精品久久 | 亚洲一区欧美激情 | 日韩r级在线 | 狠狠色丁香婷婷综合欧美 | 中文字幕国语官网在线视频 | 美腿丝袜av | 国产不卡免费av | 麻豆一二 | 免费福利片2019潦草影视午夜 | 久久久精品99 | 一级一片免费看 | 国产成人精品久 | 免费在线色| 久久久国产毛片 | 亚洲精品在线播放视频 | av在线亚洲天堂 | 亚洲少妇自拍 | 免费三级骚 | 成人h电影 | 午夜视频在线观看一区二区三区 | 不卡电影免费在线播放一区 | 国产精品女人久久久 | 亚洲综合一区二区精品导航 | 亚洲视频中文 | 亚洲综合色激情五月 | 国产在线播放不卡 | 日韩欧美视频在线 | 成人黄色在线观看视频 | 亚洲成人一二三 | 久久午夜免费视频 | 婷婷在线不卡 | 国产精品综合在线 | 午夜av片| 国产亚洲精品久久久久久久久久 | 国产精品美女久久久久久久 | 99精品视频免费观看视频 | 日韩色综合 | 午夜精品久久一牛影视 | 热九九精品 | 男女啪啪网站 | 97色婷婷成人综合在线观看 | 美女久久久久 | 色婷婷综合视频在线观看 | 嫩模bbw搡bbbb搡bbbb | 99久热在线精品视频观看 | 99热精品在线观看 | 久久综合久久久 | 欧美日韩国产精品一区二区 | 亚洲精品国产综合久久 | 国产欧美久久久精品影院 | 成人国产精品一区二区 | 久久国产精品免费 | www.国产在线观看 | 婷婷色影院 | 在线电影 你懂得 | 久久精品91视频 | 999国产 | 噜噜色官网 | 91高清视频在线 | 国产精品门事件 | 欧美国产精品久久久久久免费 | 91尤物国产尤物福利在线播放 | 免费欧美高清视频 | 人人干在线观看 | 亚洲成人一区 | 日韩中字在线 | 美女国产免费 | 2023av在线| 婷婷在线五月 | 日韩动漫免费观看高清完整版在线观看 | 日韩视频www | www.久久免费视频 | 嫩小bbbb摸bbb摸bbb | 蜜臀久久99精品久久久无需会员 | 中文字幕乱码在线播放 | 久久综合影视 | 可以免费观看的av片 | 2024av| 国产视频1区2区 | 免费a v在线| 国产精品女人久久久久久 | 国产精品av电影 | 91天天操| 麻豆成人在线观看 | 亚洲日本韩国一区二区 | 日韩在观看线 | 久久看片网 | 成人9ⅰ免费影视网站 | 91av短视频| 91超碰免费在线 | 岛国av在线不卡 | 久久视频精品 | 日韩特级片 | 欧美精品做受xxx性少妇 | 五月天激情视频在线观看 | 99热最新在线 | 久久国产精品久久国产精品 | 亚洲男男gaygayxxxgv | 精品国产_亚洲人成在线 | 欧美日韩国产精品久久 | 午夜美女福利直播 | 国产视频精选在线 | 超碰成人av| 日韩v在线91成人自拍 | 91麻豆免费看 | 友田真希x88av | 亚洲第一香蕉视频 | 欧美精品一区二区三区一线天视频 | 免费在线观看中文字幕 | 日本在线视频一区二区三区 | 999久久| 午夜999| 在线观看精品一区 |