久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

詳解Spring Boot使用系統(tǒng)參數(shù)表提升系統(tǒng)的靈活性

瀏覽:4日期:2023-02-28 11:44:35
目錄一、使用系統(tǒng)參數(shù)表的好處二、系統(tǒng)參數(shù)表的表結(jié)構(gòu)三、系統(tǒng)參數(shù)表在項(xiàng)目中的使用3.1、Entity類3.2、Dao類3.3、Service類3.4、ServiceImpl類3.5、全局配置服務(wù)類3.6、啟動(dòng)時(shí)加載3.7、在服務(wù)實(shí)現(xiàn)類中訪問系統(tǒng)參數(shù)一、使用系統(tǒng)參數(shù)表的好處

​​以數(shù)據(jù)庫表形式存儲(chǔ)的系統(tǒng)參數(shù)表比配置文件(.properties文件或.yaml文件)要更靈活,因?yàn)闊o需重啟系統(tǒng)就可以動(dòng)態(tài)更新。

​系統(tǒng)參數(shù)表可用于存儲(chǔ)下列數(shù)據(jù):

表字段枚舉值,如下列字段:

`question_type` TINYINT(4) NOT NULL DEFAULT 0 COMMENT ’題型,1-單選題,2-多選題,3-問答題’,

​這個(gè)字段現(xiàn)在有3種取值,但是難保將來有擴(kuò)展的可能,如:是非題、計(jì)算題、應(yīng)用題等。

​因此將取值的枚舉值用系統(tǒng)參數(shù)表來配置,可以提高系統(tǒng)擴(kuò)展靈活性。

​另一方面,對(duì)于前端而言,就可以通過查詢系統(tǒng)參數(shù)表數(shù)據(jù),用于UI呈現(xiàn),而不必硬編碼。如前端需要用下拉框來顯示所有可能的”題型“,這個(gè)列表就可以查詢系統(tǒng)參數(shù)表來獲取。

​因此可以將所有字段枚舉值納入系統(tǒng)參數(shù)表管理。

參數(shù)設(shè)置,如郵件參數(shù),對(duì)接的第三方系統(tǒng)的URL等。

二、系統(tǒng)參數(shù)表的表結(jié)構(gòu)

​系統(tǒng)參數(shù)表的表結(jié)構(gòu)如下:

DROP TABLE IF EXISTS `sys_parameters`;CREATE TABLE `sys_parameters`( `class_id` INT(11) NOT NULL DEFAULT 0 COMMENT ’參數(shù)大類id’, `class_key` VARCHAR(60) NOT NULL DEFAULT ’’ COMMENT ’參數(shù)大類key’, `class_name` VARCHAR(60) NOT NULL DEFAULT ’’ COMMENT ’參數(shù)大類名稱’, `item_id` INT(11) NOT NULL DEFAULT 0 COMMENT ’參數(shù)大類下子項(xiàng)id’, `item_key` VARCHAR(200) NOT NULL DEFAULT ’’ COMMENT ’子項(xiàng)key’, `item_value` VARCHAR(200) NOT NULL DEFAULT ’’ COMMENT ’子項(xiàng)值’, `item_desc` VARCHAR(512) NOT NULL DEFAULT ’’ COMMENT ’子項(xiàng)描述’, -- 記錄操作信息 `login_name` VARCHAR(80) NOT NULL DEFAULT ’’ COMMENT ’操作人賬號(hào)’, `delete_flag` TINYINT(4) NOT NULL DEFAULT 0 COMMENT ’記錄刪除標(biāo)記,1-已刪除’, `create_time` DATETIME NOT NULL DEFAULT NOW() COMMENT ’創(chuàng)建時(shí)間’, `update_time` DATETIME DEFAULT NULL ON UPDATE NOW() COMMENT ’更新時(shí)間’, PRIMARY KEY (`class_id`, `item_id`)) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ’系統(tǒng)參數(shù)表’;

​說明:

​class_id字段只要確保一個(gè)參數(shù)大類(如一個(gè)枚舉字段名)使用唯一值。使用class_key和item_key自動(dòng),便于提高記錄數(shù)據(jù)和代碼的可讀性。class_key一般可以取字段名,但如果發(fā)生同名時(shí),需要修改,確保不同表的同名字段,使用不同的class_key。對(duì)于枚舉值類型,item_key可以取item_id相同的值,只是數(shù)據(jù)類型不同,此item_key轉(zhuǎn)換成整型數(shù),就是對(duì)應(yīng)字段的值。

​這個(gè)表的數(shù)據(jù)一般可以由開發(fā)人員提供,包括初始或變動(dòng)的SQL腳本,由DBA執(zhí)行,項(xiàng)目無需為此開發(fā)界面來維護(hù)。

​下面是初始腳本示例:

INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)VALUES (11, ’receive_flag’, ’短信接收標(biāo)志’, 0, ’0’, ’未接收’, ’’);INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)VALUES (11, ’receive_flag’, ’短信接收標(biāo)志’, 1, ’1’, ’已接收’, ’’);INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)VALUES (11, ’receive_flag’, ’短信接收標(biāo)志’, 2, ’2’, ’發(fā)送失敗’, ’’);INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)VALUES (12, ’question_type’, ’題型’, 1, ’1’, ’單選題’, ’’);INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)VALUES (12, ’question_type’, ’題型’, 2, ’2’, ’多選題’, ’’);INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)VALUES (12, ’question_type’, ’題型’, 3, ’3’, ’問答題’, ’’);INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)VALUES (101, ’url_param’, ’URL參數(shù)’, 0, ’url_prefix’, ’http://questinvest.abc.com:8880’, ’url前綴部分’);INSERT INTO sys_parameters(class_id, class_key, class_name, item_id, item_key, item_value, item_desc)VALUES (101, ’url_param’, ’URL參數(shù)’, 1, ’url_action’, ’/questInvest/show’, ’請(qǐng)求接口方法’);三、系統(tǒng)參數(shù)表在項(xiàng)目中的使用

​在Spring Boot項(xiàng)目中,系統(tǒng)參數(shù)表一般只需在應(yīng)用啟動(dòng)時(shí)加載一次,并提供更新接口允許管理員來更新數(shù)據(jù)。下面詳細(xì)說明使用方法。

3.1、Entity類

​先定義系統(tǒng)參數(shù)表的實(shí)體類,實(shí)體類為SysParameter,代碼如下:

package com.abc.questInvest.entity;import javax.persistence.Column;import lombok.Data;/** * @className: SysParameter * @description: 系統(tǒng)參數(shù)信息對(duì)象類 * */@Datapublic class SysParameter {//參數(shù)大類id@Column(name = 'class_id')private Integer classId;//參數(shù)大類key@Column(name = 'class_key')private String classKey;//參數(shù)大類名稱@Column(name = 'class_name')private String className;//子項(xiàng)id@Column(name = 'item_id')private Integer itemId;//子項(xiàng)key@Column(name = 'item_key')private String itemKey;//子項(xiàng)值@Column(name = 'item_value')private String itemValue;//子項(xiàng)描述@Column(name = 'item_desc')private String itemDesc;//========記錄操作信息================ // 操作人姓名 @Column(name = 'login_name') private String loginName; // 記錄刪除標(biāo)記,保留 @Column(name = 'delete_flag') private Byte deleteFlag;// 創(chuàng)建時(shí)間 @Column(name = 'create_time') private Date createTime; // 更新時(shí)間 @Column(name = 'update_time') private Date updateTime;}3.2、Dao類

​數(shù)據(jù)訪問類為SysParameterDao,代碼如下:

package com.abc.questInvest.dao;import java.util.List;import org.apache.ibatis.annotations.Mapper;import org.apache.ibatis.annotations.Select;import com.abc.questInvest.entity.SysParameter;/** * @className: SysParameterDao * @description: sys_parameters表數(shù)據(jù)訪問類 * */@Mapperpublic interface SysParameterDao {//查詢所有系統(tǒng)參數(shù),按class_id,item_id排序@Select('SELECT class_id,class_key,class_name,item_id,item_key,item_value,item_desc'+ ' FROM sys_parameters WHERE delete_flag = 0' + ' ORDER BY class_id,item_id') List<SysParameter> selectAll();}

​SysParameterDao類,使用Mybatis,只需提供查詢接口就行了,因?yàn)樾薷脑跀?shù)據(jù)庫后臺(tái)執(zhí)行了。當(dāng)然如果項(xiàng)目方認(rèn)為有必要提供界面來維護(hù)該表,則可增加相應(yīng)CRUD的接口。

3.3、Service類

​服務(wù)接口類為SysParameterService,代碼如下:

package com.abc.questInvest.service;import java.util.List;import com.abc.questInvest.entity.SysParameter;/** * @className: SysParameterService * @description: 系統(tǒng)參數(shù)數(shù)據(jù)服務(wù) * */public interface SysParameterService {/** * * @methodName: loadData * @description: 加載數(shù)據(jù)庫中數(shù)據(jù),允許重復(fù)調(diào)用 * @return: 成功返回true,否則返回false。 * */public boolean loadData();/** * * @methodName: getParameterClass * @description: 獲取指定classKey的參數(shù)類別的子項(xiàng)列表 * @param classKey: 參數(shù)類別key * @return: 指定classKey的參數(shù)類別的子項(xiàng)列表 * */public List<SysParameter> getParameterClass(String classKey);/** * * @methodName: getParameterItemByKey * @description: 根據(jù)classKey和itemKey獲取參數(shù)子項(xiàng) * @param classKey: 參數(shù)類別key * @param itemKey: 子項(xiàng)key * @return: SysParameter對(duì)象 * */public SysParameter getParameterItemByKey(String classKey,String itemKey);/** * * @methodName: getParameterItemByValue * @description: 根據(jù)classKey和itemValue獲取參數(shù)子項(xiàng) * @param classKey: 參數(shù)類別key * @param itemValue: 子項(xiàng)值 * @return: SysParameter對(duì)象 * */public SysParameter getParameterItemByValue(String classKey,String itemValue);}

​SysParameterService類定義了下列接口方法:

loadData方法,用于初始加載數(shù)據(jù)和更新數(shù)據(jù)。 getParameterClass方法,獲取指定classKey的類別的所有子項(xiàng)列表。此方法調(diào)用會(huì)非常頻繁。 getParameterItemByKey方法,根據(jù)classKey和itemKey獲取參數(shù)子項(xiàng),用于根據(jù)枚舉值顯示物理含義。此方法調(diào)用會(huì)非常頻繁。 getParameterItemByValue方法,根據(jù)classKey和itemValue獲取參數(shù)子項(xiàng),用于根據(jù)物理含義取得枚舉值。此方法調(diào)用會(huì)非常頻繁。3.4、ServiceImpl類

​服務(wù)實(shí)現(xiàn)類為SysParameterServiceImpl,代碼如下:

package com.abc.questInvest.service.impl;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.abc.questInvest.dao.SysParameterDao;import com.abc.questInvest.entity.SysParameter;import com.abc.questInvest.service.SysParameterService;import lombok.extern.slf4j.Slf4j;/** * @className: SysParameterServiceImpl * @description: SysParameterService實(shí)現(xiàn)類 * @summary: 實(shí)現(xiàn)對(duì)系統(tǒng)參數(shù)的管理 * */@Slf4j@Servicepublic class SysParameterServiceImpl implements SysParameterService{//sys_parameters表數(shù)據(jù)訪問對(duì)象@Autowiredprivate SysParameterDao sysParameterDao;//管理全部的SysParameter表記錄private Map<String,Map<String,SysParameter>> sysParameterMap = new HashMap<String,Map<String,SysParameter>>();/** * * @methodName: loadData * @description: 加載數(shù)據(jù)庫中數(shù)據(jù) * @return: 成功返回true,否則返回false。 * */@Overridepublic boolean loadData() {try{//查詢sys_parameters表,獲取全部數(shù)據(jù)List<SysParameter> sysParameterList = sysParameterDao.selectAll();synchronized(sysParameterMap) {//先清空map,便于刷新調(diào)用sysParameterMap.clear();//將查詢結(jié)果放入map對(duì)象中,按每個(gè)類別組織for(SysParameter item : sysParameterList) {String classKey = item.getClassKey();String itemKey = item.getItemKey();Map<String,SysParameter> sysParameterClassMap = null;if (sysParameterMap.containsKey(classKey)) {//如果存在該類別,則獲取對(duì)象sysParameterClassMap = sysParameterMap.get(classKey);}else {//如果不存在該類別,則創(chuàng)建sysParameterClassMap = new HashMap<String,SysParameter>();//加入map中sysParameterMap.put(classKey, sysParameterClassMap);}sysParameterClassMap.put(itemKey,item);}}}catch(Exception e) {log.error(e.getMessage());e.printStackTrace();return false;}return true;}/** * * @methodName: getParameterClass * @description: 獲取指定classKey的參數(shù)類別的子項(xiàng)列表 * @param classKey: 參數(shù)類別key * @return: 指定classKey的參數(shù)類別的子項(xiàng)列表 * */@Overridepublic List<SysParameter> getParameterClass(String classKey){List<SysParameter> sysParameterList = new ArrayList<SysParameter>();//獲取classKey對(duì)應(yīng)的子map,將所有子項(xiàng)加入列表中if (sysParameterMap.containsKey(classKey)) {Map<String,SysParameter> sysParameterClassMap = sysParameterMap.get(classKey);for(SysParameter item : sysParameterClassMap.values()) {sysParameterList.add(item);}}return sysParameterList;}/** * * @methodName: getParameterItemByKey * @description: 根據(jù)classKey和itemKey獲取參數(shù)子項(xiàng) * @param classKey: 參數(shù)類別key * @param itemKey: 子項(xiàng)key * @return: SysParameter對(duì)象 * */@Overridepublic SysParameter getParameterItemByKey(String classKey,String itemKey) {SysParameter sysParameter = null;if (sysParameterMap.containsKey(classKey)) {//如果classKey存在Map<String,SysParameter> sysParameterClassMap = sysParameterMap.get(classKey);if (sysParameterClassMap.containsKey(itemKey)) {//如果itemKey存在sysParameter = sysParameterClassMap.get(itemKey);}}return sysParameter;}/** * * @methodName: getParameterItemByValue * @description: 根據(jù)classKey和itemValue獲取參數(shù)子項(xiàng) * @param classKey: 參數(shù)類別key * @param itemValue: 子項(xiàng)值 * @return: SysParameter對(duì)象 * */@Overridepublic SysParameter getParameterItemByValue(String classKey,String itemValue) {SysParameter sysParameter = null;if (sysParameterMap.containsKey(classKey)) {//如果classKey存在Map<String,SysParameter> sysParameterClassMap = sysParameterMap.get(classKey);//遍歷for (Map.Entry<String,SysParameter> item : sysParameterClassMap.entrySet()) {if(item.getValue().getItemValue().equals(itemValue)) {//如果匹配值sysParameter = item.getValue();break;}}}return sysParameter;}}

​SysParameterServiceImpl類使用了Map<String,Map<String,SysParameter>>類型的屬性變量sysParameterMap來管理全部的系統(tǒng)參數(shù),外層Map管理classKey到Map<String,SysParameter>的映射關(guān)系,每一項(xiàng)為一個(gè)參數(shù)類別,而里層Map<String,SysParameter>,用于管理itemKey與SysParameter之間的映射關(guān)系,每一項(xiàng)為該類別下的一個(gè)子項(xiàng)。使用sysParameterMap屬性的目的,是將所有系統(tǒng)參數(shù)都加載到內(nèi)存中,從而無需頻繁訪問數(shù)據(jù)庫。

​loadData方法,用于初始加載數(shù)據(jù)和更新時(shí)刷新數(shù)據(jù),為了防止更新時(shí)臟讀數(shù)據(jù),加了同步鎖。這個(gè)方法調(diào)用不頻繁。

3.5、全局配置服務(wù)類

​全局配置服務(wù)類用于管理全局配置參數(shù),包括系統(tǒng)參數(shù)、權(quán)限樹等。如果只有一種參數(shù),可以不必有此類,因?yàn)檫@樣加了一層殼。

​服務(wù)接口類為GlobalConfigService,代碼如下:

package com.abc.questInvest.service;/** * @className: GlobalConfigService * @description: 全局變量管理類 * */public interface GlobalConfigService {/** * * @methodName: loadData * @description: 加載數(shù)據(jù) * @return: 成功返回true,否則返回false * */public boolean loadData();//獲取SysParameterService對(duì)象public SysParameterService getSysParameterService();//獲取其它配置數(shù)據(jù)服務(wù)對(duì)象//public FunctionTreeService getFunctionTreeService();}

​GlobalConfigService提供了下列接口方法:

loadData方法,加載配置對(duì)象數(shù)據(jù),確定多個(gè)配置對(duì)象的加載次序。 getSysParameterService方法,獲取系統(tǒng)參數(shù)服務(wù)類對(duì)象。 獲取其它可能的配置服務(wù)對(duì)象的方法。

​服務(wù)實(shí)現(xiàn)類為GlobalConfigServiceImpl,代碼如下:

package com.abc.questInvest.service.impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.abc.questInvest.service.FunctionTreeService;import com.abc.questInvest.service.GlobalConfigService;import com.abc.questInvest.service.RoleFuncRightsService;import com.abc.questInvest.service.SysParameterService;import com.abc.questInvest.service.TableCodeConfigService;/** * @className: GlobalConfigServiceImpl * @description: GlobalConfigService實(shí)現(xiàn)類 * */@Servicepublic class GlobalConfigServiceImpl implements GlobalConfigService{//系統(tǒng)參數(shù)表數(shù)據(jù)服務(wù)對(duì)象@Autowiredprivate SysParameterService sysParameterService;//其它配置數(shù)據(jù)服務(wù)對(duì)象/** * * @methodName: loadData * @description: 加載數(shù)據(jù) * @return: 成功返回true,否則返回false * */@Overridepublic boolean loadData() {boolean bRet = false;//加載sys_parameters表記錄bRet = sysParameterService.loadData();if (!bRet) {return bRet;}//加載其它配置數(shù)據(jù)return bRet;}//獲取SysParameterService對(duì)象@Overridepublic SysParameterService getSysParameterService() {return sysParameterService;}//獲取其它配置數(shù)據(jù)服務(wù)對(duì)象方法}3.6、啟動(dòng)時(shí)加載

​全局配置服務(wù)類在應(yīng)用啟動(dòng)時(shí)加載到Spring容器中,這樣可實(shí)現(xiàn)共享,減少對(duì)數(shù)據(jù)庫的訪問壓力。

​實(shí)現(xiàn)一個(gè)ApplicationListener類,代碼如下:

package com.abc.questInvest;import javax.servlet.ServletContext;import org.springframework.context.ApplicationListener;import org.springframework.context.event.ContextRefreshedEvent;import org.springframework.stereotype.Component;import org.springframework.web.context.WebApplicationContext;import com.abc.questInvest.service.GlobalConfigService;/** * @className: ApplicationStartup * @description: 應(yīng)用偵聽器 * */@Componentpublic class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent>{ //全局變量管理對(duì)象,此處不能自動(dòng)注入 private GlobalConfigService globalConfigService = null;@Override public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {try {if(contextRefreshedEvent.getApplicationContext().getParent() == null){ //root application context 沒有parent.System.out.println('========定義全局變量==================');// 將 ApplicationContext 轉(zhuǎn)化為 WebApplicationContext WebApplicationContext webApplicationContext = (WebApplicationContext)contextRefreshedEvent.getApplicationContext(); // 從 webApplicationContext 中獲取 servletContext ServletContext servletContext = webApplicationContext.getServletContext();//加載全局變量管理對(duì)象 globalConfigService = (GlobalConfigService)webApplicationContext.getBean(GlobalConfigService.class); //加載數(shù)據(jù) boolean bRet = globalConfigService.loadData(); if (false == bRet) { System.out.println('加載全局變量失敗'); return; } //====================================================================== // servletContext設(shè)置值 servletContext.setAttribute('GLOBAL_CONFIG_SERVICE', globalConfigService); } } catch (Exception e) {e.printStackTrace(); } }}

​注意,globalConfigService不能自動(dòng)注入,否則得到空指針。通過下列代碼來加載bean。

//加載全局變量管理對(duì)象globalConfigService = (GlobalConfigService)webApplicationContext.getBean(GlobalConfigService.class);

​代碼中,將globalConfigService對(duì)象作為全局變量加入ServletContext中,就可以實(shí)現(xiàn)共享了。

​在啟動(dòng)類中,加入該應(yīng)用偵聽器ApplicationStartup。

public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(QuestInvestApplication.class); springApplication.addListeners(new ApplicationStartup()); springApplication.run(args); }3.7、在服務(wù)實(shí)現(xiàn)類中訪問系統(tǒng)參數(shù)

​HttpServletRequest類型對(duì)象request在控制器方法中可以獲取,可作為參數(shù)傳入服務(wù)實(shí)現(xiàn)類的方法中。下面是服務(wù)實(shí)現(xiàn)類訪問系統(tǒng)參數(shù)的示例代碼:

//獲取ServletContext對(duì)象ServletContext servletContext = request.getServletContext();//獲取全部數(shù)據(jù)服務(wù)對(duì)象GlobalConfigService globalConfigService = (GlobalConfigService)servletContext.getAttribute('GLOBAL_CONFIG_SERVICE');//獲取系統(tǒng)參數(shù)url_prefix的值String url_prefix = '';SysParameter sysParameter = null;sysParameter = globalConfigService.getSysParameterService().getParameterItemByKey('url_param', 'url_prefix');if (sysParameter != null) { url_prefix = sysParameter.getItemValue();}

以上就是詳解Spring Boot使用系統(tǒng)參數(shù)表提升系統(tǒng)的靈活性的詳細(xì)內(nèi)容,更多關(guān)于Spring Boot使用系統(tǒng)參數(shù)表提升系統(tǒng)的靈活性的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 中文字幕在线免费观看 | 成人做爰69片免费 | 精品欧美一区二区在线观看视频 | 色135综合网 | 中文字幕在线三区 | 国产一区二区精品在线观看 | 国产精品污www一区二区三区 | 播放一级毛片 | 国产精品久久久久久婷婷天堂 | 国产视频久久久久 | 亚洲综合99 | 天天插天天干 | www.久久.com| 亚洲一区二区三 | 欧美日韩视频 | 中文字幕精品视频在线观看 | 亚洲片在线观看 | 8x国产精品视频一区二区 | 久久久精品久久久久久 | 亚洲中字在线 | www麻豆| 91久久国产 | 日韩成人一区二区 | 国产综合精品一区二区三区 | 91丁香婷婷综合久久欧美 | 国产精品免费一区二区三区四区 | 国产精品久久久久久影院8一贰佰 | 亚洲a视频 | 中文在线a在线 | 日韩三级 | 成人免费网站在线观看 | 久久99视频精品 | 中文成人在线 | 色吧欧美| 在线小视频 | 成人毛片久久 | 国产精品日本欧美一区二区三区 | 国产av毛片| 国产精品久久久久久吹潮 | 91 视频网站| 国产日韩在线播放 | 国产一区免费 | 一区二区三区视频免费看 | 国产高清不卡 | 欧美精品91 | www.久草.com| 黄色影片网址 | 欧美一级毛片久久99精品蜜桃 | 国产综合久久久久久鬼色 | 国产精品视频一二三区 | 久久精品一区二区三区不卡牛牛 | 免费网站国产 | 国产片淫级awww | 中文字幕成人av | 不卡的毛片 | 国产毛片视频 | 男女网站在线观看 | 免费a视频| 伊人精品在线 | 香蕉大人久久国产成人av | 91免费在线视频 | 精品久久一区二区三区 | 超碰官网 | 99久久日韩精品视频免费在线观看 | 一区二区三区国产 | 欧美激情一区二区三级高清视频 | 精久久| 嫩草视频在线观看免费 | 在线不卡a资源高清 | 日韩精品视频在线观看一区二区 | 欧美一级做a爰片免费视频 亚洲精品一区在线观看 | va在线观看| 日韩电影一区 | 日韩精品| 国产亚洲一区二区三区在线观看 | 在线观看亚洲精品视频 | 中文字幕高清视频 | 亚洲精品国产二区 | 国产片侵犯亲女视频播放 | 亚洲精品视频在线 | 成人免费黄色片 | 国产99在线 | 欧美 | 久久精品麻豆 | 国产精品久久免费视频在线 | 色人人 | hd国产人妖ts另类视频 | 久久国产精彩视频 | 天天草天天干 | 91精彩视频在线观看 | 视色网站 | 91久久精品日日躁夜夜躁欧美 | 中文在线一区二区 | 国产视频自拍一区 | 秋霞在线一区 | 一区二区三区免费 | 91精品国产综合久久久久久 | 后人极品翘臀美女在线播放 | 午夜在线电影 | 国产高潮失禁喷水爽网站 | 91精品久久 | 麻豆av一区 | 久久精品久久久 | 国产日韩欧美精品一区二区三区 | 久久精品亚洲精品国产欧美 | 少妇黄色| 中文字幕在线视频一区 | 黄色在线免费观看 | 国产精品视频一区二区三区不卡 | 成人免费观看男女羞羞视频 | 成年人黄色一级片 | 天堂一区| 久久成人国产精品 | 成人精品一区 | 狠狠操一区二区三区 | 免费国产视频 | 国产精品高潮呻吟 | 亚洲永久免费 | 亚洲一区二区三区四区五区中文 | 日本精品免费观看 | 台湾佬亚洲色图 | 精品国产31久久久久久 | 亚洲男人av| 亚洲福利在线观看 | 久久精品一级 | 欧美精品激情 | 蜜月久综合久久综合国产 | 国产精品第一国产精品 | 亚洲色图一区二区三区 | 国产精品99一区二区三区 | 日日操操 | 欧美一区二区三区国产精品 | 一级在线观看 | 午夜影院免费体验区 | 欧美精品成人在线视频 | 久久精品在线观看视频 | 久久国内精品 | 欧美日韩一区二区视频在线观看 | 亚洲精品免费在线 | 2019天天操| 日日操日日操 | 欧美一区久久 | 91精品久久久久久久久久 | 91精品国产99久久久久久红楼 | 欧美精品成人一区二区三区四区 | 精品一区二区三区四区视频 | 国产中文字幕一区二区三区 | 免费不卡视频 | 中文字幕永久第一页 | 91视频观看| 精品视频一区二区三区四区 | 国产精品久久久久久久久免费丝袜 | 欧美视频一区 | 人人干人人看 | 久久久久久国产一级毛片高清版 | 超碰香蕉| 欧美黑人做爰xxxⅹ 国产精品一区二区视频 | 国产精品一区二区三区免费 | 天堂色网 | 日韩欧美国产精品综合嫩v 久久久久久国产精品高清 国产目拍亚洲精品99久久精品 | 91破解版在线 | 亚洲 | 久久黄色网| 蜜臀久久99精品久久久无需会员 | 久久久久国产精品视频 | 久久免费视频3 | 成人午夜免费视频 | 亚洲美女一区二区三区 | 免费看91 | 亚洲视频中文字幕 | 日本三级在线观看网站 | 亚洲一区二区三区在线免费观看 | 精品国产伦一区二区三区观看说明 | 超碰av人人 | 一区二区三区精品 | 伊人网视频 | 波多野结衣亚洲 | www.av欧美 | 一级淫片免费 | 久久av网| av一区二区在线观看 | 99精品网站| 亚洲国产精品99久久久久久久久 | 成人免费视频网站在线观看 | 欧美高清成人 | 国产精品女同一区二区久久夜 | 亚洲欧美综合精品久久成人 | 免费午夜视频 | 人人澡人人射 | 亚洲精品久久久久久久久久久久久 | 在线亚洲欧美 | 午夜免费剧场 | 欧美一区二区三区在线观看 | 国产69精品久久久久观看黑料 | 精品一区二区三区在线观看视频 | 国产精久久一区二区三区 | 日韩视频在线观看中文字幕 | 久久这里只有精品23 | 日韩在线看片 | 日韩欧美在线中文字幕 | 日韩欧美在线免费观看 | 成人超碰在线 | 国产精品免费观看 | 最新日韩在线观看视频 | 日韩成人一区二区 | 天天舔日日干 | 国产婷婷精品av在线 | 中文字幕在线不卡 | 色综合免费 | 成人免费黄色毛片 | 国产精品无码永久免费888 | 在线观看视频91 | 欧产日产国产精品一二 | 色小妹一二三区 | 亚洲www视频 | 激情毛片| 97视频在线免费观看 | 91免费版在线观看 | 日韩欧美中字 | 国产精品成av人在线视午夜片 | 日韩精品一区二区三区在线 | 久草新免费| 国产精品美女久久久久久免费 | 国产一二三区在线观看 | 美女天堂网 | 成人在线免费视频 | 久久99精品久久久久久琪琪 | 一区二区视频在线观看 | 午夜视频在线观看网站 | 精品视频免费观看 | 亚洲一区二区三区四区 | 午夜大片网 | 五月婷婷丁香婷婷 | 亚洲日韩中文字幕一区 | 成人在线一区二区三区 | 伊人久久国产 | 精品人人 | 中文字幕 国产精品 | 久久99亚洲精品 | 91精品免费在线观看 | 国产精品毛片久久久久久 | 国产精品18久久久久久首页狼 | 91亚洲精品一区 | 五月天婷婷综合 | 国产精品午夜电影 | 久久欧美高清二区三区 | 麻豆专区一区二区三区四区五区 | 日韩精品中文字幕在线播放 | 日韩三级电影在线免费观看 | 久久中文字幕视频 | 国产亚洲精品成人av久久ww | 日韩成人高清 | 在线观看理论电影 | 情一色一乱一欲一区二区 | 五月婷婷导航 | 色玖玖| 亚洲国产精品久久久久秋霞蜜臀 | 国产精品成av人在线视午夜片 | 一区二区三区 在线 | 成年人黄色免费视频 | 免费在线观看一级毛片 | 成人在线免费观看 | 尹人成人 | 国产福利一区二区 | 亚洲欧美精品 | 国产日韩中文字幕 | 亚洲毛片 | 久久国产亚洲 | 国产精品久久久久久久 | 国产日韩精品在线 | 国产精品无码久久久久 | www.涩涩视频 | 第一福利丝瓜av导航 | 精品无人乱码一区二区三区的优势 | 中文字幕第七页 | 久久久久久成人 | 日韩av一区二区三区在线观看 | 欧美日韩不卡合集视频 | 欧美一性一交 | 中文字幕视频在线免费 | 人人玩人人干 | 免费在线色 | 亚洲黄色国产 | 久操视频在线观看 | 黄色小视频在线观看 | 国产精品美女久久久久aⅴ国产馆 | 亚洲免费在线观看 | 干干干操操操 | 亚洲精品免费在线观看 | 亚洲免费在线播放 | а天堂中文最新一区二区三区 | 99在线免费观看 | 美女h视频 | 欧美涩涩网站 | 日韩欧美视频在线 | 99精品欧美一区二区三区 | 蜜臀久久99精品久久久无需会员 | 久久婷婷欧美 | 成人激情视频在线观看 | 日韩欧美国产一区二区三区 | 伊人网网站 | 久久久久久久成人 | 欧美一区二区三区精品免费 | av高清在线看 | 伊人精品视频 | 免费的黄色网 | 伦理午夜电影免费观看 | 91视频免费在线看 | 国产午夜久久 | 狠狠躁夜夜躁人人爽天天高潮 | 久久爱www. | 国产欧美一区二区三区在线看 | 国产日韩一区二区 | 日韩91精品 | 蜜桃精品久久久久久久免费影院 | 精品无人乱码区1区2区3区 | 亚洲毛片在线观看 | 日韩精品一区二区三区四区 | 免费黄色网止 | 国产高清视频一区二区 | 国产亚洲综合一区二区 | 欧美日韩国产免费一区二区三区 | 少妇精品视频在线观看 | 一区二区日韩欧美 | 日韩欧美在线免费观看 | 欧美黄 片免费观看 | 国产欧美精品一区aⅴ影院 毛片视频网站 | 久久的爱 | 久久综合久色欧美综合狠狠 | 国产精品久久久久久久久久东京 | 视频在线一区二区三区 | 国产精品第2页 | 一区二区三区国产在线观看 | 精品国产一区二区三区免费 | 国产偷自视频区视频 | 国产乱码精品一区二区三区忘忧草 | 夜夜操导航 | 在线观看成人 | 三级黄色片在线观看 | 亚洲欧洲在线观看 | 日韩在线播放一区二区三区 | 一级片av | 国产伦精品一区二区三区在线 | 国产高清在线精品 | 国产精品久久久久久久久久久久冷 | 午夜精品亚洲日日做天天做 | 91色在线 | 久久高清国产 | 国产中文字幕亚洲 | 中文字幕av亚洲精品一部二部 | 久久免费精品视频 | 最新国产在线视频 | 国产激情视频在线观看 | 97国产精品视频人人做人人爱 | 国产亚洲精品久久久久动 | 欧美日韩中文在线观看 | 国产毛片网站 | 国产一区二区视频在线观看 | 一区二区不卡视频 | 91麻豆久久久 | 在线观看中文视频 | 久久99深爱久久99精品 | 嫩草影院在线观看91麻豆 | 国产精久久久久 | 91av视频在线观看 | 午夜影剧院| 色视频网站在线观看 | 亚洲狠狠久久综合一区77777 | 麻豆一区 | 久久99这里只有精品 | 国产一二三区在线播放 | 国产美女精品 | 岛国av在线 | 久久成人午夜 | 亚洲久久| 欧美成年黄网站色视频 | 国产精品一区免费在线观看 | 亚洲午夜精品一区二区三区 | 日本一区二区高清不卡 | 国产精品久久久99 | 国产精品美女www爽爽爽动态图 | 国产日韩中文字幕 | 国产精品成人3p一区二区三区 | 国产精品久久在线观看 | 日批免费观看视频 | 看久久毛片| 羞羞视频免费网站 | 伊人免费观看视频 | 天堂资源 | 91在线精品一区二区 | 国产成人免费视频网站视频社区 | 国产精品久久久久免费 | 国产精品久久久久久久久晋中 | 伊人久久精品久久亚洲一区 | 国产精品美女久久久久久久久久久 | 欧美一区二区三区电影 | 国产传媒在线 | 亚洲免费网站 | 欧美男人天堂网 | 99亚洲精品 | 黄片毛片 | 女人夜夜春 | 精品国产乱码久久久久久蜜柚 | 亚洲一区在线视频 | 日韩大尺度电影在线观看 | 国产亚洲欧美精品永久 | 久久9999久久| 日韩精品一区二区三区第95 | 国产区日韩区欧美区 | 在线观看视频一区二区 | 亚洲精品v日韩精品 | www.com国产精品 | 日日干日日操 | 色伊人| 国产一区免费视频 | 成人欧美一区二区三区黑人孕妇 | 久久亚| 欧美一区三区 | 天堂va | 中国特级黄色片 | www.日韩三级 | 夜夜夜操| 欧美精品一区二区在线观看 | 久久久国产精品视频 | 99国产精品久久久久久久成人热 | 亚洲激情一区二区 | 国产一区二区精品 | 国产一区二区三区91 | 日韩午夜激情视频 | 欧美一区二区免费 | 亚洲欧洲tv | 蜜桃精品在线观看 | 欧美在线视频一区 | 91视频免费看 | 99国内精品久久久久久久 | 国产精品国产精品 | 黄色国产区 | 欧美日韩不卡合集视频 | a级毛片免费高清视频 | 日韩网站免费观看 | 在线色网站 | av三级在线免费观看 | 国产成人高清视频 | 暖暖日本在线视频 | 看毛片的网站 | 久久99深爱久久99精品 | 自拍偷拍一区二区三区 | 在线观看国产精品一区二区 | 精品成人免费一区二区在线播放 | 亚洲a在线播放 | 美女国产 | 久久国产成人 | 日韩欧美国产一区二区三区 | 国产精品自产av一区二区三区 | 精品久久久久久亚洲综合网 | 黄色片一区 | 欧美成人精品在线视频 | 美女视频一区二区三区 | 超碰日韩在线 | 成人精品久久久 | 亚洲成人一二区 | 亚洲人成在线播放 | 超碰操| 欧美在线网站 | 欧美视频免费在线 | 伊人激情网 | 特级淫片日本高清视频免费 | 成人国产精品一级毛片视频 | 欧美日韩在线播放 | 91精品综合久久久久久五月天 | 精品国产鲁一鲁一区二区在线观看 | 国产精品久久久久久久久久东京 | 日韩一区在线视频 | 福利久久 | 欧美成人精品一区二区男人看 | 国产日韩精品一区二区 | 久久99国产精品 | 亚洲天堂中文字幕 | 欧美78videosex性欧美 | 日韩av免费在线观看 | 日韩国产一区二区 | 久久精品中文字幕 | 欧美精品在线观看 | 免费成人在线电影 | 色偷偷噜噜噜亚洲男人 | 九九久久久 | 欧美成年黄网站色视频 | 日韩国产在线观看 | 日韩一区二区三区在线 | 免费黄色片一区二区 | 一级黄片毛片 | 2019中文字幕在线观看 | 国产午夜久久 | 欧美一级片aaa | 91电影院 | 国产一区二区视频在线观看 | 欧美第一视频 | 狠狠躁夜夜躁人人爽天天高潮 | yiren22综合网成人 | 亚洲国产成人av | 国产成人久久 | 日韩欧美视频一区二区三区 | 欧美日韩国产一区二区三区不卡 | 精品久久国产 | 欧美精品区| 国产丝袜一区 | 日本电影网址 | 欧美一区在线看 | 国产日韩精品在线 | 日韩免费视频 | 欧美激情在线精品一区二区三区 | 欧美一级特黄aaaaaaa色戒 | 伊人免费在线观看高清版 | 亚洲欧美电影 | 中文字幕一区二区三区日韩精品 | 亚洲成人看片 | 亚洲精品一区二区网址 | 欧美日韩精品久久久 | 久草青青 | 99国产视频| 精品久久一区二区三区 | 麻豆久久久9性大片 | 日本成片视频 | 午夜专区| 永久黄网站色视频免费 | 日韩精品亚洲专区在线观看 | 少妇精品久久久久久久久久 | 精品无码久久久久久国产 | 九九热九九 | 久久国产欧美日韩精品 | 精品久久久久久久久久久久 | 久久久久国产精品免费免费搜索 | 国产性猛交xxxx免费看久久 | 国产a级毛片 | 日韩在线播放一区 | 国产探花在线精品一区二区 | 免费观看国产视频在线 | 一级片日韩 | 国产一区二区视频在线观看 | 国产精品视频不卡 | 麻豆产精国品免费入口 | 在线中文字幕视频 | 在线看免费黄色片 | 日韩精品小视频 | 国产不卡免费视频 | 日日夜夜精品免费视频 | 精品国产乱码久久久久久1区二区 | 日韩欧美中文在线 | 91免费在线 | 久久综合九九 | 精品无人乱码区1区2区3区 | 亚洲精品一区二区三区精华液 | 国产高清在线精品一区二区三区 | 高清精品一区二区 | 欧美视频精品 | 久久精品国产视频 | 色8久久 | 国产在线一区二区三区 | 国产美女一区二区 | 国产美女一区二区 | 美女一级a毛片免费观看97 | 久久久免费精品 | 97成人在线 | 天天影视网色香欲综合网无拦截 | 免费在线一区二区 | 国产精品视频免费播放 | 亚洲视频免费在线 | 91免费观看国产 | 午夜视频网 | 亚洲精品www久久久久久广东 | 天堂在线视频 | 亚洲第一黄色 | 青青草国产 | 91黄在线观看 | 久久九九精品视频 | 亚洲欧洲精品一区二区三区 | 成人黄色片在线观看 | 欧美日韩一级在线观看 | 欧美性猛交一区二区三区精品 | 日韩国产精品视频 | 国产色 | 第一色网站 | 影音先锋成人资源网 | 婷婷在线视频 | 久久99精品久久久久久琪琪 | 日本高清中文字幕 | 日日夜夜摸 | 99综合| 久久香蕉国产 | 精品亚洲一区二区三区四区五区 | 四色成人av永久网址 | 91精品国产91综合久久蜜臀 | 国产91亚洲 | 2019天天干夜夜操 | 最新国产精品精品视频 | 91视频免费播放 | 亚洲视频一区 | 国产在线视频网站 | 国产高清av在线一区二区三区 | 国产精品一区二区不卡 | 欧美日韩视频一区二区 | 97色婷婷成人综合在线观看 | 久久99精品久久久久婷婷暖91 | 国产精品99久久免费观看 | 91精品国产综合久久香蕉922 | 国产在线一区二区 | 免费av电影观看 | 国产欧美精品区一区二区三区 | 欧洲美女7788成人免费视频 | 亚洲欧美精品久久 | 日本亚洲最大的色成网站www | 日韩三级av在线 | 亚洲高清视频在线观看 | 精品免费久久久久 | 999国内精品永久免费视频 | www伊人 | 三级av网站|