成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > 在CRUD操作中與業(yè)務(wù)無關(guān)的SQL字段賦值的方法

在CRUD操作中與業(yè)務(wù)無關(guān)的SQL字段賦值的方法

熱門標(biāo)簽:怎么去開發(fā)一個(gè)電銷機(jī)器人 南昌呼叫中心外呼系統(tǒng)哪家好 ai電話電話機(jī)器人 河北便宜電銷機(jī)器人軟件 小程序智能電話機(jī)器人 泗洪正規(guī)電話機(jī)器人找哪家 怎么申請(qǐng)400熱線電話 簡(jiǎn)單的智能語音電銷機(jī)器人 湖南保險(xiǎn)智能外呼系統(tǒng)產(chǎn)品介紹

提高效率一直是個(gè)永恒的話題,編程中有一項(xiàng)也是可以提到效率的,那就是專注做一件事情,讓其它沒有強(qiáng)緊密聯(lián)系的與之分開。這里分享下我們做CRUD時(shí)遇到的常見數(shù)據(jù)處理場(chǎng)景:

•數(shù)據(jù)庫表字段全部設(shè)計(jì)為非空,即使這個(gè)字段在業(yè)務(wù)上是可以為空的,之所以將數(shù)據(jù)庫表字段全部設(shè)計(jì)為非空,這里有優(yōu)點(diǎn)也有缺點(diǎn),我們認(rèn)為優(yōu)點(diǎn)大于缺點(diǎn),所以選擇了它

優(yōu)點(diǎn):

1.獲取值時(shí),不用判斷這個(gè)字段是否為null,直接可用于邏輯運(yùn)算。

2.mysql DBA推薦此方案,可能是有利于性能,這里我并非求證過。

缺點(diǎn):

1.業(yè)務(wù)含義沒有null清楚,比如int字段默認(rèn)值設(shè)置成0,0就沒有null語義清晰。

2.在使用ORM插入數(shù)據(jù)時(shí),需要處理非空字段值為null的問題。

• 系統(tǒng)字段的賦值,比如創(chuàng)建人,創(chuàng)建人id,創(chuàng)建時(shí)間,編輯人,編輯人id,編輯時(shí)間等,這些都需要在實(shí)際插入數(shù)據(jù)庫前賦值給Model。這些系統(tǒng)字段與具體的業(yè)務(wù)一般沒有太大的關(guān)聯(lián)關(guān)系,只是起到標(biāo)注數(shù)據(jù)被什么人在什么時(shí)間處理的,當(dāng)這些非業(yè)務(wù)相關(guān)的代碼充斥在代碼中時(shí),就顯得有些多余,而且這類代碼多了也會(huì)顯示冗余,最后帶來的結(jié)果就是非關(guān)鍵代碼比例大。

上面關(guān)于默認(rèn)值與null語義問題不需要解決,因?yàn)槲覀冋J(rèn)為具有默認(rèn)值帶來的優(yōu)點(diǎn)遠(yuǎn)大于可空字段帶來的煩惱,我們來看默認(rèn)值與系統(tǒng)字段一般情況下如何處理:

•在操作ORM時(shí),將模型所有可空的字段都手動(dòng)賦值成默認(rèn)值,int的賦值為0等。

•在設(shè)計(jì)數(shù)據(jù)庫時(shí),將非空字段加上默認(rèn)值,讓數(shù)據(jù)庫來處理這些未插入值的字段,如果使用mybatis的話,mapper中提到的插入操作有兩個(gè):insert,insertSelective,后面這個(gè)insertSelective就是處理非空字段的,即插入的模型對(duì)于不需要賦值的字段就保持null值,數(shù)據(jù)庫在插入時(shí)生成的sql語句也不會(huì)包含這些字段,這樣就可以利用上數(shù)據(jù)庫的默認(rèn)值了。如果正巧數(shù)據(jù)庫的結(jié)構(gòu)當(dāng)初設(shè)計(jì)時(shí)沒有設(shè)計(jì)默認(rèn)值,又不能改的情況就比較糟糕了,情況回到上面手動(dòng)賦值,可能會(huì)出現(xiàn)類似如下的代碼:編寫一個(gè)函數(shù)通過反射來解析每個(gè)字段,如果為null就修改為默認(rèn)值:

public static T> void emptyNullValue(final T model) {
Class?> tClass = model.getClass();
ListField> fields = Arrays.asList(tClass.getDeclaredFields());
for (Field field : fields) {
Type t = field.getType();
field.setAccessible(true);
try {
if (t == String.class  field.get(model) == null) {
field.set(model, "");
} else if (t == BigDecimal.class  field.get(model) == null) {
field.set(model, new BigDecimal(0));
} else if (t == Long.class  field.get(model) == null) {
field.set(model, new Long(0));
} else if (t == Integer.class  field.get(model) == null) {
field.set(model, new Integer(0));
} else if (t == Date.class  field.get(model) == null) {
field.set(model, TimeHelper.LocalDateTimeToDate(java.time.LocalDateTime.of(1990, 1, 1, 0, 0, 0, 0)));
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
} 

然后在代碼調(diào)用insert前調(diào)用函數(shù)來解決:

ModelHelper.emptyNullValue(request); 

如何處理系統(tǒng)字段呢,在創(chuàng)建編輯數(shù)據(jù)時(shí),需要獲取當(dāng)前用戶,然后根據(jù)邏輯分別更新創(chuàng)建人信息以及編輯人信息,我們專門編寫一個(gè)反射機(jī)制的函數(shù)來處理系統(tǒng)字段:

注:下面的系統(tǒng)字段的識(shí)別,是靠系統(tǒng)約定實(shí)現(xiàn)的,比如creator約定為創(chuàng)建人等,可根據(jù)不同的情況做數(shù)據(jù)兼容,如果系統(tǒng)設(shè)計(jì)的好,一般在一個(gè)系統(tǒng)下所有表的風(fēng)格應(yīng)該是相同的。

public static T> void buildCreateAndModify(T model,ModifyModel modifyModel,boolean isCreate){
Class?> tClass = model.getClass();
ListField> fields = Arrays.asList(tClass.getDeclaredFields());
for (Field field : fields) {
Type t = field.getType();
field.setAccessible(true);
try {
if(isCreate){
if (field.getName().equals(modifyModel.getcId())) {
field.set(model, modifyModel.getUserId());
}
if (field.getName().equals(modifyModel.getcName())) {
field.set(model, modifyModel.getUserName());
}
if (field.getName().equals(modifyModel.getcTime())) {
field.set(model, new Date());
}
}
if (field.getName().equals(modifyModel.getmId())) {
field.set(model, modifyModel.getUserId());
}
if (field.getName().equals(modifyModel.getmName())) {
field.set(model, modifyModel.getUserName());
}
if (field.getName().equals(modifyModel.getmTime())) {
field.set(model, new Date());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}

最后在數(shù)據(jù)處理前,根據(jù)創(chuàng)建或者編輯去調(diào)用函數(shù)來給系統(tǒng)字段賦值,這類代碼都混雜在業(yè)務(wù)代碼中。

ModifyModel modifyModel = new ModifyModel();
modifyModel.setUserId(getCurrentEmployee().getId());
modifyModel.setUserName(getCurrentEmployee().getName());
if (request.getId() == 0) {
ModelHelper.buildCreateAndModify(request, modifyModel, true);
deptService.insert(request);
} else {
ModelHelper.buildCreateAndModify(request, modifyModel, false);
deptService.updateByPrimaryKey(request);
}

我們可以利用參數(shù)注入來解決。參數(shù)注入的理念就是在spring mvc接收到前臺(tái)請(qǐng)求的參數(shù)后,進(jìn)一步對(duì)接收到的參數(shù)做處理以達(dá)到預(yù)期的效果。我們來創(chuàng)建

ManageModelConfigMethodArgumentResolver,它需要實(shí)現(xiàn)HandlerMethodArgumentResolver,這個(gè)接口看起來比較簡(jiǎn)單,包含兩個(gè)核心方法:

• 判斷是否是需要注入的參數(shù),一般通過判斷參數(shù)上是否有特殊的注解來實(shí)現(xiàn),也可以增加一個(gè)其它的參數(shù)判斷,可根據(jù)具體的業(yè)務(wù)做調(diào)整,我這里只以是否有特殊注釋來判定是否需要參數(shù)注入。

@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.hasParameterAnnotation(ManageModelConfig.class);
}

• 參數(shù)注入,它提供了一個(gè)擴(kuò)展入口,讓我們有機(jī)會(huì)對(duì)接收到的參數(shù)做進(jìn)一步的處理。

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
Object manageModel =getRequestResponseBodyMethodProcessor().resolveArgument(parameter, mavContainer, webRequest, binderFactory);
ServletRequest servletRequest = webRequest.getNativeRequest(ServletRequest.class);
Employee currentUser = (Employee) servletRequest.getAttribute(DEFAULT_ATTRIBUTE_GET_USER_FROM_REQUEST);
if (null == currentUser)
{
return manageModel;
}
ManageModelConfig parameterAnnotation = parameter.getParameterAnnotation(ManageModelConfig.class);
ModelHelper.setDefaultAndSystemFieldsValue(manageModel, currentUser,parameterAnnotation.isSetDefaultFieldsValue());
return manageModel;
}

這段函數(shù)有幾處核心邏輯:

•取得參數(shù)對(duì)象,因?yàn)槲覀兲幚淼氖莂jax請(qǐng)求的參數(shù),最簡(jiǎn)單的注入方法就是得到實(shí)際參數(shù)通過反射去處理默認(rèn)字段以及系統(tǒng)的值。ajax請(qǐng)求與form表單post提交的數(shù)據(jù)綁定略有不同,可參考之前文章分享的列表頁動(dòng)態(tài)搜索的參數(shù)注入(列表頁的動(dòng)態(tài)條件搜索)。獲取當(dāng)前請(qǐng)求參數(shù)對(duì)象,我們可以借助如下兩個(gè)對(duì)象配合來完成:

•RequestMappingHandlerAdapter

•RequestResponseBodyMethodProcessor

private RequestMappingHandlerAdapter requestMappingHandlerAdapter=null;
private RequestResponseBodyMethodProcessor requestResponseBodyMethodProcessor = null;
private RequestResponseBodyMethodProcessor getRequestResponseBodyMethodProcessor() {
if(null==requestMappingHandlerAdapter)
{
requestMappingHandlerAdapter=new RequestMappingHandlerAdapter();
}
if (null==requestResponseBodyMethodProcessor) {
ListHttpMessageConverter?>> messageConverters = requestMappingHandlerAdapter.getMessageConverters();
messageConverters.add(new MappingJackson2HttpMessageConverter());
requestResponseBodyMethodProcessor = new RequestResponseBodyMethodProcessor(messageConverters);
}
return requestResponseBodyMethodProcessor;
} 

通過如下代碼就可以取到參數(shù)對(duì)象了,其實(shí)就是讓spring mvc重新解析了一遍參數(shù)。

Object manageModel =getRequestResponseBodyMethodProcessor().resolveArgument(parameter, mavContainer, webRequest, binderFactory); 

•如何獲取當(dāng)前用戶,我們?cè)诔晒Φ卿浵到y(tǒng)后,將當(dāng)前用戶的信息存儲(chǔ)在request中,然后就可以在函數(shù)中獲取當(dāng)前用戶,也可以采用其它方案,比如ThreadLocal,緩存等等。

ServletRequest servletRequest = webRequest.getNativeRequest(ServletRequest.class);
Employee currentUser = (Employee) servletRequest.getAttribute(DEFAULT_ATTRIBUTE_GET_USER_FROM_REQUEST); 

•調(diào)用處理函數(shù)解決默認(rèn)字段以及系統(tǒng)的賦值,可以根據(jù)配置來決定是否處理字段默認(rèn)值。

ManageModelConfig parameterAnnotation = parameter.getParameterAnnotation(ManageModelConfig.class);
ModelHelper.setDefaultAndSystemFieldsValue(manageModel, currentUser,parameterAnnotation.isSetDefaultFieldsValue());

最后將我們的參數(shù)注入邏輯啟動(dòng)起來,這里選擇在xml中配置:

mvc:annotation-driven content-negotiation-manager="contentNegotiationManager">
mvc:argument-resolvers>
bean class="cn.wanmei.party.management.common.mvc.method.annotation.ManageModelConfigMethodArgumentResolver"/>
/mvc:argument-resolvers>
/mvc:annotation-driven> 

再看action中的調(diào)用:只需要在參數(shù)前面增加注解@ManageModelConfig,如果需要處理默認(rèn)值,則將啟用默認(rèn)值的選項(xiàng)設(shè)置成true即可,下面的實(shí)現(xiàn)部分完全看不到任何與業(yè)務(wù)無關(guān)的代碼。

@RequestMapping(value = "/addOrUpdateUser")
@ResponseBody
public MapString, Object> addOrUpdateUser(@ManageModelConfig(isSetDefaultFieldsValue=true) EmployeeDto request) {
MapString, Object> ret = new HashMap>();
ValidateUtil.ValidateResult result= new ValidateUtil().ValidateModel(request);
boolean isCreate=request.getId() == 0;
try {
if (isCreate)
{
employeeService.insert(request);
}
else
{
employeeService.updateByPrimaryKey(request);
}
ret.put("data", "ok");
}catch (Exception e){
ret.put("err", e.getMessage());
}
return ret;
}

通過自定義實(shí)現(xiàn)HandlerMethodArgumentResolver,來捕獲ajax請(qǐng)求的參數(shù),利用反射機(jī)制動(dòng)態(tài)的將系統(tǒng)字段以及需要處理默認(rèn)值的字段自動(dòng)賦值,避免人工干預(yù),起到了代碼精簡(jiǎn),邏輯干凈,問題統(tǒng)一處理的目的。需要注意的是這些實(shí)現(xiàn)都是結(jié)合當(dāng)前系統(tǒng)設(shè)計(jì)的,比如我們認(rèn)為id字段>0就代表是更新操作,為空或者等于小于0就代表是創(chuàng)建,系統(tǒng)字段也是約定名稱的等等。

您可能感興趣的文章:
  • SQL學(xué)習(xí)筆記五去重,給新加字段賦值的方法

標(biāo)簽:景德鎮(zhèn) 瀘州 江蘇 淮安 威海 荊門 柳州 那曲

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在CRUD操作中與業(yè)務(wù)無關(guān)的SQL字段賦值的方法》,本文關(guān)鍵詞  在,CRUD,操作,中,與,業(yè)務(wù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在CRUD操作中與業(yè)務(wù)無關(guān)的SQL字段賦值的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于在CRUD操作中與業(yè)務(wù)無關(guān)的SQL字段賦值的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    成年人网站免费看| 日本亚洲欧洲无免费码在线| 国产日韩一区二区在线观看| 国产精品久久久久久av下载红粉| 欧美亚洲第一区| 中文在线天堂网| 成人免费的视频| 韩日毛片在线观看| 大胆人体一区| 亚洲欧美日韩成人高清在线一区| 中文字幕在线观看视频网站| 久久99国产精品久久99果冻传媒| 中文字字幕码一二三区| 福利成人导航| 国产一二三区在线视频| 国产亚洲欧美色| 淫片在线观看| 99精品一区二区三区| 99热在线精品观看| 91tv亚洲精品香蕉国产一区7ujn| 狠狠干天天爱| 欧美一区二不卡视频| 日批免费观看视频| 欧美成人精精品一区二区频| 肉色丝袜一区二区| 亚洲小视频在线| 日韩午夜高潮| 在线观看免费黄色| 上原亚衣av一区二区三区| 伊人网在线视频观看| avtt中文字幕| 亚洲精品精选| 真实国产乱子伦对白视频| 91免费视频污| www视频在线观看| 极品尤物一区二区三区| 亚洲图片小说网| 国产女主播一区二区| 日韩1区2区日韩1区2区| 18aaaa精品欧美大片h| 在线免费观看日本欧美爱情大片| 亚洲高清黄色| 国产黄色片中文字幕| 国产亚洲精品久久久久久久| 资源网第一页久久久| 国产成人啪精品视频免费网| 99久久精品免费精品国产| 偷拍一区二区三区| 天天操综合网| 性欧美videos精品| 日韩avxxx| 91精品国产综合久久久久久漫画| 免费av在线| 91丨porny丨蝌蚪视频| 久久久久一区二区| 亚洲国产精品自拍视频| 日韩精品一区二区三区色欲av| 国产裸体美女永久免费无遮挡| 黄色高清视频| www.一区二区三区| 人与动性xxxxx免费视频| 日韩精品成人一区二区在线| 日本午夜在线亚洲.国产| 国产精品综合色区在线观看| 91精品久久久久久久久中文字幕| 久草在现在线| 久热这里只精品99re8久| 欧美一区二区私人影院日本| 一本色道久久88| 中文字幕自拍vr一区二区三区| 尤蜜粉嫩av国产一区二区三区| 国产精品黄色大片| 性生交免费视频| 精品视频一区在线| 免费免费啪视频在线观播放| 婷婷午夜社区一区| 人妻在线日韩免费视频| 麻豆视频成人| 在线www天堂网在线| 欧美r级电影| 日韩av中文字幕一区二区三区| 国产美女被遭强高潮免费网站| 国产欧美日韩精品在线观看| 精品国产视频一区二区三区| 欧美视频国产精品| 国产欧美一区二区三区在线看| 国产成人99久久亚洲综合精品| 国产亚洲免费的视频看| 亚洲色图视频免费播放| 色综合久久久888| 亚洲免费成人网| 国产高清精品久久久久| 7777kkk亚洲综合欧美网站| 一二三区不卡| 国产精品看片资源| 国产在线1区| 日韩www视频| 蜜臀av一区二区在线观看| 国产伦精品一区二区三区视频孕妇| 在线看视频你懂的| 亚洲精品一区二区三区精华液| 成人一级视频| 佐佐木明希电影| 欧美久久精品一级黑人c片| 激情在线小视频| 国产毛片精品国产一区二区三区| 久久久久性色av无码一区二区| 黄色欧美视频| 亚洲国产精品电影在线观看| 一级黄色小视频| 女厕盗摄一区二区三区| 97精品国产97久久久久久久久久久久| 中文字幕制服丝袜在线| 另类尿喷潮videofree| 免费永久在线观看黄网| 国产福利一区视频| 久久久另类综合| 成人动漫一区二区三区| 久久精品国产大片免费观看| 手机在线视频一区| 91嫩草在线播放| 一级做a爰片久久| 亚洲午夜在线播放| 在线成人中文字幕| 天堂av资源网| 在线观看xxx| 久久久久久久久久福利| 女女同性女同一区二区三区91| 麻豆tv在线观看| 亚洲在线免费观看视频| 久久激情免费视频| 性色av浪潮av| 国产精品三级a三级三级午夜| 经典三级在线| 北条麻妃视频在线| www.com操| 印度美女freesex性hd| 久久久免费精品| 丰满少妇在线观看bd| 亚洲乱色熟女一区二区三区| 精品夜色国产国偷在线| jizzjizz少妇亚洲水多| 99热99热| 欧美美女一区二区在线观看| 国产色爱av资源综合区| 亚洲成av人片www| 波多野结衣电车| 国产不卡在线一区| 国语自产偷拍精品视频偷| 都市激情在线视频| 无码少妇一区二区三区芒果| 蜜臀久久精品久久久用户群体| 97av影视网在线观看| 国产精品久久免费| 国产在视频线精品视频www666| 亚洲第一会所001| 成人免费观看男女羞羞视频| 亚洲美女综合网| 日日夜夜亚洲| 中文字幕人妻丝袜乱一区三区| 国产一区自拍视频| 国产精品极品国产中出| 天天摸在线视频| 欧美成在线视频| 亚洲日本中文字幕免费在线不卡| 牛夜精品久久久久久久| 久久久久99人妻一区二区三区| 三级黄色的网站| 亚洲少妇屁股交4| 91视视频在线观看入口直接观看www| 国产精品美女视频| 国产精品丝袜白浆摸在线| 亚洲图片激情小说| 日本三级理论片| 日韩精品社区| 日韩午夜三级在线| 亚洲第一综合| 国产裸体美女永久免费无遮挡| 妞干网免费在线视频| 久久免费精品视频| 亚洲另类欧美日韩| 香蕉视频911| 欧美日韩成人在线播放| 女厕嘘嘘一区二区在线播放| 在线免费日韩片| 日韩电影在线免费观看| 亚洲香蕉网站| 91最新地址在线播放| 国产精品红桃| 国产美女高潮久久白浆| 国产污视频网站| 天天综合网天天做天天受| a级片在线播放| 久久久精品免费网站| 东京热av一区| 亚洲www免费| jizz中国免费| 亚洲欧洲国产精品久久| 精品视频在线看| 538在线一区二区精品国产| 女人18毛片一区二区三区| 日日噜噜噜噜人人爽亚洲精品| 色婷婷在线观看视频| 99色这里只有精品| 精品国产日本| 国产三级视频在线看| 日本网站在线观看一区二区三区| 亚洲美女www午夜| 久久午夜宅男免费网站| 一区二区三区激情视频| 欧美日韩三级电影在线| 亚洲欧美国产精品va在线观看| 国产欧美精品一区二区三区| 美洲精品一卡2卡三卡4卡四卡| 桥本有菜亚洲精品av在线| 91黄视频在线观看| 久久草.com| julia中文字幕一区二区99在线| 粉嫩粉嫩芽的虎白女18在线视频| 国产九色精品| 国产在线播放不卡| 婷婷久久综合九色综合绿巨人| 狠狠色狠狠色综合日日五| 91av久久久| 天天干天天干天天干天天| 欧美天天综合网| 国产强被迫伦姧在线观看无码| 国产精品久久久久久久久久久久| 视频二区在线观看| 天天摸天天操天天干| 亚洲一区二区在线播放相泽| 国产三级电影在线观看| 国产69精品99久久久久久宅男| 国产精品久久三| 狠狠操狠狠色综合网| 少妇久久久久久被弄高潮| 91亚洲免费视频| 日本福利视频网站| 无人区在线高清完整免费版 一区二| 国产日产一区| 日韩欧美一区二区视频| 久久国产人妖系列| 一区二区视频免费观看| 成人免费高清在线播放| 可骚可骚的黄视频网站| 日韩av在线免费看| 国产成人avxxxxx在线看| 999久久久免费精品国产牛牛| 日韩在线电影| 久久久久久久久久久久久9999| 一区免费观看视频| 日韩中文视频免费在线观看| 亚洲欧洲日韩一区二区三区| 视频在线观看你懂的| 中文字幕av久久爽av| 国产亚洲精品av| 99久久久精品免费观看国产蜜| 美女精品视频在线| 午夜精品视频网站| 国产传媒在线看| 玖玖爱免费视频| 亚洲精品国产动漫| 欧美三级成人观看| 免费特级黄色片| 精品国产乱码久久久久久婷婷| 4438全国亚洲精品在线观看视频| brazzers欧美最新版视频| 国产精品久久久久久久久夜色| 西西444www无码大胆| 缅甸午夜性猛交xxxx| xfplay资源站夜色先锋| 最新二区三区av| 国产精品wwwww| 亚洲性感美女99在线| 91精品国产高清一区二区三区蜜臀| 7777精品伊人久久久大香线蕉经典版下载| 免看一级a毛片一片成人不卡| 亚洲v国产v在线观看| 午夜激情电影在线播放| 高潮毛片又色又爽免费| 国产亚洲精品成人av久久ww| 成人天堂资源www在线| 成人一区二区三区视频| 亚洲一区二区三区四区在线播放| 精品人妻无码一区二区色欲产成人| 激情91久久| 美女视频第一区二区三区免费观看网站| 欧美日本在线| 91麻豆免费视频网站| 日本韩国一区二区三区视频| 国产成人短视频| 区一区二在线观看| 懂色av噜噜一区二区三区av| 国产精品一区二区精品视频观看| 高h震动喷水双性1v1| 欧美精品在线一区二区三区| 成人短视频在线看| 91福利国产精品| 亚洲三区在线播放| 中文一区在线观看| 男男互摸gay网站| 成人自拍网站| 无码人妻丰满熟妇区毛片18| 日日夜夜精品免费| 日韩精品一二三区| 国产成人自拍一区| 在线天堂中文www官网| 国产69精品久久久久9999小说| 国产主播av在线| 国产一区二区在线看| 1区2区3区视频| 中文字幕理伦片免费看| 亚洲欧美手机在线| 欧美视频网址| 国产毛片久久| 99久久精品国产成人一区二区| 久久久久久久久久一级| 天堂中文字幕av| 欧美日韩亚洲第一| 极品少妇一区二区三区精品视频| 亚洲在线播放| 一区二区三区我不卡| 99久久婷婷这里只有精品| 精品免费在线| 美女av免费看| 美女一区视频| 高清av中文在线字幕观看1| 国产mv日韩mv欧美|