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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

SpringBoot集成MybatisPlus 涵盖了目前流行的知识点!!!即用即cv即可!!!学过的同学,也可以存储作为工具!!

發(fā)布時(shí)間:2025/3/19 77 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot集成MybatisPlus 涵盖了目前流行的知识点!!!即用即cv即可!!!学过的同学,也可以存储作为工具!! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

知識(shí)點(diǎn)涵蓋:代碼自動(dòng)生成、主鍵自增(雪花算法)、分頁、自動(dòng)填充字段、LocalDateTime 序列化配置、druid數(shù)據(jù)源配置、SQL監(jiān)控頁面、邏輯刪除、事務(wù)管理、多環(huán)境配置等等。

1、 可以無縫內(nèi)嵌進(jìn)項(xiàng)目,也可以保存下來,方便下次使用。

2、代碼中帶有很多注解,為方便對(duì)MybatisPlus了解不深的同學(xué),也能夠快速看懂。👨?💻or🛌

3、不行的話一步一步復(fù)制,也是可以運(yùn)行起來的,慢慢看更好。


地點(diǎn):湖南邵陽
作者:喜

SpringBoot集成MybatisPlus 涵蓋了目前流行的知識(shí)點(diǎn)!!

    • 一、前言
    • 二、基礎(chǔ)環(huán)境搭建
        • 2.1、數(shù)據(jù)庫環(huán)境搭建:
        • 2.2、maven導(dǎo)入依賴:
        • 2.3、yml配置文件
        • 2.4、mybatis-plus 逆向工程生成代碼
          • 2.4.1、初始化項(xiàng)目結(jié)構(gòu):
          • 2.4.2、mybatisplus逆向共程代碼
          • 2.4.3、啟動(dòng)與示例
          • 2.4.4、生成后的項(xiàng)目結(jié)構(gòu)
          • 2.4.5、生成代碼查看
    • 三、配置類講解
        • 3.1、MybatisPlusConfig
        • 3.2、自動(dòng)填充字段
        • 3.3、主鍵自動(dòng)生成
        • 3.4、LocalDateTimeSerializerConfig(LocalDateTime序列化)
    • 四、測(cè)試
        • 4.1、增加:
        • 4.2、刪除:
        • 4.3、查找:(分頁查找)
        • 4.4、修改:
        • 4.5、事務(wù)回滾:
        • 4.6、druid 監(jiān)控頁面
    • 五、自言自語

一、前言

最近在寫一個(gè)關(guān)于SpringBoot 系列的文章,在逐漸整理相關(guān)的知識(shí),打算慢慢寫出來,作為了一個(gè)工具,隨拿隨用。👨???

本文寫的是SpringBoot-MybatisPlus,完整項(xiàng)目結(jié)構(gòu)如下圖:

下面將會(huì)一一道來,有任何不懂的地方,都可以私信或留言評(píng)論,會(huì)及時(shí)給出回復(fù)。

若有寫的不對(duì)或不妥的地方,請(qǐng)您指教!!!非常感謝。🤶

二、基礎(chǔ)環(huán)境搭建

2.1、數(shù)據(jù)庫環(huán)境搭建:

DROP TABLE IF EXISTS `tb_user`; CREATE TABLE `tb_user` (`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`passwrod` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`deleted` int(1) NOT NULL DEFAULT 0,`create_time` datetime(0) NOT NULL COMMENT '創(chuàng)建時(shí)間',`update_time` datetime(0) NOT NULL COMMENT '修改時(shí)間',PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;INSERT INTO `tb_user` VALUES ('1', '123456789', '123456', 0, '2021-07-23 14:32:46', '2021-07-24 10:51:11'); INSERT INTO `tb_user` VALUES ('2', '寧在春', 'qwerasd', 0, '2021-07-23 15:02:02', '2021-07-23 15:49:55');

2.2、maven導(dǎo)入依賴:

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.2</version><relativePath/> <!-- lookup parent from repository --> </parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.6</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.72</version></dependency><!--start mybatis-plus 逆向工程 自動(dòng)生成代碼--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><!--逆向工程中的模板引擎--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.2</version></dependency><!--end--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> </dependencies>

2.3、yml配置文件

多配置😎

1、application.yml

spring:profiles:active: prod

2、application-prod.yaml

server:port: 8081worker-id: 1data-center-id: 2 spring:application:name: springboot-mybatis-plus# 數(shù)據(jù)源配置datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driver# 阿里的數(shù)據(jù)庫連接池druid:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/commons_utils?serverTimezone=UTC&useSSL=false&characterEncoding=utf8&serverTimezone=GMT# 初使化連接數(shù)(向數(shù)據(jù)庫要五個(gè)連接)initial-size: 5# 最小連接數(shù)(常住10個(gè)連接)min-idle: 10# 最大連接數(shù)(最多獲得10個(gè)連接,多到10個(gè)數(shù)據(jù)庫將進(jìn)入一個(gè)阻塞狀態(tài),等待其他連接釋放)max-active: 20# 獲取連接最長等待時(shí)間,單位毫秒max-wait: 10000# 配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒timeBetweenEvictionRunsMillis: 60000# 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒minEvictableIdleTimeMillis: 300000# 配置一個(gè)連接在池中最大生存的時(shí)間,單位是毫秒maxEvictableIdleTimeMillis: 900000# 配置檢測(cè)連接是否有效validationQuery: SELECT 1 FROM DUALtestWhileIdle: truetestOnBorrow: falsetestOnReturn: false#配置監(jiān)控頁面stat-view-servlet:enabled: trueurl-pattern: /druid/*login-username: adminlogin-password: adminfilter:stat:enabled: truelog-slow-sql: true# 慢SQL記錄slow-sql-millis: 1000merge-sql: truewall:config:multi-statement-allow: trueslf4j:enabled: truekeep-alive: truejackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8 mybatis-plus:configuration:cache-enabled: truelog-impl: org.apache.ibatis.logging.stdout.StdOutImpl #開啟sql日志mapper-locations: classpath:/mapper/**/*Mapper.xml #mapper.xml映射global-config:db-config:logic-delete-field: flag # 全局邏輯刪除的實(shí)體字段名(since 3.3.0,配置后可以忽略不配置步驟2)logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0) #logging: #日志打印、sql語句打印 # level: # root: info # com.crush.mybatispllus.mapper: debug

2.4、mybatis-plus 逆向工程生成代碼

2.4.1、初始化項(xiàng)目結(jié)構(gòu):

2.4.2、mybatisplus逆向共程代碼
// 演示例子,執(zhí)行 main 方法控制臺(tái)輸入模塊表名回車自動(dòng)生成對(duì)應(yīng)項(xiàng)目目錄中 public class CodeGenerator {/*** <p>* 讀取控制臺(tái)內(nèi)容* </p>*/public static String scanner(String tip) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("請(qǐng)輸入" + tip + ":");System.out.println(help.toString());if (scanner.hasNext()) {String ipt = scanner.next();if (StringUtils.isNotBlank(ipt)) {return ipt;}}throw new MybatisPlusException("請(qǐng)輸入正確的" + tip + "!");}public static void main(String[] args) {// 代碼生成器AutoGenerator mpg = new AutoGenerator();// 全局配置GlobalConfig gc = new GlobalConfig();final String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("crush");gc.setOpen(false);gc.setIdType(IdType.AUTO);// gc.setSwagger2(true); 實(shí)體屬性 Swagger2 注解mpg.setGlobalConfig(gc);// 數(shù)據(jù)源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://localhost:3306/commons_utils?useUnicode=true&useSSL=false&characterEncoding=utf8");// dsc.setSchemaName("public");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("123456");mpg.setDataSource(dsc);// 包配置final PackageConfig pc = new PackageConfig();pc.setModuleName(scanner("模塊名"));pc.setParent("com.crush");mpg.setPackageInfo(pc);// 自定義配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};// 如果模板引擎是 freemarker//String templatePath = "/templates/mapper.xml.ftl";// 如果模板引擎是 velocityString templatePath = "/templates/mapper.xml.vm";// 自定義輸出配置List<FileOutConfig> focList = new ArrayList<>();// 自定義配置會(huì)被優(yōu)先輸出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定義輸出文件名 , 如果你 Entity 設(shè)置了前后綴、此處注意 xml 的名稱會(huì)跟著發(fā)生變化!!return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});/*cfg.setFileCreate(new IFileCreate() {@Overridepublic boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {// 判斷自定義文件夾是否需要?jiǎng)?chuàng)建checkDir("調(diào)用默認(rèn)方法創(chuàng)建的目錄,自定義目錄用");if (fileType == FileType.MAPPER) {// 已經(jīng)生成 mapper 文件判斷存在,不想重新生成返回 falsereturn !new File(filePath).exists();}// 允許生成模板文件return true;}});*/cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);// 配置模板TemplateConfig templateConfig = new TemplateConfig();// 配置自定義輸出模板//指定自定義模板路徑,注意不要帶上.ftl/.vm, 會(huì)根據(jù)使用的模板引擎自動(dòng)識(shí)別// templateConfig.setEntity("templates/entity2.java");// templateConfig.setService();// templateConfig.setController();templateConfig.setXml(null);mpg.setTemplate(templateConfig);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);// 公共父類// 寫于父類中的公共字段strategy.setSuperEntityColumns("id");strategy.setInclude(scanner("表名,多個(gè)英文逗號(hào)分割").split(","));strategy.setControllerMappingHyphenStyle(true);// strategy.setTablePrefix(pc.getModuleName() + "_");//去掉 表前綴 "tb_" 需求變化的話 可以提取出來strategy.setTablePrefix("tb"+"_");mpg.setStrategy(strategy);mpg.setTemplateEngine(new VelocityTemplateEngine());mpg.execute();}}
2.4.3、啟動(dòng)與示例

模塊名 就是在已建立好的com.crush包下建一個(gè)新包 以這個(gè)為命名。==注意哈:我項(xiàng)目中的包實(shí)際為mybatisplus,這是寫文章時(shí)實(shí)時(shí)測(cè)試的。==😜

2.4.4、生成后的項(xiàng)目結(jié)構(gòu)

對(duì)了,記得寫一個(gè)啟動(dòng)類兄弟們,如果直接SpringBoot 項(xiàng)目請(qǐng)忽略。

2.4.5、生成代碼查看

基本注解都會(huì)給帶上,但是還是有一些需要手動(dòng)完善一下的,還有很多可以玩的,我還沒有全部玩完👩?🚀👩?🚀。這里不多扯。😚

補(bǔ)充: 因?yàn)閷?shí)體類上需要完善一些注解。所以將完整的實(shí)體類在此處寫出來了。

@EqualsAndHashCode(callSuper = false) //@Accessors 鏈?zhǔn)綍鴮?或 @AllArgsConstructor 全參構(gòu)造 @Accessors(chain = true) @TableName("tb_user") @KeySequence("mybatisKeyGenerator") public class User implements Serializable {private static final long serialVersionUID = 1L;@TableId(type = IdType.INPUT)private String id;private String username;private String passwrod;/*** 邏輯刪除字段*/@TableLogicprivate Integer deleted;/*** 創(chuàng)建時(shí)間*/@TableField(fill = FieldFill.INSERT)private LocalDateTime createTime;/*** 修改時(shí)間*/@TableField(fill = FieldFill.INSERT_UPDATE)private LocalDateTime updateTime; }

到此基本環(huán)境已基本搭建完畢,加一個(gè)啟動(dòng)類、配置類即可開始測(cè)試。(后面都有的,莫慌👨?💻👨?💻)

三、配置類講解

3.1、MybatisPlusConfig

package com.crush.mybatisplus.config;import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.transaction.annotation.EnableTransactionManagement;/*** @EnableTransactionManagement :開啟事務(wù)* @MapperScan() 掃描包* @Author: crush* @Date: 2021-07-23 14:14* version 1.0*/ @Configuration @EnableTransactionManagement @MapperScan("com.crush.mybatisplus.mapper") public class MybatisPlusConfig {/*** 分頁 插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));// 注冊(cè)樂觀鎖 插件return mybatisPlusInterceptor;}/*** 配置數(shù)據(jù)源 druid*/@Bean@Primary@ConfigurationProperties("spring.datasource.druid")public DruidDataSource druidDataSource() {return DruidDataSourceBuilder.create().build();}}

寫到這里即可以直接開測(cè)了,下面更多的是細(xì)節(jié)方面的處理。(我寫的測(cè)試在文末,知識(shí)點(diǎn)內(nèi)的測(cè)試都有)😶

3.2、自動(dòng)填充字段

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component;import java.time.LocalDateTime;/*** 填充創(chuàng)建和修改時(shí)間* @Author: crush* @Date: 2021-07-23 14:14*/ @Slf4j @Component public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {log.info(" 插入填充 start insert fill ....");// 我去看了一下介紹,其實(shí)這里是個(gè)通用填充,并不局限于填充時(shí)間哈 this.setFieldValByName("createTime", LocalDateTime.now(),metaObject);this.setFieldValByName("updateTime",LocalDateTime.now(),metaObject);}@Overridepublic void updateFill(MetaObject metaObject) {log.info("修改填充 start update fill ....");this.setFieldValByName("updateTime",LocalDateTime.now(),metaObject);} }

注意: 需要在填充的字段上加上注解。🤗

/** * 創(chuàng)建時(shí)間 */ @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime;/** * 修改時(shí)間 */ @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime;

3.3、主鍵自動(dòng)生成

import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;/*** 主鍵自動(dòng)生成* @Author: crush* @Date: 2021-07-23 14:14*/ @Slf4j @Component public class MybatisKeyGenerator implements IKeyGenerator {@Value("${server.worker-id}")private Integer workerId;@Value("${server.data-center-id}")private Integer dataCenterId;@Overridepublic String executeSql(String incrementerName) {log.info("mybatis plus keyGenerator: " + incrementerName + "(" + workerId + "," + dataCenterId + ")");long uid = new SnowflakeIdWorker(workerId, dataCenterId).nextId();return "select " + uid + " from dual";} }

注意: id 字段上需要有這個(gè)注解哈。因?yàn)槲覀兪亲远x了id 的生成,并不是使用的哈。😗🤑

@TableId(type = IdType.INPUT) // 如果使用默認(rèn)的話 @TableId(type = IdType.AUTO) private String id;

另外,使用自定義的還需 在實(shí)體類上 加上一個(gè)@KeySequence("mybatisKeyGenerator")注解。 mybatisKeyGenerator是bean注入時(shí)的名稱哈。

@KeySequence("mybatisKeyGenerator") public class User implements Serializable {}

👨?💻👨?💻

SnowflakeIdWorker 是mybatisplus中官方文檔中說的 Id自增用的雪花算法。

簡介:SnowFlake是Twitter公司采用的一種算法,目的是在分布式系統(tǒng)中產(chǎn)生全局唯一且趨勢(shì)遞增的ID。

直接Copy就好,這里只是簡單使用,沒有詳講。好奇的朋友可以去查一查相關(guān)講雪花算法的文。😚

/*** 0 | 0001100 10100010 10111110 10001001 01011100 00 | 10001 | 00001 | 0000 00000000* <p>* 0 | 0001100 10100010 10111110 10001001 01011100 00 | 10001 | 00001 | 0000 00000000* 0 | timestamp |datacenterId| workerId | sequence* 正數(shù)(占位) | 時(shí)間戳二進(jìn)制 | 數(shù)據(jù)中心ID | 機(jī)器ID | 同一機(jī)房同一機(jī)器相同時(shí)間產(chǎn)生的序列** @author crush*/ public class SnowflakeIdWorker {/*** 數(shù)據(jù)中心(機(jī)房) id*/private long datacenterId;/*** 機(jī)器ID*/private long workerId;/*** 同一時(shí)間的序列*/private long sequence;/*** 構(gòu)造方法** @param workerId 工作ID(機(jī)器ID)* @param datacenterId 數(shù)據(jù)中心ID(機(jī)房ID)* sequence 從0開始*/public SnowflakeIdWorker(long workerId, long datacenterId){this(workerId, datacenterId, 0);}/*** 構(gòu)造方法** @param workerId 工作ID(機(jī)器ID)* @param datacenterId 數(shù)據(jù)中心ID(機(jī)房ID)* @param sequence 序列號(hào)*/public SnowflakeIdWorker(long workerId, long datacenterId, long sequence){// sanity check for workerId and datacenterId// 機(jī)房id和機(jī)器id不能超過32,不能小于0if (workerId > maxWorkerId || workerId < 0){throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));}if (datacenterId > maxDatacenterId || datacenterId < 0){throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));}System.out.printf("worker starting. timestamp left shift %d, datacenter id bits %d, worker id bits %d, sequence bits %d, workerid %d",timestampLeftShift, datacenterIdBits, workerIdBits, sequenceBits, workerId);this.workerId = workerId;this.datacenterId = datacenterId;this.sequence = sequence;}/*** 開始的時(shí)間戳(2015-01-01)*/private long twepoch = 1420041600000L;/*** 數(shù)據(jù)中心(可以理解為機(jī)房)的ID所占的位數(shù) 5個(gè)bite 最大:11111(2進(jìn)制)--> 31(10進(jìn)制)*/private long datacenterIdBits = 5L;/*** 機(jī)器ID所占的位數(shù) 5個(gè)bit 最大:11111(2進(jìn)制)--> 31(10進(jìn)制)*/private long workerIdBits = 5L;/*** 這個(gè)是二進(jìn)制運(yùn)算,就是5 bit最多只能有31個(gè)數(shù)字,也就是說機(jī)器id最多只能是32以內(nèi)* 11111(2進(jìn)制)--> 31(10進(jìn)制)*/private long maxWorkerId = -1L ^ (-1L << workerIdBits);/*** 5 bit最多只能有31個(gè)數(shù)字,機(jī)房id最多只能是32以內(nèi)* 同上*/private long maxDatacenterId = -1L ^ (-1L << datacenterIdBits);/*** 同一時(shí)間的序列所占的位數(shù) 12個(gè)bit 111111111111 = 4095 最多就是同一毫秒生成4096個(gè)*/private long sequenceBits = 12L;// workerId的偏移量// 0 | 0001100 10100010 10111110 10001001 01011100 00 | 10001 | 00001 | 0000 00000000// 0 | timestamp |datacenterId| workerId | sequence// << sequenceBitsprivate long workerIdShift = sequenceBits;// datacenterId的偏移量// 0 | 0001100 10100010 10111110 10001001 01011100 00 | 10001 | 00001 | 0000 00000000// 0 | timestamp |datacenterId| workerId | sequence// << workerIdBits + sequenceBitsprivate long datacenterIdShift = sequenceBits + workerIdBits;// timestampLeft的偏移量// 0 | 0001100 10100010 10111110 10001001 01011100 00 | 10001 | 00001 | 0000 00000000// 0 | timestamp |datacenterId| workerId | sequence// << sequenceBits + workerIdBits + sequenceBitsprivate long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits;/*** 序列號(hào)掩碼 4095 (0b111111111111=0xfff=4095)* // 用于序號(hào)的與運(yùn)算,保證序號(hào)最大值在0-4095之間*/private long sequenceMask = -1L ^ (-1L << sequenceBits);/*** 最近一次獲取id的時(shí)間戳*/private long lastTimestamp = -1L;/*** 獲取工作ID(機(jī)器ID)** @return*/public long getWorkerId(){return workerId;}/*** 獲取數(shù)據(jù)中心ID(機(jī)房ID)** @return*/public long getDatacenterId(){return datacenterId;}/*** 獲取最新一次獲取的時(shí)間戳** @return*/public long getLastTimestamp(){return lastTimestamp;}/*** 獲取下一個(gè)隨機(jī)的ID** @return*/public synchronized long nextId(){// 這兒就是獲取當(dāng)前時(shí)間戳,單位是毫秒long timestamp = timeGen();if (timestamp < lastTimestamp){System.err.printf("clock is moving backwards. Rejecting requests until %d.", lastTimestamp);throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds",lastTimestamp - timestamp));}// 判斷本次的時(shí)間和前一次的時(shí)間是否一樣if (lastTimestamp == timestamp){// 如果一樣說明是同一時(shí)間獲取多次// 這個(gè)意思是說一個(gè)毫秒內(nèi)最多只能有4096個(gè)數(shù)字,無論你傳遞多少進(jìn)來,這個(gè)位運(yùn)算保證始終就是在4096這個(gè)范圍內(nèi),避免你自己傳遞個(gè)sequence超過了4096這個(gè)范圍sequence = (sequence + 1) & sequenceMask;// 如果與運(yùn)算得到了0 說明sequence序列已經(jīng)大于看4095// 如4096 = 1000000000000// 1000000000000// & 111111111111// = 000000000000// = 0if (sequence == 0){// 調(diào)用到下一個(gè)時(shí)間戳的方法timestamp = tilNextMillis(lastTimestamp);}}else{// 如果是當(dāng)前時(shí)間的第一次獲取,那么就置為0sequence = 0;}// 這兒記錄一下最近一次生成id的時(shí)間戳,單位是毫秒lastTimestamp = timestamp;// 按上面的偏移量進(jìn)行左移動(dòng)// 首位的0可以忽略// 時(shí)間戳 << 22 |// datacenterId << 17 |// workerId << 12 |// sequencereturn ((timestamp - twepoch) << timestampLeftShift) |(datacenterId << datacenterIdShift) |(workerId << workerIdShift) |sequence;}/*** 切到下一個(gè)時(shí)間戳* 作用是,當(dāng)如果出現(xiàn)同一個(gè)時(shí)間戳內(nèi),獲取的次數(shù)超過了4095* 死循環(huán)至下一個(gè)時(shí)間戳,避免沖突** @param lastTimestamp* @return*/private long tilNextMillis(long lastTimestamp){// 獲取最新的時(shí)間戳long timestamp = timeGen();// 如果發(fā)現(xiàn)最新的時(shí)間戳小于或者等于序列號(hào)已經(jīng)超4095的那個(gè)時(shí)間戳while (timestamp <= lastTimestamp){// 如果是小于或者等于的 那我們就繼續(xù)死循環(huán)獲取下一個(gè)時(shí)間戳// 指導(dǎo)切換到了下一個(gè)時(shí)間戳timestamp = timeGen();}// 返回新的時(shí)間戳return timestamp;}/*** 獲取當(dāng)前時(shí)間戳** @return 返回時(shí)間戳的毫秒數(shù)*/private long timeGen(){return System.currentTimeMillis();}//---------------測(cè)試---------------public static void main(String[] args){SnowflakeIdWorker worker = new SnowflakeIdWorker(1, 1);long timer = System.currentTimeMillis();for (int i = 0 ; i < 260000 ; i++){worker.nextId();}System.out.println(System.currentTimeMillis());System.out.println(System.currentTimeMillis() - timer);}}

(太占我篇幅了。👴)

3.4、LocalDateTimeSerializerConfig(LocalDateTime序列化)

簡單介紹:此類的作用就是將LocalDateTime 進(jìn)行格式化的配置,另外注冊(cè)了兩個(gè)類型轉(zhuǎn)換器。😀

import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter;import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter;/*** LocalDateTime 序列化配置* @Author: crush* @Date: 2021-07-23 14:14*/ @Configuration public class LocalDateTimeSerializerConfig {@Value("${spring.jackson.date-format}")private String DATE_TIME_PATTERN;@Value("${spring.jackson.date-format}")private String DATE_PATTERN ;/*** string轉(zhuǎn)localdate*/@Beanpublic Converter<String, LocalDate> localDateConverter() {return new Converter<String, LocalDate>() {@Overridepublic LocalDate convert(String source) {if (source.trim().length() == 0) {return null;}try {return LocalDate.parse(source);} catch (Exception e) {return LocalDate.parse(source, DateTimeFormatter.ofPattern(DATE_PATTERN));}}};}/*** string轉(zhuǎn)localdatetime*/@Beanpublic Converter<String, LocalDateTime> localDateTimeConverter() {return new Converter<String, LocalDateTime>() {@Overridepublic LocalDateTime convert(String source) {if (source.trim().length() == 0) {return null;}// 先嘗試ISO格式: 2019-07-15T16:00:00try {return LocalDateTime.parse(source);} catch (Exception e) {return LocalDateTime.parse(source, DateTimeFormatter.ofPattern(DATE_TIME_PATTERN));}}};}/*** 統(tǒng)一配置 LocalDateTime 格式化 直接規(guī)定LocalDateTime的格式。*/@Beanpublic Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {JavaTimeModule module = new JavaTimeModule();LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer);return builder -> {builder.simpleDateFormat(DATE_TIME_PATTERN);builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_PATTERN)));builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)));builder.modules(module);};} }

終于整到這一步啦,剩下的就只剩測(cè)試和實(shí)用啦。兄弟,都到這里啦丫,看完吧。

四、測(cè)試

@SpringBootTestpublic class UserTest { @Autowired IUserService userService;}

4.1、增加:

@Testpublic void testInsert(){ User crush = new User().setUsername("qqqq").setPasswrod("987456"); boolean b = userService.save(crush); System.out.println(b);}

從結(jié)果,可以看到我們已經(jīng)成功啦。

4.2、刪除:

補(bǔ)充:我們?cè)谶@里的刪除,實(shí)際上是邏輯刪除,數(shù)據(jù)庫中數(shù)據(jù)仍在,并非物理刪除,這是為了防止誤刪而設(shè)置的。也是一種數(shù)據(jù)的保留方式。

@Testpublic void testDelete(){ QueryWrapper<User> wrapper = new QueryWrapper<>(); // 將sql 語句中眾多的條件 換成了代碼 這里沒有細(xì)講,之后會(huì)出文章 講這個(gè)Wrapper。 // 此處意思是 拼成 sql 語句即為 username=qqqq (注:是更在where子句后) wrapper.eq("username","qqqq"); boolean remove = userService.remove(wrapper); System.out.println(remove);}

此處執(zhí)行的實(shí)質(zhì)SQL語句也為修改語句,并非delete語句。

4.3、查找:(分頁查找)

@Testpublic void selectList(){ List<User> list = tbUserService.list(); // 查詢?nèi)縸 @Testpublic void testPage(){ // 第一個(gè)參數(shù) 當(dāng)前頁碼 第二個(gè)參數(shù)是 每一頁的大小 // 這里的 1,5 說的是查詢第一頁 ,每頁展示5條 Page<User> page = new Page<>(1,5); Page<User> tbUserPage = userService.page(page); // 傳給前臺(tái)時(shí),并不需要這么讀取,這里是為了展示 getRecords() 是獲取查詢到的記錄。 List<User> records = tbUserPage.getRecords(); records.forEach(System.out::println);}

從結(jié)果可以看出是沒有任何問題的哈。

4.4、修改:

@Testpublic void testUpdate(){ UpdateWrapper<User> wrapper = new UpdateWrapper<>(); // 將sql 語句中眾多的條件 換成了代碼 這里沒有細(xì)講,之后會(huì)出文章 講這個(gè)Wrapper。 // 此處意思是 拼成 sql 語句即為 username=qqqq (注:是更在where子句后) wrapper.eq("id",1); User crush = new User().setUsername("寧在春").setPasswrod("123456"); userService.update(crush,wrapper);}

4.5、事務(wù)回滾:

/*** 事務(wù)回滾*/@Transactional@Testpublic void testWork(){ //start-------- delete from tb_user where username=寧在春; QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.eq("username","寧在春"); tbUserService.remove(wrapper); //end //start-------- update set username="我是新手" where id99999=1; UpdateWrapper<User> wrapper1 = new UpdateWrapper<>(); // 在這里我故意將字段寫錯(cuò) 那么這條SQL 語句 肯定會(huì)報(bào)錯(cuò)。 wrapper1.eq("id99999",1); User crush = new User().setUsername("我是新手"); tbUserService.update(crush,wrapper1); //end---------- 這條sql 語句 ,我們知道肯定是不會(huì)生效的,那么上面生效的是否回回滾呢?}

4.6、druid 監(jiān)控頁面

druid 配置方式,我并沒有采取常見的bean注入方式,而是寫在了yml配置文件中。用bean也有好處,就是賬號(hào)密碼等等可以動(dòng)態(tài)。

為了方便測(cè)試,我在controller層中稍微寫了點(diǎn),并補(bǔ)充了啟動(dòng)類哈。

/** * @author crush * @since 2021-07-23 */@RestControllerpublic class UserController { private final IUserService tbUserService; public UserController(IUserService tbUserService) { this.tbUserService = tbUserService; } @RequestMapping("/list") public List<User> list(){ return tbUserService.list(); }} @Slf4j@SpringBootApplicationpublic class MyBatisPlus { public static void main(String[] args) { SpringApplication.run(MyBatisPlus.class); log.info("druid 監(jiān)控頁面:localhost:8081/druid"); }}

druid 監(jiān)控頁面鏈接:localhost:8081/druid 會(huì)直接去到登錄頁面,賬號(hào)密碼就是配置好的admin。

測(cè)試:

跑一下查詢?nèi)康慕涌?#xff0c;然后在sql監(jiān)控頁面已經(jīng)可以看到sql信息啦。點(diǎn)進(jìn)去的話,能看到詳細(xì)信息。

五、自言自語

不知道你有沒有收獲,如果能夠幫助到你,就讓我知道吧,讓我享受一下分享知識(shí)的快樂吧。

如果存有疑惑,就私信或留言吧,定會(huì)及時(shí)回復(fù)的。

如有不足之處,也請(qǐng)大家能夠及時(shí)指出!!👨?💻👨?💻

今天就到這里啦,明天接著更mybatis-plus結(jié)合redis做緩存哈。(使用緩存組件的方式)

共勉or🛌

總結(jié)

以上是生活随笔為你收集整理的SpringBoot集成MybatisPlus 涵盖了目前流行的知识点!!!即用即cv即可!!!学过的同学,也可以存储作为工具!!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

91伊人久久大香线蕉蜜芽人口 | 欧美性色xo影院 | 日韩mv欧美mv国产精品 | 在线观看国产中文字幕 | 最近免费中文视频 | 亚洲狠狠操| 成 人 黄 色 视频 免费观看 | 日本性动态图 | 久草在线视频在线观看 | 99视频国产精品免费观看 | 日韩电影在线观看一区二区 | 久久小视频 | 99精品热| 天天天天干| 亚洲天堂网站 | 色资源在线 | 在线看的毛片 | 久草在线视频在线 | 天天色综合天天 | 亚洲成人资源在线 | 国产不卡视频 | 在线不卡视频 | 欧美精品乱码久久久久久按摩 | 欧美在线视频一区二区 | 久久男人中文字幕资源站 | 在线观看av大片 | 免费黄色特级片 | 国产精品va最新国产精品视频 | 亚洲一区二区精品在线 | 中文综合在线 | 欧美最新另类人妖 | 欧美一级免费高清 | 亚洲va天堂va欧美ⅴa在线 | 成人毛片a| 夜夜躁狠狠燥 | 久艹在线播放 | 国产又粗又猛又黄 | 久久精品一区二区三区中文字幕 | 最新亚洲视频 | 中文字幕在线观看免费高清完整版 | 久久久男人的天堂 | 久久黄色免费视频 | 日韩在线精品一区 | 超碰97中文| 久久新| 国产精品入口久久 | 高清av网| 天天伊人网 | 天天爱天天射天天干天天 | 久久艹国产视频 | 黄网av在线 | 国产手机在线播放 | 国产一级免费电影 | 精品一二三四在线 | 97在线免费观看 | av黄色在线播放 | 99re视频在线观看 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 丁香婷婷基地 | 黄色免费网战 | 不卡国产视频 | 能在线看的av | 夜夜看av | 在线免费观看羞羞视频 | 黄色av电影在线观看 | 99精品视频在线观看 | 成年人免费在线 | 五月天婷婷免费视频 | 亚洲视频免费在线看 | 日本公妇在线观看 | 狠狠狠狠狠狠狠干 | 18国产精品白浆在线观看免费 | 成人av网站在线观看 | 日本在线成人 | 日韩欧美一区二区三区在线观看 | 1024手机基地在线观看 | 中文字幕亚洲高清 | 免费三级黄 | 97国产大学生情侣白嫩酒店 | 一级黄色片在线免费看 | av片免费播放 | 黄色免费观看网址 | 欧美日韩高清一区 | 久久久久亚洲精品男人的天堂 | 国产理伦在线 | 日韩一区二区三区高清免费看看 | 精品高清视频 | 国产福利一区二区三区在线观看 | 激情综合电影网 | 亚洲国产精品免费 | 亚洲国产欧美在线人成大黄瓜 | 国产亚洲人成网站在线观看 | 久久婷婷五月综合色丁香 | 香蕉91视频| 久久久免费电影 | av电影中文 | 久久99精品国产 | 欧美日韩亚洲在线 | 久久色中文字幕 | 久久国产精品免费观看 | 国产成人久久久久 | 久久久久久久久久亚洲精品 | 国产麻豆视频在线观看 | 天堂va欧美va亚洲va老司机 | 亚洲第一av在线播放 | 免费观看xxxx9999片 | 国产成人一区二区三区免费看 | 久久97久久 | 国产在线日韩 | 久久久精品 | 国产精品自产拍在线观看桃花 | 视频在线观看一区 | 一区二区视频欧美 | 国产精品v欧美精品 | 91尤物国产尤物福利在线播放 | 国产精品成人一区二区三区 | 婷婷在线五月 | 在线观看片 | 亚洲资源在线 | 亚洲精品国产精品国 | 日韩在线 一区二区 | 日韩精品专区在线影院重磅 | 一区二区丝袜 | 涩涩在线 | 色欧美综合 | 国内三级在线观看 | 美女精品| 99视频国产精品免费观看 | 婷婷色网 | 欧美一区二区三区在线看 | 亚州欧美精品 | 成人午夜剧场在线观看 | 97超碰国产精品女人人人爽 | 国产久草在线观看 | 91精品蜜桃 | 国产特级毛片aaaaaa高清 | 91精品国产欧美一区二区 | 国产精品精品久久久 | 狠狠狠干狠狠 | 中国一级特黄毛片大片久久 | 麻豆va一区二区三区久久浪 | 亚洲视频 视频在线 | 亚洲视频每日更新 | 亚洲精品国产自产拍在线观看 | 手机看国产毛片 | 国产福利一区二区在线 | 欧美日韩视频在线观看免费 | 天天操天天色天天 | 一区 二区 精品 | 九草视频在线 | 麻豆系列在线观看 | 一区二区三区中文字幕在线 | 天天干,天天插 | 五月网婷婷 | 成人午夜电影在线播放 | 天天综合婷婷 | 久久丁香网 | 久久综合亚洲鲁鲁五月久久 | 国产伦理精品一区二区 | 在线观看黄色免费视频 | 久久r精品 | 国产精品视频在线看 | 免费污片| 日韩av视屏在线观看 | 超碰夜夜 | 成年人视频在线观看免费 | 亚洲精品a区 | 特级西西人体444是什么意思 | 人人草人人做 | 973理论片235影院9 | 久久a v视频 | 亚洲爱爱视频 | 国产亚洲婷婷 | av不卡在线看 | 国产精品乱码久久久久久1区2区 | 一区二区三区 中文字幕 | 国产免费一区二区三区网站免费 | 99视频在线精品 | 天天射日 | 在线观看中文字幕一区二区 | 国产成人精品日本亚洲999 | 日本久久电影网 | 欧美a在线免费观看 | 三级av免费| 中文字幕中文字幕在线中文字幕三区 | 97精品视频在线播放 | 亚洲黄色大片 | 麻豆一精品传二传媒短视频 | 亚州精品天堂中文字幕 | 精品天堂av | 久久男人中文字幕资源站 | 怡红院av久久久久久久 | 在线免费av网站 | 91av在线精品| 日韩精品一区二区三区三炮视频 | 色av男人的天堂免费在线 | 成年人免费电影 | 午夜影视一区 | 日韩国产欧美在线播放 | 久草视频免费观 | 中文字幕一区二区三区在线播放 | 成人羞羞视频在线观看免费 | 91在线精品一区二区 | 欧美日韩另类在线观看 | 婷婷久久综合九色综合 | 国产国产人免费人成免费视频 | 亚洲aⅴ久久精品 | 天天综合操 | www.久久色 | 中文字幕91 | 国产成人91 | 超碰公开在线 | 激情网综合 | 91在线免费观看国产 | 国产三级精品在线 | 又黄又爽又无遮挡免费的网站 | 亚洲视频免费在线观看 | 亚洲精品自拍视频在线观看 | 99久久久国产精品免费99 | 欧美日比视频 | 日日草av| 欧美专区国产专区 | 国产精品黄色 | 欧美精品做受xxx性少妇 | 天天天天爱天天躁 | 国产高清一 | 美女性爽视频国产免费app | 2017狠狠干 | 日韩在线视频观看免费 | 色噜噜日韩精品欧美一区二区 | av短片在线 | 日韩美女一级片 | 日韩亚洲国产精品 | 久久免费国产 | 亚洲精欧美一区二区精品 | 亚洲国产黄色片 | 亚洲激情一区二区三区 | 97国产精品亚洲精品 | 天天色天天艹 | 成人一级黄色片 | 在线观看免费色 | 免费在线观看黄 | 日韩免费av在线 | 欧美一区二区三区免费观看 | 狠狠狠色丁香综合久久天下网 | 六月久久婷婷 | 五月婷婷六月丁香在线观看 | 激情丁香在线 | 午夜美女网站 | 日韩日韩日韩日韩 | 成年人在线免费视频观看 | 又色又爽又激情的59视频 | 99热精品久久 | 国产一区自拍视频 | 激情网婷婷 | 久草免费资源 | 2019中文最近的2019中文在线 | 天天激情站 | 99视频精品免费观看, | 精品国产精品久久 | 国产成人精品999在线观看 | 日日夜夜精品视频 | av综合站| 亚洲精品tv久久久久久久久久 | 日韩国产精品毛片 | 国产无吗一区二区三区在线欢 | 97精品伊人| 人人澡人摸人人添学生av | 国内精品在线观看视频 | 国产精品一区一区三区 | 欧美性色黄大片在线观看 | 亚洲一一在线 | 欧美日韩久久久 | 狠狠狠色丁香综合久久天下网 | 久草com| 婷婷激情网站 | 日韩欧三级| 热久在线 | 九月婷婷综合网 | 日韩毛片在线一区二区毛片 | 国产自产在线视频 | 九九热精品视频在线观看 | 精品女同一区二区三区在线观看 | 天天在线操 | 久久99在线 | 中文字幕一区二区三区视频 | 一区二区三区在线播放 | 国产99一区视频免费 | 日韩午夜一级片 | 国产成人一区二区在线观看 | 国产一区在线视频播放 | 日韩一区正在播放 | 亚洲成a人片77777kkkk1在线观看 | 日韩高清免费无专码区 | 国产视频日韩视频欧美视频 | a√天堂资源 | 免费电影播放 | 天天射天天操天天 | 91自拍视频在线 | 欧美日韩高清在线 | 蜜臀av性久久久久蜜臀av | 久久乐九色婷婷综合色狠狠182 | 色婷婷丁香 | 欧美激情在线看 | 色综合久久88色综合天天人守婷 | 日本性视频 | 午夜av激情| 涩涩网站在线播放 | 日本深夜福利视频 | 91精品国产91p65 | 欧美日产在线观看 | 九九九热精品 | 精品国产中文字幕 | 久久无码av一区二区三区电影网 | 久久婷婷色综合 | 亚洲国产一二三 | 日韩一级网站 | 五月精品| 91视频免费播放 | 日韩精品视频免费专区在线播放 | 亚洲欧美日韩在线看 | 国产又粗又猛又黄又爽 | 日韩在线电影观看 | 久久噜噜少妇网站 | 一级片色播影院 | 91在线精品一区二区 | 99精品免费久久久久久久久 | 精品美女久久 | 在线之家官网 | 天天综合日日夜夜 | 男女免费av | 久久97久久 | 最近的中文字幕大全免费版 | 欧美日韩调教 | 91精品高清| 全久久久久久久久久久电影 | 91精品爽啪蜜夜国产在线播放 | 久久综合狠狠狠色97 | 成年人av在线播放 | 五月亚洲婷婷 | 成人性生交视频 | 在线精品视频在线观看高清 | 日韩理论在线播放 | 黄色三级在线观看 | 久久久首页| 91精品对白一区国产伦 | 三上悠亚一区二区在线观看 | av爱干| 日韩美女高潮 | 涩涩网站在线播放 | 色综合久久中文字幕综合网 | 国产精品入口传媒 | 9999免费视频| 国产91精品久久久久 | 五月激情丁香图片 | 欧美疯狂性受xxxxx另类 | 亚洲精品女人 | 麻豆传媒电影在线观看 | 亚洲国产黄色 | 成人国产精品一区 | 91精品亚洲影视在线观看 | 久久人人97超碰国产公开结果 | 黄色大片入口 | 亚洲va在线va天堂va偷拍 | 伊人春色电影网 | 九九热在线观看视频 | 国产精品高 | 黄色毛片网站在线观看 | 国产精品激情偷乱一区二区∴ | 一区二区三区免费网站 | 丁香综合五月 | 正在播放国产91 | 国产在线观看你懂得 | 精品国产美女在线 | 久久亚洲成人网 | 亚洲人在线7777777精品 | 又黄又刺激视频 | 福利二区视频 | 日日操天天爽 | 亚洲少妇自拍 | 欧美aa在线 | 欧美激情在线网站 | 中文字幕在| 99产精品成人啪免费网站 | 人人干人人艹 | 国产一级视频在线 | 福利视频一区二区 | 日韩影片在线观看 | 狠狠狠色丁香婷婷综合久久88 | 人人澡人人爽欧一区 | 精品在线观看视频 | 97人人视频 | 97人人射| 在线黄色观看 | 国产福利精品在线观看 | 国产99中文字幕 | 亚洲国产视频a | h久久| 波多野结衣电影一区二区 | 欧美精品免费视频 | 日韩www在线| 综合天天色 | 国产精品一区二区在线观看免费 | 国产不卡免费视频 | 国产伦理一区二区 | 一区二区电影在线观看 | va视频在线 | 中国一级片在线 | 999久久国产 | 天天操夜夜操天天射 | 日韩欧美国产视频 | 国产99久久九九精品 | 欧美美女一级片 | 黄色亚洲在线 | 欧美一级电影免费观看 | 国产精品 久久 | 亚洲精品色婷婷 | 日本精品久久久久中文字幕 | 欧美福利视频一区 | 日b黄色片 | 久久久久久久久久国产精品 | 天天草天天干天天射 | 欧美日韩视频在线观看一区二区 | 黄色在线成人 | 日韩系列在线 | 日韩在线短视频 | 日日干影院 | 黄色av电影 | 久久久久久影视 | 成人作爱视频 | 性色视频在线 | 亚洲欧美日韩国产一区二区 | 婷婷国产在线观看 | 高清不卡一区二区在线 | 成人动漫一区二区 | 99久久精品无码一区二区毛片 | 91人人澡| 久久这里只有精品23 | 亚洲国产字幕 | 久草在线视频网 | 亚洲欧美精品一区 | 中文字幕乱码日本亚洲一区二区 | 国产亚洲婷婷免费 | 日韩欧美一区二区三区免费观看 | 人人天天夜夜 | 激情久久影院 | 日本系列中文字幕 | 久久久麻豆视频 | 色噜噜噜 | 天天射天天干天天操 | 国产精品毛片一区视频播不卡 | 日日天天| 亚洲五月综合 | 精品久久久成人 | 亚洲精品国偷拍自产在线观看蜜桃 | 午夜丰满寂寞少妇精品 | 国内外成人在线视频 | 国产一级二级三级视频 | 国产一区二区三区免费在线 | 亚洲精品小区久久久久久 | 五月婷婷丁香六月 | 欧美激情视频一二三区 | 91少妇精拍在线播放 | 999亚洲国产996395 | 国产成人精品一区二区在线观看 | 久久尤物电影视频在线观看 | 久久神马影院 | 亚洲精品成人 | 99视频在线免费播放 | 天天操天天干天天 | 国产精品video爽爽爽爽 | 热久久在线视频 | 粉嫩av一区二区三区四区在线观看 | 丁香午夜婷婷 | 精品一区二区三区香蕉蜜桃 | 在线观看韩国av | 高潮毛片无遮挡高清免费 | 国产美女视频网站 | 激情黄色av| 国产中文伊人 | 国产在线观看免费 | 国产在线va| 成人蜜桃 | 激情综合网天天干 | 久久久久久久久亚洲精品 | 黄色的视频网站 | 丁香六月婷婷开心婷婷网 | 国产精品久久久久久五月尺 | 久久久精华网 | 日韩有码欧美 | 国产免费黄视频在线观看 | 久久久久久久久久久网 | 国产精品久99 | 日韩簧片在线观看 | 久久99国产一区二区三区 | 综合天天久久 | 日韩和的一区二在线 | 亚洲精品视频在线观看视频 | 久久私人影院 | 天天综合五月天 | 日韩中文字幕免费视频 | 日韩电影在线观看一区 | 五月激情片 | 丁香五月亚洲综合在线 | www国产亚洲精品久久网站 | 人人干,人人爽 | 成人毛片一区二区三区 | 欧美激情xxxx性bbbb | 香蕉久久久久久av成人 | 精品a在线 | 欧日韩在线视频 | 国产999精品久久久 免费a网站 | 国产高清免费在线观看 | 国产香蕉久久 | 天天看天天干 | 久久五月天色综合 | 久久久国产精品成人免费 | 天天插伊人| 草免费视频 | 视频在线观看日韩 | 欧美激情视频一区二区三区 | 欧美性极品xxxx做受 | 日韩视频一区二区 | 精品国产免费av | 日本黄色免费在线 | 亚洲精品国产精品国自产观看浪潮 | 日韩欧美在线中文字幕 | 在线黄色国产 | 狠狠的操你 | 国产精品乱码久久久久 | 日韩爱爱片| 久久99久久99精品中文字幕 | 亚洲在线不卡 | 丝袜av一区 | 波多野结衣综合网 | 麻豆传媒电影在线观看 | 成人毛片久久 | 亚洲成熟女人毛片在线 | 精品999久久久 | 天天插夜夜操 | 国产一级特黄毛片在线毛片 | 日韩国产精品久久久久久亚洲 | 国产精品18毛片一区二区 | 极品中文字幕 | 美女久久一区 | 五月天久久久久 | 观看免费av| 色就是色综合 | 国内精品视频一区二区三区八戒 | 亚洲黄色免费在线看 | 午夜久久久久久久久 | 亚洲乱码久久 | 91精品久久久久久综合五月天 | 操操操综合 | 亚洲免费成人av电影 | 97人人人人| 日韩特黄一级欧美毛片特黄 | 五月天精品视频 | 亚洲国产成人高清精品 | 91看片一区二区三区 | 三级视频国产 | 中日韩三级视频 | 毛片99 | 国内久久久 | 97人人模人人爽人人喊网 | 色综合久久中文字幕综合网 | 欧美性猛片| 日日射天天射 | 这里有精品在线视频 | 欧美大香线蕉线伊人久久 | 久久精品123| 国产91国语对白在线 | 蜜桃视频日本 | 久久96国产精品久久99漫画 | 国产精品电影在线 | 欧美激情综合五月色丁香 | 欧美日韩精品国产 | 国产高清在线免费观看 | 亚洲伊人色 | 国产一区二区三区在线免费观看 | 91视频高清完整版 | 久久黄色影视 | 91九色porny在线 | 久草视频在线资源站 | 密桃av在线 | 女人18毛片90分钟 | 亚洲丁香日韩 | 99热最新在线 | 五月情婷婷 | 国产97色在线 | 久久精品综合 | 色av男人的天堂免费在线 | 日日夜夜免费精品视频 | 婷婷中文字幕在线观看 | 夜夜躁狠狠躁日日躁 | 久久激情网站 | www国产亚洲精品久久网站 | 国产乱对白刺激视频在线观看女王 | 6080yy精品一区二区三区 | 91在线中文 | www日韩| 91激情小视频 | av爱干| 日日干干夜夜 | 中文字幕欧美激情 | 麻豆久久久久 | 国内精品小视频 | 免费看日韩片 | 成年人免费观看在线视频 | 天堂网一区 | 欧美日韩成人 | 国产一级小视频 | 成人av网站在线 | 99久久日韩精品视频免费在线观看 | a成人v在线 | 黄色小说18 | 美女视频黄免费 | 日韩三级在线观看 | 国产精品大片免费观看 | 亚洲成年片| www.操.com| 国产精品精品视频 | 国产色婷婷精品综合在线手机播放 | 91热精品 | 亚洲精品 在线视频 | 一级黄色大片 | 奇米四色影狠狠爱7777 | 日韩va欧美va亚洲va久久 | 欧美精品中文字幕亚洲专区 | 亚洲蜜桃在线 | 欧美 激情 国产 91 在线 | 日本久久99 | 国产精品视频 | 日韩精品视频免费在线观看 | 伊人电影在线观看 | 18国产精品白浆在线观看免费 | 日韩美女免费线视频 | 精品影院一区二区久久久 | 久久久久久电影 | 中文字幕色在线视频 | 999精品在线 | 九九九免费视频 | 久久老司机精品视频 | 成人国产精品久久久春色 | 久草在线视频在线 | 91在线免费公开视频 | 深夜福利视频在线观看 | 日韩av播放在线 | 亚洲视屏一区 | 久久久精品国产一区二区 | 天天激情综合网 | 日韩v在线| 夜夜躁狠狠躁 | 欧美美女视频在线观看 | 日本色小说视频 | 亚洲精区二区三区四区麻豆 | 久久精品久久综合 | 手机看片1042| 国产精品成人一区二区三区吃奶 | 亚洲一区尤物 | 韩国av免费观看 | 欧美日韩国产精品一区二区三区 | 免费视频你懂的 | 国产精品电影一区 | 国产精品美女久久久久久久久久久 | 国产精品久久久久久吹潮天美传媒 | 国产精品成人久久久久 | 久久精品久久精品久久 | 激情视频免费在线观看 | 国产一级高清视频 | 天天操操| 成人激情开心网 | 99精品视频在线观看免费 | 999久久久国产精品 高清av免费观看 | 久久草草热国产精品直播 | 中文字幕在线播放一区二区 | 81精品国产乱码久久久久久 | 又紧又大又爽精品一区二区 | 17videosex性欧美| 亚洲精品黄色 | 亚洲一二三久久 | 999久久久免费视频 午夜国产在线观看 | 国产在线观看黄 | 中文国产字幕在线观看 | 国产在线观看一区 | 午夜精品久久久99热福利 | 国产自在线 | 久久手机看片 | 国产黑丝一区二区 | 色综合久久中文字幕综合网 | 91最新网址在线观看 | 欧美精选一区二区三区 | 午夜久久影视 | 五月天婷婷视频 | 中文字幕亚洲欧美日韩 | 欧美极品一区二区三区 | 色婷婷av在线 | 亚洲一二区视频 | 91av蜜桃 | 久久精品一二区 | www.com黄| 精品99在线视频 | 香蕉视频免费在线播放 | 国产一区在线视频播放 | 久操中文字幕在线观看 | 91精品国产91久久久久久三级 | 国产免费嫩草影院 | 亚洲年轻女教师毛茸茸 | 超碰在线91| 激情综合网色播五月 | 99免费视频| 亚洲精品高清视频在线观看 | 欧美精品久久人人躁人人爽 | av在观看 | 蜜臀aⅴ国产精品久久久国产 | 探花视频网站 | 国内少妇自拍视频一区 | 国产综合香蕉五月婷在线 | 国产高清无av久久 | 东方av在线免费观看 | 天天躁天天操 | 精品视频999 | 综合久久久久 | 国产精品视频99 | 九九爱免费视频在线观看 | 成片人卡1卡2卡3手机免费看 | 国产亚洲亚洲 | 中文字幕视频网站 | 丁香花在线视频观看免费 | 亚洲一区欧美激情 | 亚州人成在线播放 | 亚州精品天堂中文字幕 | 5月丁香婷婷综合 | 国产精品理论片在线播放 | 久久综合五月 | 色片网站在线观看 | 免费a视频在线 | 国产精品一区免费看8c0m | 中文字幕久久精品一区 | 国产精品24小时在线观看 | 韩日精品在线 | 久久人91精品久久久久久不卡 | 婷婷在线网站 | 久久艹中文字幕 | 在线免费观看麻豆 | 在线看成人片 | 偷拍精偷拍精品欧洲亚洲网站 | 久久久免费观看完整版 | 亚洲精品乱码久久久久久蜜桃不爽 | 欧美日韩中文字幕综合视频 | 丁香婷婷激情五月 | 麻豆国产视频下载 | 日韩大片在线免费观看 | 黄av在线| 四川妇女搡bbbb搡bbbb搡 | 久热免费 | 亚洲狠狠干| 亚洲国产免费看 | 黄色国产在线观看 | 国产日韩欧美在线观看视频 | 美女久久久久久 | japanesexxxhd奶水 国产一区二区在线免费观看 | 国产精品久久久久久久久久久不卡 | 99久久久久久久久久 | 在线免费观看羞羞视频 | 伊人久久国产精品 | 三级黄免费看 | 久草视频在线免费播放 | 一区二区三区在线影院 | 国产在线一区二区三区播放 | 精品久久一区二区 | 夜夜躁日日躁狠狠久久av | 操操日日 | 欧美日韩高清一区二区 | 久久午夜电影 | 丁香综合 | 成人av手机在线 | 中文字幕在线免费观看 | 久久成人午夜视频 | 久久av不卡 | 天天天天爱天天躁 | 欧美午夜a | 欧美一级性生活片 | 国产黄色精品在线观看 | 中文字幕中文中文字幕 | 日韩高清在线不卡 | 久久综合狠狠综合 | 2019中文最近的2019中文在线 | 久久久久日本精品一区二区三区 | 天天爽夜夜爽人人爽曰av | 狠狠插狠狠操 | 国产在线视频一区二区 | 久久一精品 | 亚洲一级电影在线观看 | 国产五月色婷婷六月丁香视频 | 成人在线观看日韩 | 国产精品美女久久久久久久久久久 | 国产精品免费视频网站 | 久久精品人人做人人综合老师 | 夜又临在线观看 | 欧美国产日韩久久 | 国产一区二区在线免费播放 | 一区二区三区精品在线视频 | 国产91精品看黄网站在线观看动漫 | 在线视频欧美亚洲 | 国产免费国产 | 黄色av免费看 | 午夜美女网站 | 亚洲男女精品 | 91九色视频观看 | 国产视频97 | 国产精品久久久久久久久久三级 | 综合国产视频 | 国产精品一区二区在线播放 | 日日日操操| 久久久久久免费视频 | 久久私人影院 | 婷婷九月丁香 | 国产精品欧美日韩在线观看 | aaa日本高清在线播放免费观看 | 亚洲激情在线播放 | 伊人中文字幕在线 | 国产高清视频在线免费观看 | 国产香蕉在线 | 免费在线中文字幕 | 欧美精品一区二区性色 | 亚洲精品中文字幕视频 | av中文字幕免费在线观看 | 免费亚洲精品 | 亚洲电影一级黄 | 一级黄色片在线观看 | 国产精品久久久久久久婷婷 | 国产粉嫩在线 | 国产成人精品av久久 | 国产综合福利在线 | 99热只有精品在线观看 | 久久99精品国产一区二区三区 | 久爱精品在线 | 久久久久伦理电影 | 激情五月视频 | 精品国产美女 | 久久久色 | 久久亚洲美女 | 人人草在线观看 | 深夜国产在线 | 成人黄色片免费看 | 国内外激情视频 | 国产色视频网站 | 色播五月激情综合网 | 激情欧美在线观看 | 国产精品久久久久久久久久久久久 | 国产中年夫妇高潮精品视频 | 成人av影视 | 精品国产1区2区 | 久久在线观看 | 欧美一级艳片视频免费观看 | 久久影院午夜论 | 久久久久免费精品视频 | 九九热免费在线视频 | 亚洲激情六月 | 欧美孕交vivoestv另类 | 久久久国产精品免费 | 五月婷婷综合激情 | 国产不卡在线观看 | 亚洲精品av中文字幕在线在线 | 国产美女精品视频 | 久久福利国产 | 久久精品久久99精品久久 | 99r在线观看 | 91精品欧美 | 九九免费观看视频 | 在线观看免费视频 | 久久这里只有精品视频99 | 亚洲精品视频观看 | 国产成人精品一区二区三区免费 | 777奇米四色 | 亚洲精品免费看 | 91精品久久久久久粉嫩 | 国产v欧美| 日本黄色免费电影网站 | 最新日韩视频在线观看 | 国语精品久久 | 久久精品黄色 | 国产精品视频一二三 | 日韩精品极品视频 | 国产第一页福利影院 | 亚洲国产日韩欧美 | 香蕉在线观看视频 | 999亚洲国产996395 | 亚洲精品网页 | 久久综合桃花 | 九九精品视频在线 | 黄色成人毛片 | 在线观看国产91 | 色噜噜狠狠狠狠色综合久不 | 国产视频不卡一区 | 又色又爽又黄高潮的免费视频 | 国产亚洲婷婷免费 | 99久久久久免费精品国产 | 超碰国产在线播放 | 欧美日韩国产一区二区三区在线观看 | 狠狠操天天干 | 亚洲91精品 | 午夜少妇 | 日韩在线中文字幕视频 | 在线日本看片免费人成视久网 | 成+人+色综合 | 国产韩国精品一区二区三区 | 久久人人爽人人爽人人片av软件 | 精品成人网 | 五月婷婷视频 | 婷婷视频在线观看 | 江苏妇搡bbbb搡bbbb | 午夜精品999 | 欧美日韩一级在线 | 久久久久久久久久亚洲精品 | 亚洲视频每日更新 | 国产韩国精品一区二区三区 | 亚洲黄色影院 | 六月激情婷婷 | av爱干| 播五月综合 | 黄色av电影一级片 | 日韩在线观看影院 | 亚洲视屏一区 | 96久久久 | av资源中文字幕 | 九月婷婷综合网 | 亚洲资源视频 | 97热视频| 色免费在线| 天天婷婷| .国产精品成人自产拍在线观看6 | 久久视频这里有久久精品视频11 | 亚洲成人黄色在线 | 国产精品久久久久久久久久99 | 日韩精品高清视频 | 国产一区二区久久精品 | 在线成人高清电影 | 999视频在线播放 | 国产精品一区电影 | 日韩黄色免费看 | 国产在线视频一区 | 成人a毛片| 四虎在线永久免费观看 | 欧美日韩中文字幕在线视频 | 日韩动漫免费观看高清完整版在线观看 | 日韩专区 在线 | www.xxx.性狂虐 | 久久无码av一区二区三区电影网 | 欧美不卡在线 | 成人欧美亚洲 | 亚洲日韩欧美视频 | 亚洲三级性片 | 日韩在线无 | 欧美一区二区三区特黄 | 黄色软件视频网站 | 精品自拍av | 在线播放亚洲激情 | 悠悠av资源片 | 成片视频免费观看 | 国产精品成人免费 | 青春草免费在线视频 | 亚洲免费高清视频 | av日韩av| 亚洲免费在线观看视频 | 2021国产精品视频 | 丁香九月婷婷 | 国内精品中文字幕 | 久久99亚洲网美利坚合众国 | 日韩av电影国产 | 97综合视频 | 日韩av免费在线看 | 毛片基地黄久久久久久天堂 | 亚洲国产成人精品电影在线观看 | 毛片a级片 | 在线看国产 | 久久99免费观看 | 91精品办公室少妇高潮对白 | 精品国产成人av在线免 | 在线观看精品黄av片免费 | 日本黄色免费播放 | 在线观看91久久久久久 | 久久国内免费视频 | 欧美日韩在线视频一区 | 国产在线观看午夜 | 97超级碰碰碰碰久久久久 | 成人一级 | 久久精品5 | 日韩二区在线播放 | 中文字幕久久亚洲 | 九色视频网 | av成人在线播放 | 日韩欧美在线观看一区二区 | 国产一区二区免费在线观看 | 人人艹视频 | 久久久国产精品人人片99精片欧美一 | 亚洲欧美久久 |