中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Mybatis整合Spring
來源:易賢網 閱讀:1145 次 日期:2015-01-15 14:21:56
溫馨提示:易賢網小編為您整理了“Mybatis整合Spring”,方便廣大網友查閱!

Mybatis整合SpringintegrationMapperScannerConfigurer

Mybatis整合Spring

根據官方的說法,在ibatis3,也就是Mybatis3問世之前,Spring3的開發工作就已經完成了,所以Spring3中還是沒有對Mybatis3的支持。因此由Mybatis社區自己開發了一個Mybatis-Spring用來滿足Mybatis用戶整合Spring的需求。下面就將通過Mybatis-Spring來整合Mybatis跟Spring的用法做一個簡單的介紹。

MapperFactoryBean

首先,我們需要從Mybatis官網上下載Mybatis-Spring的jar包添加到我們項目的類路徑下,當然也需要添加Mybatis的相關jar包和Spring的相關jar包。我們知道在Mybatis的所有操作都是基于一個SqlSession的,而SqlSession是由SqlSessionFactory來產生的,SqlSessionFactory又是由SqlSessionFactoryBuilder來生成的。但是Mybatis-Spring是基于SqlSessionFactoryBean的。在使用Mybatis-Spring的時候,我們也需要SqlSession,而且這個SqlSession是內嵌在程序中的,一般不需要我們直接訪問。SqlSession也是由SqlSessionFactory來產生的,但是Mybatis-Spring給我們封裝了一個SqlSessionFactoryBean,在這個bean里面還是通過SqlSessionFactoryBuilder來建立對應的SqlSessionFactory,進而獲取到對應的SqlSession。通過SqlSessionFactoryBean我們可以通過對其指定一些屬性來提供Mybatis的一些配置信息。所以接下來我們需要在Spring的applicationContext配置文件中定義一個SqlSessionFactoryBean。

Xml代碼 收藏代碼

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="mapperLocations"

value="classpath:com/tiantian/ckeditor/mybatis/mappers/*Mapper.xml" />

<property name="typeAliasesPackage" value="com.tiantian.ckeditor.model" />

</bean>

在定義SqlSessionFactoryBean的時候,dataSource屬性是必須指定的,它表示用于連接數據庫的數據源。當然,我們也可以指定一些其他的屬性,下面簡單列舉幾個:

mapperLocations:它表示我們的Mapper文件存放的位置,當我們的Mapper文件跟對應的Mapper接口處于同一位置的時候可以不用指定該屬性的值。

configLocation:用于指定Mybatis的配置文件位置。如果指定了該屬性,那么會以該配置文件的內容作為配置信息構建對應的SqlSessionFactoryBuilder,但是后續屬性指定的內容會覆蓋該配置文件里面指定的對應內容。

typeAliasesPackage:它一般對應我們的實體類所在的包,這個時候會自動取對應包中不包括包名的簡單類名作為包括包名的別名。多個package之間可以用逗號或者分號等來進行分隔。

typeAliases:數組類型,用來指定別名的。指定了這個屬性后,Mybatis會把這個類型的短名稱作為這個類型的別名,前提是該類上沒有標注@Alias注解,否則將使用該注解對應的值作為此種類型的別名。

Xml代碼 收藏代碼

<property name="typeAliases">

<array>

<value>com.tiantian.mybatis.model.Blog</value>

<value>com.tiantian.mybatis.model.Comment</value>

</array>

</property>

plugins:數組類型,用來指定Mybatis的Interceptor。

typeHandlersPackage:用來指定TypeHandler所在的包,如果指定了該屬性,SqlSessionFactoryBean會自動把該包下面的類注冊為對應的TypeHandler。多個package之間可以用逗號或者分號等來進行分隔。

typeHandlers:數組類型,表示TypeHandler。

接下來就是在Spring的applicationContext文件中定義我們想要的Mapper對象對應的MapperFactoryBean了。通過MapperFactoryBean可以獲取到我們想要的Mapper對象。MapperFactoryBean實現了Spring的FactoryBean接口,所以MapperFactoryBean是通過FactoryBean接口中定義的getObject方法來獲取對應的Mapper對象的。在定義一個MapperFactoryBean的時候有兩個屬性需要我們注入,一個是Mybatis-Spring用來生成實現了SqlSession接口的SqlSessionTemplate對象的sqlSessionFactory;另一個就是我們所要返回的對應的Mapper接口了。

定義好相應Mapper接口對應的MapperFactoryBean之后,我們就可以把我們對應的Mapper接口注入到由Spring管理的bean對象中了,比如Service bean對象。這樣當我們需要使用到相應的Mapper接口時,MapperFactoryBean會從它的getObject方法中獲取對應的Mapper接口,而getObject內部還是通過我們注入的屬性調用SqlSession接口的getMapper(Mapper接口)方法來返回對應的Mapper接口的。這樣就通過把SqlSessionFactory和相應的Mapper接口交給Spring管理實現了Mybatis跟Spring的整合。

Spring的applicationContext.xml配置文件:

Xml代碼 收藏代碼

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=""

xmlns:xsi="" xmlns:context=">"

xmlns:mvc=""

xsi:schemaLocation="

">

<context:component-scan base-package="com.tiantian.mybatis"/>

<context:property-placeholder location="classpath:config/jdbc.properties"/>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName" value="${jdbc.driver}" />

<property name="url" value="${jdbc.url}" />

<property name="username" value="${jdbc.username}" />

<property name="password" value="${jdbc.password}" />

</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="mapperLocations" value="classpath:com/tiantian/mybatis/mapper/*.xml"/>

<property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />

</bean>

<bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">

<property name="mapperInterface"

value="com.tiantian.mybatis.mapper.BlogMapper" />

<property name="sqlSessionFactory" ref="sqlSessionFactory" />

</bean>

</beans>

BlogMapper.xml文件:

Xml代碼 收藏代碼

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"">

<mapper namespace="com.tiantian.mybatis.mapper.BlogMapper">

<!-- 新增記錄 -->

<insert id="insertBlog" parameterType="Blog" useGeneratedKeys="true" keyProperty="id">

insert into t_blog(title,content,owner) values(#{title},#{content},#{owner})

</insert>

<!-- 查詢單條記錄 -->

<select id="selectBlog" parameterType="int" resultMap="BlogResult">

select * from t_blog where id = #{id}

</select>

<!-- 修改記錄 -->

<update id="updateBlog" parameterType="Blog">

update t_blog set title = #{title},content = #{content},owner = #{owner} where id = #{id}

</update>

<!-- 查詢所有記錄 -->

<select id="selectAll" resultType="Blog">

select * from t_blog

</select>

<!-- 刪除記錄 -->

<delete id="deleteBlog" parameterType="int">

delete from t_blog where id = #{id}

</delete>

</mapper>

BlogMapper.java:

Java代碼 收藏代碼

package com.tiantian.mybatis.mapper;

import java.util.List;

import com.tiantian.mybatis.model.Blog;

publicinterface BlogMapper {

public Blog selectBlog(int id);

publicvoid insertBlog(Blog blog);

publicvoid updateBlog(Blog blog);

publicvoid deleteBlog(int id);

public List<Blog> selectAll();

}

BlogServiceImpl.java:

Java代碼 收藏代碼

package com.tiantian.mybatis.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.tiantian.mybatis.mapper.BlogMapper;

import com.tiantian.mybatis.model.Blog;

import com.tiantian.mybatis.service.BlogService;

@Service

publicclass BlogServiceImpl implements BlogService {

private BlogMapper blogMapper;

publicvoid deleteBlog(int id) {

blogMapper.deleteBlog(id);

}

public Blog find(int id) {

returnblogMapper.selectBlog(id);

}

public List<Blog> find() {

returnblogMapper.selectAll();

}

publicvoid insertBlog(Blog blog) {

blogMapper.insertBlog(blog);

}

publicvoid updateBlog(Blog blog) {

blogMapper.updateBlog(blog);

}

public BlogMapper getBlogMapper() {

returnblogMapper;

}

@Resource

publicvoid setBlogMapper(BlogMapper blogMapper) {

this.blogMapper = blogMapper;

}

}

MapperScannerConfigurer

利用上面的方法進行整合的時候,我們有一個Mapper就需要定義一個對應的MapperFactoryBean,當我們的Mapper比較少的時候,這樣做也還可以,但是當我們的Mapper相當多時我們再這樣定義一個個Mapper對應的MapperFactoryBean就顯得速度比較慢了。為此Mybatis-Spring為我們提供了一個叫做MapperScannerConfigurer的類,通過這個類Mybatis-Spring會自動為我們注冊Mapper對應的MapperFactoryBean對象。

如果我們需要使用MapperScannerConfigurer來幫我們自動掃描和注冊Mapper接口的話我們需要在Spring的applicationContext配置文件中定義一個MapperScannerConfigurer對應的bean。對于MapperScannerConfigurer而言有一個屬性是我們必須指定的,那就是basePackage。basePackage是用來指定Mapper接口文件所在的基包的,在這個基包或其所有子包下面的Mapper接口都將被搜索到。多個基包之間可以使用逗號或者分號進行分隔。最簡單的MapperScannerConfigurer定義就是只指定一個basePackage屬性,如:

Xml代碼 收藏代碼

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.tiantian.mybatis.mapper" />

</bean>

這樣MapperScannerConfigurer就會掃描指定基包下面的所有接口,并把它們注冊為一個個MapperFactoryBean對象。當使用MapperScannerConfigurer加basePackage屬性的時候,我們上面例子的applicationContext配置文件將變為這樣:

Xml代碼 收藏代碼

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=""

xmlns:xsi="" xmlns:context="">

<context:component-scan base-package="com.tiantian.mybatis" />

<context:property-placeholder location="classpath:config/jdbc.properties" />

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName" value="${jdbc.driver}" />

<property name="url" value="${jdbc.url}" />

<property name="username" value="${jdbc.username}" />

<property name="password" value="${jdbc.password}" />

</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="mapperLocations" value="classpath:com/tiantian/mybatis/mapper/*.xml" />

<property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />

</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.tiantian.mybatis.mapper" />

</bean>

</beans>

有時候我們指定的基包下面的并不全是我們定義的Mapper接口,為此MapperScannerConfigurer還為我們提供了另外兩個可以縮小搜索和注冊范圍的屬性。一個是annotationClass,另一個是markerInterface。

annotationClass:當指定了annotationClass的時候,MapperScannerConfigurer將只注冊使用了annotationClass注解標記的接口。

markerInterface:markerInterface是用于指定一個接口的,當指定了markerInterface之后,MapperScannerConfigurer將只注冊繼承自markerInterface的接口。

如果上述兩個屬性都指定了的話,那么MapperScannerConfigurer將取它們的并集,而不是交集。即使用了annotationClass進行標記或者繼承自markerInterface的接口都將被注冊為一個MapperFactoryBean。

現在假設我們的Mapper接口都繼承了一個SuperMapper接口,那么我們就可以這樣來定義我們的MapperScannerConfigurer。

Xml代碼 收藏代碼

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.tiantian.mybatis.mapper" />

<property name="markerInterface" value="com.tiantian.mybatis.mapper.SuperMapper"/>

</bean>

如果是都使用了注解MybatisMapper標記的話,那么我們就可以這樣來定義我們的MapperScannerConfigurer。

Xml代碼 收藏代碼

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.tiantian.mybatis.mapper" />

<property name="annotationClass" value="com.tiantian.mybatis.annotation.MybatisMapper"/>

</bean>

除了用于縮小注冊Mapper接口范圍的屬性之外,我們還可以指定一些其他屬性,如:

sqlSessionFactory:這個屬性已經廢棄。當我們使用了多個數據源的時候我們就需要通過sqlSessionFactory來指定在注冊MapperFactoryBean的時候需要使用的SqlSessionFactory,因為在沒有指定sqlSessionFactory的時候,會以Autowired的方式自動注入一個。換言之當我們只使用一個數據源的時候,即只定義了一個SqlSessionFactory的時候我們就可以不給MapperScannerConfigurer指定SqlSessionFactory。

sqlSessionFactoryBeanName:它的功能跟sqlSessionFactory是一樣的,只是它指定的是定義好的SqlSessionFactory對應的bean名稱。

sqlSessionTemplate:這個屬性已經廢棄。它的功能也是相當于sqlSessionFactory的,因為就像前面說的那樣,MapperFactoryBean最終還是使用的SqlSession的getMapper方法取的對應的Mapper對象。當定義有多個SqlSessionTemplate的時候才需要指定它。對于一個MapperFactoryBean來說SqlSessionFactory和SqlSessionTemplate只需要其中一個就可以了,當兩者都指定了的時候,SqlSessionFactory會被忽略。

sqlSessionTemplateBeanName:指定需要使用的sqlSessionTemplate對應的bean名稱。

注意:由于使用sqlSessionFactory和sqlSessionTemplate屬性時會使一些內容在PropertyPlaceholderConfigurer之前加載,導致在配置文件中使用到的外部屬性信息無法被及時替換而出錯,因此官方現在新的Mybatis-Spring中已經把sqlSessionFactory和sqlSessionTemplate屬性廢棄了,推薦大家使用sqlSessionFactoryBeanName屬性和sqlSessionTemplateBeanName屬性。

xdowns.com

Xml代碼 收藏代碼

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=""

xmlns:xsi="" xmlns:context="">

<context:component-scan base-package="com.tiantian.mybatis" />

<context:property-placeholder location="classpath:config/jdbc.properties" />

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">

<property name="driverClassName" value="${jdbc.driver}" />

<property name="url" value="${jdbc.url}" />

<property name="username" value="${jdbc.username}" />

<property name="password" value="${jdbc.password}" />

</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="dataSource" ref="dataSource" />

<property name="mapperLocations" value="classpath:com/tiantian/mybatis/mapper/*.xml" />

<property name="typeAliasesPackage" value="com.tiantian.mybatis.model" />

</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.tiantian.mybatis.mapper" />

<property name="markerInterface" value="com.tiantian.mybatis.mapper.SuperMapper"/>

<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

</bean>

</beans>

SqlSessionTemplate

除了上述整合之后直接使用Mapper接口之外,Mybatis-Spring還為我們提供了一種直接使用SqlSession的方式。Mybatis-Spring為我們提供了一個實現了SqlSession接口的SqlSessionTemplate類,它是線程安全的,可以被多個Dao同時使用。同時它還跟Spring的事務進行了關聯,確保當前被使用的SqlSession是一個已經和Spring的事務進行綁定了的。而且它還可以自己管理Session的提交和關閉。當使用了Spring的事務管理機制后,SqlSession還可以跟著Spring的事務一起提交和回滾。

使用SqlSessionTemplate時我們可以在Spring的applicationContext配置文件中如下定義:

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">

<constructor-arg index="0" ref="sqlSessionFactory" />

</bean>

這樣我們就可以通過Spring的依賴注入在Dao中直接使用SqlSessionTemplate來編程了,這個時候我們的Dao可能是這個樣子:

Java代碼 收藏代碼

package com.tiantian.mybatis.dao;

import java.util.List;

import javax.annotation.Resource;

import org.mybatis.spring.SqlSessionTemplate;

import org.springframework.stereotype.Repository;

import com.tiantian.mybatis.model.Blog;

@Repository

publicclass BlogDaoImpl implements BlogDao {

private SqlSessionTemplate sqlSessionTemplate;

publicvoid deleteBlog(int id) {

sqlSessionTemplate.delete("com.tiantian.mybatis.mapper.BlogMapper.deleteBlog", id);

}

public Blog find(int id) {

returnsqlSessionTemplate.selectOne("com.tiantian.mybatis.mapper.BlogMapper.selectBlog", id);

}

public List<Blog> find() {

returnthis.sqlSessionTemplate.selectList("com.tiantian.mybatis.mapper.BlogMapper.selectAll");

}

publicvoid insertBlog(Blog blog) {

this.sqlSessionTemplate.insert("com.tiantian.mybatis.mapper.BlogMapper.insertBlog", blog);

}

publicvoid updateBlog(Blog blog) {

this.sqlSessionTemplate.update("com.tiantian.mybatis.mapper.BlogMapper.updateBlog", blog);

}

public SqlSessionTemplate getSqlSessionTemplate() {

returnsqlSessionTemplate;

}

@Resource

publicvoid setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {

this.sqlSessionTemplate = sqlSessionTemplate;

}

}

注:

本文是基于Mybatis3.2.1、Mybatis-Spring1.1.0和Spring3.1寫的。

更多信息請查看IT技術專欄

更多信息請查看網絡編程
易賢網手機網站地址:Mybatis整合Spring
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美国产一区二区| 一区二区三区福利| 国产精品午夜春色av| 一色屋精品视频在线观看网站| 日韩午夜免费| 蜜臀99久久精品久久久久久软件 | 亚洲手机视频| 亚洲人成在线观看| 一区二区三区四区在线| 久久久精品视频成人| 国产精品久久久久久五月尺| 99在线视频精品| 欧美巨乳在线| 亚洲精品一区二区三区四区高清| 久久一区二区三区国产精品 | 欧美午夜免费| 日韩性生活视频| 欧美日韩精品福利| 一本色道久久综合亚洲精品小说| 亚洲精品一区二区三区不| 久久久亚洲综合| 国产在线一区二区三区四区| 国产精品第十页| 一本久道综合久久精品| 欧美日韩成人综合在线一区二区| 亚洲激情在线观看| 欧美日韩爆操| 亚洲男人天堂2024| 国产日韩欧美综合精品| 久久久久久一区二区| 亚洲高清成人| 欧美日韩国产一区二区| 亚洲欧美成人网| 国内精品久久久久久久果冻传媒| 久久综合久久综合九色| 亚洲毛片视频| 国产精品久久久久一区二区三区共| 亚洲欧美高清| 国内揄拍国内精品久久| 欧美成人精品福利| 一区二区三区视频在线观看| 国产精品一区在线观看| 免费亚洲婷婷| 亚洲一区视频| 永久久久久久| 国产精品福利在线观看网址| 久久久久久电影| 亚洲最新色图| 国产主播一区| 欧美日韩你懂的| 久久久国产一区二区| 99精品热视频只有精品10| 国产亚洲一区在线| 欧美粗暴jizz性欧美20| 亚洲欧美激情视频| 亚洲激情另类| 国产偷久久久精品专区| 欧美精品久久99久久在免费线| 亚洲一级二级| 亚洲高清视频一区二区| 国产伦精品一区二区三区免费 | 欧美一区不卡| 亚洲国产欧美日韩精品| 国产精品久久婷婷六月丁香| 蜜臀91精品一区二区三区| 亚洲免费在线视频| 日韩视频一区二区三区| 红桃视频成人| 国产精品久久久久久av下载红粉| 免费高清在线视频一区·| 亚洲一区在线播放| 亚洲国产高清自拍| 国产一区二区三区久久悠悠色av | 欧美日韩另类在线| 久久亚洲综合| 亚洲一区日韩| 亚洲精品一品区二品区三品区| 国产午夜精品美女毛片视频| 欧美日韩一二三四五区| 欧美不卡一卡二卡免费版| 欧美在线播放一区| 亚洲一区二区三区涩| 亚洲欧洲精品一区二区三区| 黄色精品一区| 国产日韩一区二区三区在线播放| 欧美四级电影网站| 欧美高清视频在线| 久久深夜福利免费观看| 久久精品国产亚洲精品| 午夜精品美女久久久久av福利| 一片黄亚洲嫩模| 日韩午夜在线| 亚洲精品国精品久久99热一 | 欧美日韩的一区二区| 免费在线看一区| 老司机免费视频一区二区三区| 欧美中文字幕不卡| 欧美影院精品一区| 小处雏高清一区二区三区| 亚洲婷婷综合久久一本伊一区| 日韩视频国产视频| 亚洲精品孕妇| aa级大片欧美三级| 99在线精品观看| 在线亚洲观看| 亚洲自拍偷拍麻豆| 午夜视频一区在线观看| 亚洲欧美自拍偷拍| 欧美一区二区免费| 欧美一级播放| 久久久噜噜噜久久狠狠50岁| 久久午夜色播影院免费高清| 久久婷婷成人综合色| 免费亚洲一区二区| 欧美女主播在线| 欧美日韩视频在线第一区| 欧美视频一区二区| 国产精品一区二区欧美| 国内精品久久久久久久影视蜜臀| 国产综合色在线视频区| 亚洲国产精品久久久久秋霞影院| 亚洲激情校园春色| 亚洲图片欧美午夜| 午夜一级在线看亚洲| 久久精品99国产精品| 免费观看一区| 欧美日韩中文在线观看| 国产精品爽黄69| 韩国在线一区| 日韩视频不卡中文| 亚洲欧美日韩高清| 久久久久久久综合色一本| 欧美电影在线| 国产精品毛片大码女人| 黑人巨大精品欧美一区二区小视频 | 最近中文字幕日韩精品 | 国产精品久久久久久久久久久久久久 | 国产麻豆精品视频| 国产精品久久久久91| 国产精品久久久久婷婷| 国产综合欧美在线看| 亚洲激情校园春色| 一区二区三区日韩在线观看| 香蕉成人久久| 暖暖成人免费视频| 国产精品www| 精品动漫3d一区二区三区免费版| 亚洲人成77777在线观看网| 亚洲专区一二三| 久久久在线视频| 欧美三区美女| 在线观看中文字幕亚洲| 亚洲一区二区三区四区五区午夜| 久久国产成人| 欧美色视频日本高清在线观看| 国产一区欧美日韩| 99热在这里有精品免费| 久久九九久久九九| 欧美视频二区| 亚洲丰满少妇videoshd| 亚洲欧美中文在线视频| 欧美精品www在线观看| 国产日韩精品一区二区| 夜夜精品视频| 毛片精品免费在线观看| 国产日韩精品视频一区二区三区| 亚洲精品在线一区二区| 久久久久se| 国产精品一区免费观看| 一本色道88久久加勒比精品| 看欧美日韩国产| 国产亚洲精品高潮| 亚洲一卡久久| 欧美日韩国产色站一区二区三区| 在线播放中文一区| 欧美一级一区| 国产精品外国| 亚洲一区二区在线看| 欧美精品一区二区精品网| 伊人久久亚洲美女图片| 久久疯狂做爰流白浆xx| 国产精品永久免费| a91a精品视频在线观看| 欧美 日韩 国产精品免费观看| 国产一区欧美| 欧美一区二区日韩| 国产精品久久久久久久久动漫| 亚洲人体1000| 免费观看成人网| 在线观看日韩av先锋影音电影院| 欧美尤物一区| 国产欧美一区二区精品性色| 亚洲一区3d动漫同人无遮挡| 欧美日韩免费观看一区三区 | 美女视频黄a大片欧美| 激情久久久久久久| 久久久久久亚洲精品中文字幕 | 香蕉久久一区二区不卡无毒影院| 欧美日韩国产一中文字不卡| 一本色道精品久久一区二区三区|