1. 圣石小子粤语,别样幸福全集,箭在弦上大结局,我想打死你,星光灿烂猪八戒,菲律宾美人鱼50集国语,神探夏洛克 第四季,市委书记晚上不打招呼调研被拦

      Spring+MyBatis數據讀寫分離的實例詳解

      時間:2025-11-18 10:01:35 java語言

      Spring+MyBatis數據讀寫分離的實例詳解

        本文介紹了Spring Boot + MyBatis讀寫分離,有需要了解Spring+MyBatis讀寫分離的朋友可參考。想了解更多相關信息請持續關注我們應屆畢業生考試網!

        其最終實現功能:

        1.默認更新操作都使用寫數據源

        2.讀操作都使用slave數據源

        3.特殊設置:可以指定要使用的數據源類型及名稱(如果有名稱,則會根據名稱使用相應的數據源)

        其實現原理如下:

        1.通過Spring AOP對dao層接口進行攔截,并對需要指定數據源的接口在ThradLocal中設置其數據源類型及名稱

        2.通過MyBatsi的插件,對根據更新或者查詢操作在ThreadLocal中設置數據源(dao層沒有指定的情況下)

        3.繼承AbstractRoutingDataSource類。

        在此直接寫死使用HikariCP作為數據源

        其實現步驟如下:

        1.定義其數據源配置文件并進行解析為數據源

        2.定義AbstractRoutingDataSource類及其它注解

        3.定義Aop攔截

        4.定義MyBatis插件

        5.整合在一起

        1.配置及解析類

        其配置參數直接使用HikariCP的配置,其具體參數可以參考HikariCP。

        在此使用yaml格式,名稱為datasource.yaml,內容如下:

        dds:

        write:

        jdbcUrl: jdbc:mysql:/pic/order

        password: liu123

        username: root

        maxPoolSize: 10

        minIdle: 3

        poolName: master

        read:

        - jdbcUrl: jdbc:mysql:/pic/test

        password: liu123

        username: root

        maxPoolSize: 10

        minIdle: 3

        poolName: slave1

        - jdbcUrl: jdbc:mysql:/pic/test2

        password: liu123

        username: root

        maxPoolSize: 10

        minIdle: 3

        poolName: slave2

        定義該配置所對應的Bean,名稱為DBConfig,內容如下:

        @Component

        @ConfigurationProperties(locations = "classpath:datasource.yaml", prefix = "dds")

        public class DBConfig {

        private List<HikariConfig> read;

        private HikariConfig write;

        public List<HikariConfig> getRead() {

        return read;

        }

        public void setRead(List<HikariConfig> read) {

        this.read = read;

        }

        public HikariConfig getWrite() {

        return write;

        }

        public void setWrite(HikariConfig write) {

        this.write = write;

        }

        }

        把配置轉換為DataSource的工具類,名稱:DataSourceUtil,內容如下:

        import com.zaxxer.hikari.HikariConfig;

        import com.zaxxer.hikari.HikariDataSource;

        import javax.sql.DataSource;

        import java.util.ArrayList;

        import java.util.List;

        public class DataSourceUtil {

        public static DataSource getDataSource(HikariConfig config) {

        return new HikariDataSource(config);

        }

        public static List<DataSource> getDataSource(List<HikariConfig> configs) {

        List<DataSource> result = null;

        if (configs != null && configs.size() > 0) {

        result = new ArrayList<>(configs.size());

        for (HikariConfig config : configs) {

        result.add(getDataSource(config));

        }

        } else {

        result = new ArrayList<>(0);

        }

        return result;

        }

        }

        2.注解及動態數據源

        定義注解@DataSource,其用于需要對個別方法指定其要使用的數據源(如某個讀操作需要在master上執行,但另一讀方法b需要在讀數據源的具體一臺上面執行)

        @Retention(RetentionPolicy.RUNTIME)

        @Target(ElementType.METHOD)

        public @interface DataSource {

        /**

        * 類型,代表是使用讀還是寫

        * @return

        */

        DataSourceType type() default DataSourceType.WRITE;

        /**

        * 指定要使用的DataSource的名稱

        * @return

        */

        String name() default "";

        }

        定義數據源類型,分為兩種:READ,WRITE,內容如下:

        public enum DataSourceType {

        READ, WRITE;

        }

        定義保存這此共享信息的類DynamicDataSourceHolder,在其中定義了兩個ThreadLocal和一個map,holder用于保存當前線程的數據源類型(讀或者寫),pool用于保存數據源名稱(如果指定),其內容如下:

        import java.util.Map;

        import java.util.concurrent.ConcurrentHashMap;

        public class DynamicDataSourceHolder {

        private static final Map<String, DataSourceType> cache = new ConcurrentHashMap<>();

        private static final ThreadLocal<DataSourceType> holder = new ThreadLocal<>();

        private static final ThreadLocal<String> pool = new ThreadLocal<>();

        public static void putToCache(String key, DataSourceType dataSourceType) {

        cache.put(key,dataSourceType);

        }

        public static DataSourceType getFromCach(String key) {

        return cache.get(key);

        }

        public static void putDataSource(DataSourceType dataSourceType) {

        holder.set(dataSourceType);

        }

        public static DataSourceType getDataSource() {

        return holder.get();

        }

        public static void putPoolName(String name) {

        if (name != null && name.length() > 0) {

        pool.set(name);

        }

        }

        public static String getPoolName() {

        return pool.get();

        }

        public static void clearDataSource() {

        holder.remove();

        pool.remove();

        }

        }

        動態數據源類為DynamicDataSoruce,其繼承自AbstractRoutingDataSource,可以根據返回的key切換到相應的數據源,其內容如下:

        import com.zaxxer.hikari.HikariDataSource;

        import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

        import javax.sql.DataSource;

        import java.util.HashMap;

        import java.util.List;

        import java.util.Map;

        import java.util.concurrent.ConcurrentHashMap;

        import java.util.concurrent.ThreadLocalRandom;

        public class DynamicDataSource extends AbstractRoutingDataSource {

        private DataSource writeDataSource;

        private List<DataSource> readDataSource;

        private int readDataSourceSize;

        private Map<String, String> dataSourceMapping = new ConcurrentHashMap<>();

        @Override

        public void afterPropertiesSet() {

        if (this.writeDataSource == null) {

        throw new IllegalArgumentException("Property 'writeDataSource' is required");

        }

        setDefaultTargetDataSource(writeDataSource);

        Map<Object, Object> targetDataSource = new HashMap<>();

        targetDataSource.put(DataSourceType.WRITE.name(), writeDataSource);

        String poolName = ((HikariDataSource)writeDataSource).getPoolName();

        if (poolName != null && poolName.length() > 0) {

        dataSourceMapping.put(poolName,DataSourceType.WRITE.name());

        }

        if (this.readDataSource == null) {

        readDataSourceSize = 0;

        } else {

        for (int i = 0; i < readDataSource.size(); i++) {

        targetDataSource.put(DataSourceType.READ.name() + i, readDataSource.get(i));

        poolName = ((HikariDataSource)readDataSource.get(i)).getPoolName();

        if (poolName != null && poolName.length() > 0) {

        dataSourceMapping.put(poolName,DataSourceType.READ.name() + i);

        }

        }

        readDataSourceSize = readDataSource.size();

        }

        setTargetDataSources(targetDataSource);

        super.afterPropertiesSet();

        }

        @Override

        protected Object determineCurrentLookupKey() {

        DataSourceType dataSourceType = DynamicDataSourceHolder.getDataSource();

        String dataSourceName = null;

        if (dataSourceType == null ||dataSourceType == DataSourceType.WRITE || readDataSourceSize == 0) {

        dataSourceName = DataSourceType.WRITE.name();

        } else {

        String poolName = DynamicDataSourceHolder.getPoolName();

        if (poolName == null) {

        int idx = ThreadLocalRandom.current().nextInt(0, readDataSourceSize);

        dataSourceName = DataSourceType.READ.name() + idx;

        } else {

        dataSourceName = dataSourceMapping.get(poolName);

        }

        }

        DynamicDataSourceHolder.clearDataSource();

        return dataSourceName;

        }

        public void setWriteDataSource(DataSource writeDataSource) {

        this.writeDataSource = writeDataSource;

        }

        public void setReadDataSource(List<DataSource> readDataSource) {

        this.readDataSource = readDataSource;

        }

        }

        3.AOP攔截

        如果在相應的dao層做了自定義配置(指定數據源),則在些處理。解析相應方法上的@DataSource注解,如果存在,并把相應的信息保存至上面的DynamicDataSourceHolder中。在此對com.hfjy.service.order.dao包進行做攔截。內容如下:

        import com.hfjy.service.order.anno.DataSource;

        import com.hfjy.service.order.wr.DynamicDataSourceHolder;

        import org.aspectj.lang.JoinPoint;

        import org.aspectj.lang.annotation.After;

        import org.aspectj.lang.annotation.Aspect;

        import org.aspectj.lang.annotation.Before;

        import org.aspectj.lang.annotation.Pointcut;

        import org.aspectj.lang.reflect.MethodSignature;

        import org.springframework.stereotype.Component;

        import java.lang.reflect.Method;

        /**

        * 使用AOP攔截,對需要特殊方法可以指定要使用的數據源名稱(對應為連接池名稱)

        */

        @Aspect

        @Component

        public class DynamicDataSourceAspect {

        @Pointcut("execution(public * com.hfjy.service.order.dao.*.*(*))")

        public void dynamic(){}

        @Before(value = "dynamic()")

        public void beforeOpt(JoinPoint point) {

        Object target = point.getTarget();

        String methodName = point.getSignature().getName();

        Class<?>[] clazz = target.getClass().getInterfaces();

        Class<?>[] parameterType = ((MethodSignature)point.getSignature()).getMethod().getParameterTypes();

        try {

        Method method = clazz[0].getMethod(methodName,parameterType);

        if (method != null && method.isAnnotationPresent(DataSource.class)) {

        DataSource datasource = method.getAnnotation(DataSource.class);

        DynamicDataSourceHolder.putDataSource(datasource.type());

        String poolName = datasource.name();

        DynamicDataSourceHolder.putPoolName(poolName);

        DynamicDataSourceHolder.putToCache(clazz[0].getName() + "." + methodName, datasource.type());

        }

        } catch (Exception e) {

        e.printStackTrace();

        }

        }

        @After(value = "dynamic()")

        public void afterOpt(JoinPoint point) {

        DynamicDataSourceHolder.clearDataSource();

        }

        }

        4.MyBatis插件

        如果在dao層沒有指定相應的要使用的數據源,則在此進行攔截,根據是更新還是查詢設置數據源的類型,內容如下:

        import org.apache.ibatis.executor.Executor;

        import org.apache.ibatis.mapping.MappedStatement;

        import org.apache.ibatis.mapping.SqlCommandType;

        import org.apache.ibatis.plugin.*;

        import org.apache.ibatis.session.ResultHandler;

        import org.apache.ibatis.session.RowBounds;

        import java.util.Properties;

        @Intercepts({

        @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}),

        @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class,

        RowBounds.class, ResultHandler.class})

        })

        public class DynamicDataSourcePlugin implements Interceptor {

        @Override

        public Object intercept(Invocation invocation) throws Throwable {

        MappedStatement ms = (MappedStatement)invocation.getArgs()[0];

        DataSourceType dataSourceType = null;

        if ((dataSourceType = DynamicDataSourceHolder.getFromCach(ms.getId())) == null) {

        if (ms.getSqlCommandType().equals(SqlCommandType.SELECT)) {

        dataSourceType = DataSourceType.READ;

        } else {

        dataSourceType = DataSourceType.WRITE;

        }

        DynamicDataSourceHolder.putToCache(ms.getId(), dataSourceType);

        }

        DynamicDataSourceHolder.putDataSource(dataSourceType);

        return invocation.proceed();

        }

        @Override

        public Object plugin(Object target) {

        if (target instanceof Executor) {

        return Plugin.wrap(target, this);

        } else {

        return target;

        }

        }

        @Override

        public void setProperties(Properties properties) {

        }

        }

        5.整合

        在里面定義MyBatis要使用的內容及DataSource,內容如下:

        import com.hfjy.service.order.wr.DBConfig;

        import com.hfjy.service.order.wr.DataSourceUtil;

        import com.hfjy.service.order.wr.DynamicDataSource;

        import org.apache.ibatis.session.SqlSessionFactory;

        import org.mybatis.spring.SqlSessionFactoryBean;

        import org.mybatis.spring.annotation.MapperScan;

        import org.springframework.beans.factory.annotation.Qualifier;

        import org.springframework.context.annotation.Bean;

        import org.springframework.context.annotation.Configuration;

        import org.springframework.core.io.ClassPathResource;

        import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

        import org.springframework.jdbc.datasource.DataSourceTransactionManager;

        import javax.annotation.Resource;

        import javax.sql.DataSource;

        @Configuration

        @MapperScan(value = "com.hfjy.service.order.dao", sqlSessionFactoryRef = "sqlSessionFactory")

        public class DataSourceConfig {

        @Resource

        private DBConfig dbConfig;

        @Bean(name = "dataSource")

        public DynamicDataSource dataSource() {

        DynamicDataSource dataSource = new DynamicDataSource();

        dataSource.setWriteDataSource(DataSourceUtil.getDataSource(dbConfig.getWrite()));

        dataSource.setReadDataSource(DataSourceUtil.getDataSource(dbConfig.getRead()));

        return dataSource;

        }

        @Bean(name = "transactionManager")

        public DataSourceTransactionManager dataSourceTransactionManager(@Qualifier("dataSource") DataSource dataSource) {

        return new DataSourceTransactionManager(dataSource);

        }

        @Bean(name = "sqlSessionFactory")

        public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource") DataSource dataSource) throws Exception {

        SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();

        sessionFactoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));

        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()

        .getResources("classpath*:mapper/*.xml"));

        sessionFactoryBean.setDataSource(dataSource);

        return sessionFactoryBean.getObject();

        }

        }

        如果不清楚,可以查看github上源碼orderdemo


      【Spring+MyBatis數據讀寫分離的實例詳解】相關文章:

      C語言以數據塊的形式讀寫文件實例代碼01-18

      如何實現yii2 數據庫讀寫分離配置01-07

      Java內部類詳解及實例分析12-15

      php數據類型詳解12-03

      C++類中的繼承實例詳解01-25

      C++冒泡排序算法實例詳解10-13

      php多個文件及圖片上傳實例詳解01-23

      C語言循環隊列的表示與實例詳解09-24

      詳解C語言格式化讀寫文件12-12

      主站蜘蛛池模板: 七龙珠z剧场版| 电视剧无盐女| 试爱房奴《高潮》4| 《酒店V》第一季在线观看| 《若你安好便是晴天》电视剧| 酒店实行生免费完整版| 我独自升级第一季在线观看| 托克逊县| 今夕何夕电视剧免费观看完整版| 春风燃情电视剧免费观看全集| 幸存者1937电影免费播放| 铿铿锵锵锵免费观看在线观看| 闪婚顶流全集免费| 很想很想你电视剧免费 | 《美容院的特殊待遇》3| 月鳞绮纪全集免费播放电视剧最新| 花园的密秘电影在线观看| 动漫《落魄贵族琉璃川》在线观看| 终极三国2017| 百年孤独 电影| 沉香如屑免费观看完整版电视剧| 法国空乘4在线看观看| 欢乐颂5在线观看完整免费版| 海绵宝宝第十一季| 浮生影视在线观看免费高清| 三个一起我是怎么C你的| 德川幕府三部曲水月篇免费观看| 千山暮雪在线观看完整版免费| 第九禁区| 柳熙烈的写生簿权志龙| 迪迦奥特曼第52集| 生殖按摩2未删减在线观看| 和部长一起去出差旅免费观看完整版 | 电竞冠军:少女带队全集免费| 泰剧爱有天意| 俘虏之锁电影免费观看高清版| 年经母年3| 禁忌2年转一代禁忌| 入室暴行魔免费观看| 百变大咖秀20120802| 少年钦差| 与老公上司偷情免费看| (牙医姐妹)电影赤子板栗| 黑白配高清在线观看免费版全集| 巨胸护士风间由美播放| 黑夜中的她短剧免费观看| 证言未删减| 三年大片全免费国语版观看| 味道食在乡| 少女爱上姐姐明亮的三颗星| 老师去学生家家访的电影| kaera uehara| 总统之夜在线观看| 插曲的痛30集全免费帅哥| 步步高音乐手机| 明日如歌 电视剧| 年轻母亲1在线观看完| 他其实没那么喜欢你在线观看| 军事行动布兰迪啄木鸟| 百万新娘爱无悔| 韩国售楼小姐电影免费观看高清版 | 海天雄鹰免费观看| 战场上女兵被奸在线观看| 体感预报日剧免费观看| 失忆的劳拉电影| 都市欺诈| 公浮手中字22| 旋风管家国语版| 和讨厌的部长一起去出差的女主是谁| 郝板栗七部曲免费观看 | 《丛林激情》男女主 | 间宫夕贵| 红高粱电视剧下载| 青青河边整版高清国语 | 终局美剧| 哇嘎电影免费播放网站大全| 保罗一家1一4| 离婚协议电视剧35集| 鸭王2迅雷下载| 刀客家族的女人44集全集免费观看| 卸岭秘录电影完整版免费观看| 致命24小时| 天美传奇在线观看免费播放| 地久天长电影剧情详细介绍 | 老酒馆电视剧在线观看免费全集| 私人女性监狱-言情片-高清完整版-全集免费在线观看-tvb云播 | 侦探语录免费观看完整版| 需要爸爸的种子电影在线观看| 双肥临门| 漂亮的母亲8中字开头6个字| 电视剧亦舞之城免费| 平凡的浮生| 电锯人动画全集免费观看| 恶魔高校d d| 优势合作迅雷下载| 朱易说想当花滑教练| 克莱尔的迷宫在线| 韩国朋友的妈妈在线观看| 需要爸爸播种子2电影| 奇葩一家亲剧情介绍| 速度与激情9在线观看完整版免费| 成全免费观看高清电影大侦探| 侠盗高飞免费| 韩剧流星花园| 我的姐姐是电影免费观看全集| 婚姻保卫战6| 雪中悍刀行第二季免费观看超清| 武契奇收到死亡威胁| xl司令第一季无马赛第34集 | 公的浮之手无字| 神犬小七第三季免费观看完整版| 我的后半生免费观看全集| 《浴血黑帮:不朽传奇》| 女超人法国版高清无删减| 陆贞传奇全集观看| 江苏艾滋病| 海南琼剧| 激情福利社| 《法国空姐2020法版》中文版 | 中国机长电影免费观看| 星克莱尔《总统》在线| 回复术士的重来人生在线观看| 《天字号女子监狱》| 女子寄快递丢失4800元手镯| 自由影视| 《隔山有眼3:起源》2025| 最新凤凰军事观察室| 我的女总裁上司短剧观看全集| 《束缚游戏》第一季1-12集免费观看 | 甜性涩爱qvod| 营山县| 蜡笔小新全集播放| 龙骑假面骑士电影| 中国梦我的梦网络视听年度盛典| 王牌逗王牌电影| 斗破苍穹年番177集完整版| 千金小姐赤子板栗| 勐垅沙免费| 《志愿军:浴血和平》| 哇嘎全集免费播放在线观看| 地震警报响起 男生抱同桌撤离| 叶问电视剧粤语| 马克龙访问印度受到豪华接待| 女员工的付出中字5| 捉妖记bt| 公公的浮之手电| 余味毛豆豆| 《姨母的诱惑》| TOTAKKA HAYA KIRGUZUX| 狂野时速| 加勒比女海盗1在线观看| 高清《朱音落语》电视剧| 动感之星小玲256集免费| 绿皮书免费| 弹丸论破13| 美容院特殊服务4HD中文| 谍影重重1电影| 因父去世休假被辞| 韩国理论电影| 勿谓言之不预也中国用了几次| 永生第四季海噬仙灵免费观看| 苹果电影免费完整版在线观看影片| 婚外初夜 完整版| 私人航空免费在线播放| 富婆三姐妹免费播放电视剧| 坎贝奇成人电影| 开心遇鬼| 亲爱的热爱的全集免费版电视剧 | 梦在海这边| 爱幻蝶-娘王之路| 神印王座免费完整观看| 越南《性的暴行》电影| 庆余年第二部日韩剧| 高清炽热吸引未删减| 人间正道是沧桑全集下载| 闪亮的西瓜电视剧免费观看| 一起愁愁愁免费观看完整版电视剧HD| 最新凤凰军事观察室| 法国空姐2024满天星法版:星辉照耀下的职业光芒 | 缉私群英电视剧国语版在线观看| 特邀送货员4| 鹿鼎记胡歌版| 天涯浴血 电视剧| 生肉动漫免费观看| 金瓶梅在线观看全集高清徐少强| 法国空乘法版免费看| 私人女子监狱| 与部长出差旅行日本电影叫什么| 青谷子电视剧免费全集观看| 青平梅电影| 楚汉传奇80集免费观看完整版高清| 在天亮前离开 周程成| 安娜2019 电影| 霍比特人2下载| 美版武则天最惊艳的版本| 求安慰少年电视剧| 毕节市| 全球禁播的电影| 妖精的尾巴15| 97播放| 《寒武纪》| 京香| 天星之爱泰剧免费观看全集| 亲爱的姑娘我爱你dj| 女律师的堕落2理伦片| 青梅竹马是消防员无删1| 《黑暗森林》满天星| 电视剧几度夕阳红| 罪恶部队| 《需要爸爸播种子》电影免费在线观看,高清完整版美国倫理片_屠夫电影网 | 女员工的5付出中字| 新僵尸先生2| 极速保镖| xl司令第二季全集免费观看动漫| 弹珠汽水猴子全集观看| 坐公交车失去了第一次| 乡村爱情17在线观看免费版| 恋爱禁区动漫| 钢琴之森下载| 《嘎啦》台湾电影在线观看免费 | 乐高大电影2| 意大利八尺夫人1982| 我的女友的妈妈| 步步追魂完整版| 妻子的谎言大结局| 《相逢时节》| 《特殊游泳教练| 电影欲望之花| 我的女友是机器人在线| 成人色情电影喜爱夜| 爱情睡醒了21| 销售的销售秘密3免费观看高清版 《屠宰呕吐娃娃》免费观看 | 狂野时速| 贝坎奇品味人生| 金瓶梅 高清完整版 bt| 《需要爸爸播种美国》英文版| 林中小屋2| 白日梦我免费观看电视剧| 斗罗大陆103集免费观看| 余罪第一季免费观看全集| 似火流年电视剧| 伦理《法国空乘13》| 租借女友动漫| 美国伦理蜜桃4| 一一影视| 女子护卫队在线播放| 男子瘫痪儿子将其饿死| 北上电视剧13| 入室强奸初中生免费观看| 肥城市| 1980版《小女孩们》| 借钱专家| 兄弟换麦6| 打工人电影免费观看中文版| 小蜜桃4| 我一边做饭一边被躁了男男| 保罗和雪莉一家第一部| 3d肉蒲团高清在线| 欲魔电影完整版在线观看免费| 爸爸的种子高清免费版电视剧混乱公交车 | 十六岁1974美国原版| 刀客家族的女人44集全集免费观看| 《妻子偿还债务》动漫| 向风而行电视剧免费播放19集| 需要爸爸播种子2美国电影1976女主角演员是谁? | 智酱是女生| 西游记之诸神之战免费观看国语 | 少狼 第四季| 法网狙击粤语17| 被夫上司強暴人妻中文字幕| 姑娘爱情郎铃声| 凌云壮志(欧美)成人版| 天龙高清远古电视剧在线观看| 修理工的培训在线| 张响神枪电视剧全集| 进击的巨人在线看观看| 活佛济公3迅雷下载| 妈妈的职业5完整版结局在线看免费高清 | 真情玫瑰 电视剧| 高压监狱在线观看完整免费高清满天星在线| 电影偶遇| 四戒 高清完整版| 爸爸去哪儿20131122| 空姐郭玮| yellow高清视频免费观看野战| 无限的未知| 女儿的朋友视频| 美容院特殊待遇电视剧| 光头强的妈妈是谁| 《部长夫人的美貌》电影在线观看| 《奉陪到底》电视剧| 爱情男女电影免费观看| 天乩之白蛇传说电视剧全集免费 | 情欲电车2伦理| 《保罗1980》完整版| 花容月貌电影免费| 隔壁邻居很美味电视剧在线观看免费高清 | 《激战丛林》在线播放免费观看| 汤方大胆人体艺术| 直到你降临短剧免费观看| 安吉拉·怀特 透视| 三大队电视剧在线观看| 常熟市| 自由的她们纪录片免费观看| 春节的拼音| 买房子的女销售| 日本海鲜滞销堆积成山| 雏妓在线观看完整版| 《巨乳按摩》91传媒| 白蛇传说之法海| 《登山的目的2》中文| 水润女人刘志贤免费| 咱们裸熊第一季| 插曲的痛30集全集观看免费| 谢思埸3米跳板夺冠| 镜双城电视剧在线观看网站| 品味人生电影在线观看免费| 葛优版两只老虎免费看| 鬼灭之刃免费看| 电影《香醇的绣感》在线观看| 将军家的小娘子电视剧免费观看| 傲慢与偏见2005| 电影 私人航空在线看| 泰剧临时天堂| 战狼6欧式少女全部视频| 无人区高清在线观看完整版| 丞相夫人是首富| 酒店1-80集全集免费播放| 宇宙天魔| 进击的巨人大结局| 特激外卖员| 直播:女子10米跳台决赛| 色即是空在线| 黑白配免费版| 娇妻互换我的漂亮娇妻6| 妻子抵债| 恶之华在线观看| 美国版4娃娃脸| 青春沈庆吉他谱| 人完美体型的油画| 我爱你中国简谱| 黄色哇嘎免费看| 鬼灭之刃柱训篇| 姜子牙在线观看| 唐老鸭和米老鼠全集| 牙医姐妹1986日语版免费| 狼和狗的时间| 年轻的嫂嫂2| 金瓶梅2008在线观看| 《利刃出鞘3》| 陪部长一起去出差电影叫什么名字| 樱桃小丸子来自意大利的少年| 八仙饭店2高清免费播放 | 啄木鸟:《壮志凌云》| 在下李佑| 维修工艳遇| 鬼畜女子监狱| 楼上楼下1V2| 贝蕾魔法| 《夫人的嘴唇》| 精英律师电视剧在线观看| 诱惑维修工| 青春环游记5季免费播放| cekc每1| 性情中人中文网bt| 电影《香醇的绣感》在线观看| 滚石30年台北演唱会| 安吉拉怀特在线观看免费版英语单词| avno1| 女子在洱海裸泳 警方介入| 坎贝奇无憾完整版| 嫡女宅斗:全精通短剧全集| 黑白配免费视频在线观看| 非亲父子| 隋唐演义多少集| 甜蜜惩罚之我是看守所专用宠物| 梦幻西游服战直播| 男女在一起愁愁愁免费观看全集 | 超神学院第三季| 人民的名义dvd版| 《入室暴行3| 全金属外壳电影| 黑帮枪战| 姐妹牙医在线电影| 仿生人在线观看| 越策越开心2013| 儿子的老师4| 法证先锋1粤语| 高压锅皮冻| 韩国电影修理工的外遇| 最新韩国电视| 白嫖者联盟在线观看免费| 王子变青蛙第二部01| 学生的妈妈4在观完整有限中字| 日本版新战狼6观看| 姨妈2完整版免费观看| 高清《寒蝉鸣泣之时》动漫| 双女任务电影高清完整版| 爷傲奈短剧全集免费播放| 巜商务旅行戴绿色帽的电影 | 捡漏小能手:古玩街我称王短剧全集| 为爱远嫁终成空短剧免费观看全集| 电影《需要爸爸播种》演员表介绍| 电视剧 大秦帝国| 四个女忍者 满天星 雪姬| 《新生》更新| 新媳妇的美好时代| 丰乳按摩电影免费观看| 被夫上司持续入侵大桥未久| 《爱我几何》原版| 窃听风云2 粤语| 剑来动漫免费看| 特别酒店美国1983| 陈楚生原来的我| 警方证实33岁女子在出租屋离世| 《爱我几何》在线观看免费| 泰安市英雄山中学| 私人航空在线播放| 致命速递2| 第一滴血8| 电影金瓶梅电视剧免费观看全集| 天使之恋在线观看| 鉴宝狂少:捡漏我是专业的短剧全集| 刀郎田震唱哭全场| 闽清县| 继母17岁| 无上魔尊短剧免费播放| 青涩体现意大利| 和讨厌的前男友一起出差电影 | 中国新说唱2019| 星辰变第五季免费观看完整版| 三级片维修工的艳遇| 电视剧蔷薇风暴免费观看全集高清| 变形金刚7免费完整版在线观看 | 打回原址电影| 黑白配HD1080完整版中文版| 哪吒1魔童降临| 锵锵锵锵免费观看完整版| 爱你的基蒂 第三季未删减| 无限复活国语高清| 笔仙惊魂| 女人电影| 大秦赋全集在线观看免费| 人猿泰山hr版的女主演| 缘份的天空| 桃花在线观看免费高清电视剧98| 少妇的诱惑电影观看| 暴躁老妈国语免费看第三季 | 《美丽妻子替弟还债》电影完整版在| 周末情人别爱我| 电视剧封神英雄榜| 白峰美羽无码电影观看| 法国版《安全出口》| 《牙医姐妹》1986版在线观看| 冲上云霄2大结局是什么| 韩国理论片中文线播放最新| 电影《命定之人》完整版| 庆余年下载| 就算是哥哥有爱就没问题了对吧动漫| 恶搞新还珠格格| 等待这一天电视剧| 无尽情爱 电视剧| 一路向西完整版在线播放| 向涟苍骑士献上纯洁 | 甜蜜专宠我是狱长第二季免费观看| 蜡笔小新国语全集高清优酷| 《法国空乘5:满天星》| 在线观看黑狐| 同志寓言电影| 特殊游泳教练 免费| 南洋十大邪术 全集| 雪在烧电视剧| 女员工的付出中字太开心 | 甄嬛传36集| 法版《执行秘书》在线观看 | 韩国电影我的游泳教练 | 《淋漓尽致3》| 丹东市| 已婚妇女的下午电影中文| 速度与激情5完整版| 情谜睡美人之欲望的姐妹 | 小小影视app官网| 电视剧反串| 百度变形金刚| 保姆的特别待遇2电影| 铠:武士僵尸| 《美丽的侯丽》| 铁血尖刀| 今夜无人入眠免费观看| 雪中悍刀行第三季免费播放| 山河令电视剧全集在线观看完整版 | 阹贞传奇| 战狼6欧美版免费观看完整版| 王楚钦和张本智和决赛视频 | 战狼7下载高清完整版| 桃色天使终极猎杀| G点| 且听凤鸣短剧免费观看全集| 白峰美羽《美人教师》电影| 合租屋交换做爰| 村上沙兽皇电影免费观看高清版下载 | 网球王子电视剧| 四位少妇精油按摩| 《外出》郑书允| 电影法国女仆免费观看全集| 电视剧《心跳》| 十一人的贼军免费观看高清| 我义姐是不是良义母电影名字| 爱的二八定律免费全集| 井陉县| 西安都市快报直播| 每逢国庆思佳婿短剧免费观看| 她的私生活| 让爱回来电视剧 全集| 牧教师4污染教坛全集免费看| 外出在线观看免费完整版高清电影| 再爱一次| 维修工艳遇在线观看| 牛仔裤的夏天2| 《邻家姐姐》免费观看电视剧中字 | 跑男第九季| 《高压监狱2》HD无删减| 心之全蚀| 名侦探洪吉童| 在线观看365第二部| 幻影现実| 《裙子下有野兽》| 幸福密码电视剧| 江苏两名男子在公园落水身亡| 莫妮卡《爱我几何》电影免费未删减 | 女超人满天星版麦乐迪在线观看完整| 妖怪都市阴阳师完整版在线观看| 私人航空电影法国在线观看| 日本地震现场:房屋倒塌地表裂缝| 善良的嫂子41| 塔日酒店电影完整版在线观看 | 鬼水怪谈| 斗罗大陆免费观看完整版高清在线| 性表演俱乐部〈2〉| 误入军统的女人全集在线观看| 乞丐大结局全集观看| 俘虏之锁| 郭晶晶霍启刚离婚| 妈妈的职业2完整版结局在线看中字 | 超时空恋爱| 尤里西斯的生命之旅| 麦乐迪 在线| 我喜欢的样子你都有短剧免费观看| 电视剧《人世间》| 上司趁丈夫不在家来拜| 美食天王| 欢乐老弄堂| 《激战丛林》电影观看| 老师破女学生处特级毛OOO片| 恩爱两不疑全集免费观看完整版| 铿锵锵锵锵锵锵锵免费观看| 劳荣枝小木匠| 亲爱的孩子们电视剧免费观看| 麦乐迪版女超人| 林志炫翻唱| 小乌酱黑白双丝脚足在线播放| 搞笑版小猪佩奇| 超异能族韩剧| 金银悔1-5HD国语全集免费 | 浪漫女教师黛比无删减版| 即使是圣洁的修女也无法净化| 不是我不爱你歌词| 需要爸爸播种籽2演员名字 | 勇探实录国语| 《玉女心经3之阴阳和合》免费舒淇| 前任四再见前任在线观看免费| 姑娘9荷尔蒙美国版| 《法国空姐三部曲》| 甜蜜惩罚全集免费观看| 婚姻保卫战电视剧1| 女佣机器人vs男招待机器人军团| 孔繁森电影| 高清《欧布奥特曼》在线观看| 《法国空乘》在线观看免费| 3对1初次体检4在线观看| 创:战神| 《冢本战争》在线观看| 杨光的爱情故事2| 母亲吃中药母乳喂养婴儿核酸转阴| 巨轮粤语| 弹丸论破op| 《疯狂小女生》法国版精彩片段 | 索多玛120天迅雷下载| 守龙者电影| 时光正好在线观看| 学战都市asterisk第二季| 一念永恒187| 公之浮手中22| 善良的嫂子完整| 人yu兽性jiao电影| 血仍未冷| 星辰变在线观看全集免费播放| 美国黑白配高清完整版电影| 初尝禁果| 美丽猎人在线观看| 战狼女版20免费播放| 年轻妻子剧情介绍| 武媚娘传奇未删版全集大结局| 没戴奶罩的妇女| 《甜蜜的惩罚》第二季完整版| 做aj的电视剧| 快乐时光电影完整版免费观看| 快乐星球第5部| 《炽热吸引》全集在线观看| 战狼9欧式少女全部视频| 高清《花琉璃轶闻》电视剧| 财阀家的小儿子 电视剧| 《xl司令》第一季| 《侏罗纪世界:重生》| 新白发魔女传全集| 轮到你了第9集| 战狼10女性版剧情| 特种兵之利刃出鞘免费完整版高清 | 一代枭雄43| 要爸爸的种子bd| 日日艹夜夜艹| 倩女幽魂电影在线观看免费完整版| 3d豪情字幕下载| 卖百科全书的女人电影免费观看高清 | 盗墓笔记谜海归巢| 破晓之爱剧情介绍| 《乳房》特殊按摩手机在线观看| 高清《希望的大地》电视剧| 十二罗汉电影| 桃色凶器| 《金牌销售的秘密1》免费全集| 至尊食王片尾曲| 年轻的阿姨5中字电影| 墨西哥《瓜达卢佩玫瑰》| 中国棉花事件| 在出差期间被讨厌上司欺负| 捕鱼大亨:海里宝藏全归我全集免费| jiZz日本| 神奇女侠在线观看| 再见美丽小姐国语版| 刺青之声| 双人调情按摩术电影免费观看| 刘倩楠微博| 电影弱点| 女超人2013| 同桌的你免费| 3D鉴宝电影在线观看| 美式忌讳1~2| 法国空姐2018不难空乘| 吴仁宝儿子| 丈夫让妻子陪上司吃饭| 《速度与激情9》免费| 高清东北警察故事3未删减| 维修工的艳遇在线观看完整版免费| 慈禧的秘密生活下载| 正在播放:最棒的小三沼泽 与不干涉工作和家庭、只有做爱理想关系的三上悠... | 寻秦记免费完整版全集在线观看| 棋王梁家辉| 黑白配1080p国语版| 纸钞屋第五季在线观看完整版| 穆棱市| 《我的漂亮朋友》电视剧| 惊天危机2完整免费| 爱情猎杀泰剧在线观看泰剧网免费| 克拉玛依市| 乞丐电视剧在线观看| 菲梦少女第三季| 犯了规短剧| 金蝉脱壳百度影音| 非常小特务3国语版 | 不雅视频完整版| 流量女王全集免费| 痞子英雄2:黎明升起| 曹阳 MOKO| 僵尸道长第一部| 鬼吹灯 黄皮子坟| 四位人妇精油按摩的功效电影 | 爱我几何无删减在线观看完整版中文| 欺诈游戏2| 终极蜘蛛侠动画片| 我们都是好孩子| 六国紧急开会向朝鲜施压| 山西科教频道| 被最想拥抱的男人威胁了动漫免费| 电视剧潜行狙击| 姐妹影院| 永远的第一名在线观看第二季| 爱的妇产科电视剧全集| 《XL司令》第一季免费观看| 床下有人3 电影| 《人体美食》完整版在线观看| 维修人员的培训 中字视频| 且听凤鸣短剧免费观看全集 | 墨雨云间番外篇免费观看| 美国惊悚片无人生还2012| 电影禁忌3大结局| 赛车总动员1 QVOD| 白燕升个人演唱会| 《饥渴的女人和维修工在线电影 | 年轻漂亮小在线观看| 斗罗大陆165集| 新西厢记电视剧| 光影电视剧| 越南版《女兵俘虏》完整版| 人造黄油是什么| 电影美乃雀主演替夫还债 | 需要爸爸播种子在线播放未删减| 新建文件夹2免费完整版| 猎狼特战队| 超级喜欢你| 奶茶影视| 珠海体育中心撞人事件| 水仙花开电影| 夺命狙击2电影| 《无憾》完整版免费观看| 秋蝉电视剧全集免费观看| 1942电影完整版| 幸福面条国语版全集| 微微一笑很倾城剧情介绍| 地菜煮鸡蛋有什么功效| 动画版江南style| 孟姜女哭长城电视剧全集免费| 猎狐电视剧免费观看完整版| 男媒婆全集在线观看| 秃顶半月不用洗发水长出头发| 长安二十四计在线观看| 河北梆子辕门斩子全集| 张震讲故事之合租屋 电影| 无彩限的怪灵世界| 亚洲激情文学| 年代秀20110909| 彩云之南舞蹈视频| 百色起义| 高清《我家那小子2026》| 丛林战争| 变节之潜罪犯| 深州市| 我的老师中韩双字ID| 钻石夜总会 变脸| 短剧合集金牌销售| 韩国电影2018最新r级| 断背山电影高清版免费观看| 联合早报电影高清完整版需要爸爸播种子| 国风按摩院1-5季电视剧免费观看| 追球在线观看| 《沧元图》58| 暗夜情报员| 麦乐迪女超人的屈辱无删减版| 游戏风云春晚| 大地8中文在线观看免费高清成全| 世界名犬排名| 白锋美羽被讨厌的公侵犯电影| 珠帘玉幕电视剧免费播放下载| 天机富春山居图在线观看| 林青霞白发魔女| 流浪汉电影| 次子(打一字)| 娃娃脸5| 枪火粤语| 艰难爱情全集免费观看| 繁华电视剧免费观看完整版高清| 美味快递员的特殊待遇| 贪婪:欲望之岛 电影| 情靡短剧全集免费观看完整版| 《甄嬛传》免费看| 纳粹慰安室2免费看国语版| 奥特曼大电影超银河| 天堂的张望 电影| 爱我几何未删减版在线观看| 无双国士| 爱情公寓25集| 千金女贼电视剧| 女主麦乐迪在线观看| 短剧葡萄成熟时| 架设教程| 筋疲力尽| 《酒店》1-90集免费观看| 少女木马责罚| 保罗雪莉禁忌1-4| 惊变快播| 神州侠侣全集| 铜铜铜锵锵锵电影免费在线观看| 名创优品指甲油致癌物超标 | 看视频免费网址| 七尺男儿| 纯真博物馆全集观看| 禁忌1| 绝密暗号电视剧在线观看免费版高清 | 高雄市| 免费看我要爸爸播种子| 听见天堂| 死亡包裹| 马龙女朋友| 隐身帽子| 法国超人麦乐迪在线观看| 四周恋人第二季| 重返猛鬼屋| 欧特曼大全| 女超人满天星在线观看| 需要爸爸的播种 在线观看 | 军训跳舞吊带| a篇在线观看| 空中堡垒| 一代名相陈廷敬演员表| 神箭电视剧全集| 朝国年经的继4免费观看时间| 《爱我几何》免费观看完整版下载| 高清《原谅我》在线观看| 广场舞九月九的酒| 日韩做Aj的视频免费观看| 神经侠侣粤语| 小猪佩奇的视频| 仙剑奇侠传3第14集| 《蛇王波后》完整版| 韩剧《拜托了妈妈》| 上书房电视剧| 满月之下请相爱免费观看全集| 妈妈辅导作业气到痉挛| 电影销魂玉| 奶油柠檬| 我的妹妹雯雯| 翡翠姐姐| 木下檀子的电影| 长沙电视台政法频道| 舒兰市| 《家庭矛盾/分歧4》麦乐迪欧美剧| 高清《巨型病毒》电影| 天使的3d动漫| 南美欧洲超级杯| 82板杨敏思版本1-5| 两个人高清在线观看免费下载 | 冷暖人生2013| 满天星八尺夫人在线观看免费播 | 电视剧黎明破晓前| 至尊马蒂| 郝板栗牙医无删减版在线观看电视剧 | 雾蓝色的雨后晴天未删减| 黔乡牧人| 壮志凌云1(法国)满天星不卡| 《璀璨人生》在线观看| 鬼吹灯之昆仑神宫电视剧免费观看| 韩剧《鬼宫》全集免费| 蔡徐坤收到奥特曼卡| 高清盐沼之下| 韩国r在线| 夫人大可不必电视剧免费观看| 超级魔术师克里斯| 天生一对泰剧在线播放| 我的大胸继母| 男按摩师做乳房按摩电影中文| 科目三舞蹈原版|