整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          使用IDEA搭建一個簡單的SpringBoot項(xiàng)目-詳細(xì)過程

          近開始學(xué)習(xí)SpringBoot,和大家分享一下簡單的SpringBoot項(xiàng)目搭建。

          1.File->new->project;

          2.選擇“Spring Initializr”,點(diǎn)擊next;(jdk1.8默認(rèn)即可)

          3、.完善項(xiàng)目信息,組名可不做修改,項(xiàng)目名可做修改;最終建的項(xiàng)目名為:demo,src->main->java下包名會是:com->springboot_learn->test;點(diǎn)擊next;

          4.Web下勾選Spring Web Start,(網(wǎng)上創(chuàng)建springboot項(xiàng)目多是勾選Web選項(xiàng),而較高版本的Springboot沒有此選項(xiàng),勾選Spring Web Start即可,2.1.8版本是Spring Web);SQL勾選:MySQL Driver,JDBC API 和 MyBatis Framework三項(xiàng);點(diǎn)擊next;

          5.選擇項(xiàng)目路徑,點(diǎn)擊finish;打開新的窗口;

          6.剛創(chuàng)建好的項(xiàng)目目錄結(jié)構(gòu)

          7.點(diǎn)擊右側(cè)的Maven,點(diǎn)擊設(shè)置(扳手圖標(biāo))進(jìn)行項(xiàng)目Maven倉庫的配置;

          8.(1)選擇本地Maven路徑;(2)勾選配置文件后邊的選項(xiàng),然后修改為本地Maven的配置文件,它會根據(jù)配置文件直接找到本地倉庫位置;

          9.配置完后,如果沒有自動導(dǎo)包,可以點(diǎn)擊左上角重新導(dǎo)包按鈕,或者呢個下載按鈕,選擇下載所有源文件和文檔

          10.在templates文件下新建index.html頁面,作為啟動的初始頁面;

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>hello</title>
          </head>
          <body>
              你好!初學(xué)者,我是SpringBoot的簡單啟動頁面!
          </body>
          </html>

          11.在com.springboot_learn.test下新建controller文件夾,在controller文件夾下建一個簡單的helloController類;(Controller類要添加@Controller注解,項(xiàng)目啟動時,SpringBoot會自動掃描加載Controller)

          package com.springboot.demo.controller;
          
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RestController;
          
          /**
           * @author 
           * @version 1.0
           * @date 2021/09/07 10:50 上午
           */
          
          /**
           * Web層:就是Controller層,實(shí)現(xiàn)與web前端的交互。
           */
          @RestController
          @RequestMapping("/ceshi")
          public class HelloWorldController {
              @RequestMapping("/index")
              public String sayHello(){
                  System.out.println("測試開始");
                  return "index";
              }
          
          }
          

          12.在resources文件夾下application中先配置DataSource基本信息,application文件有兩種文件格式,一種是以.properties為后綴,一種是以.yml為后綴的,兩種配置方式略有差別,。右鍵application文件選擇Refact,選擇Rename,將后綴改為yml;

          spring:
            datasource:
              name: test #數(shù)據(jù)庫名
              url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false #url
              username: root  #用戶名
              password: 123456  #密碼
              # 升級后的mysql驅(qū)動類,Driver位置由com.mysql.jdbc.Driver 變?yōu)閏om.mysql.cj.jdbc.Driver
              driver-class-name: com.mysql.cj.jdbc.Driver #數(shù)據(jù)庫鏈接驅(qū)動
          
          mybatis:
            mapper-locations: classpath:mapper/*.xml  #配置映射文件
            type-aliases-package: package com.springboot.demo.bean #配置實(shí)體類

          13.運(yùn)行項(xiàng)目啟動類TestApplication.java

          14.在瀏覽器中輸入localhost:8080,回車顯示初始的index界面;到這項(xiàng)目的初步搭建已經(jīng)完成,下面可以下一些簡單的業(yè)務(wù)邏輯,比如從數(shù)據(jù)庫獲取信息,登錄之類的簡單功能;

          15.在進(jìn)行下一步編寫時,我們先來鏈接一下數(shù)據(jù)庫;點(diǎn)擊右側(cè)的Database,點(diǎn)“加號”,新建數(shù)據(jù)庫鏈接;

          16.填寫數(shù)據(jù)庫相關(guān)信息,點(diǎn)擊Test Connection;需要在本地先搭建Mysql數(shù)據(jù)庫,database建立test,創(chuàng)建user表.

          17.連接成功后,顯示數(shù)據(jù)庫信息,user表的基本信息也顯示了,下面就照這個來了;

          19.SpringBoot項(xiàng)目大概分為四層:

          (1)DAO層:包括XxxMapper.java(數(shù)據(jù)庫訪問接口類),XxxMapper.xml(數(shù)據(jù)庫鏈接實(shí)現(xiàn));(這個命名,有人喜歡用Dao命名,有人喜歡用Mapper,看個人習(xí)慣了吧)

          (2)Bean層:也叫model層,模型層,entity層,實(shí)體層,就是數(shù)據(jù)庫表的映射實(shí)體類,存放POJO對象;

          (3)Service層:也叫服務(wù)層,業(yè)務(wù)層,包括XxxService.java(業(yè)務(wù)接口類),XxxServiceImpl.java(業(yè)務(wù)實(shí)現(xiàn)類);(可以在service文件夾下新建impl文件放業(yè)務(wù)實(shí)現(xiàn)類,也可以把業(yè)務(wù)實(shí)現(xiàn)類單獨(dú)放一個文件夾下,更清晰)

          (4)Web層:就是Controller層,實(shí)現(xiàn)與web前端的交互。

          依照上面四層,創(chuàng)建目錄結(jié)構(gòu)如下:

          20.代碼展示:

          (1)在application配置文件中添加MyBatis配置:

          spring:
            datasource:
              name: test #數(shù)據(jù)庫名
              url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&useSSL=false #url
              username: root  #用戶名
              password: 1qaz2wsx  #密碼
              # 升級后的mysql驅(qū)動類,Driver位置由com.mysql.jdbc.Driver 變?yōu)閏om.mysql.cj.jdbc.Driver
              driver-class-name: com.mysql.cj.jdbc.Driver #數(shù)據(jù)庫鏈接驅(qū)動
          
          mybatis:
            mapper-locations: classpath:mapper/*.xml  #配置映射文件
            type-aliases-package: package com.springboot.demo.bean #配置實(shí)體類

          (2)pom.xml文件配置信息

          <?xml version="1.0" encoding="UTF-8"?>
          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
              <modelVersion>4.0.0</modelVersion>
              <parent>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-parent</artifactId>
                  <version>2.1.6.RELEASE</version>
                  <relativePath/> <!-- lookup parent from repository -->
              </parent>
              <groupId>com.example</groupId>
              <artifactId>test</artifactId>
              <version>0.0.1-SNAPSHOT</version>
              <name>test</name>
              <description>Demo project for Spring Boot</description>
          
              <properties>
                  <java.version>1.8</java.version>
              </properties>
          
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-jdbc</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-thymeleaf</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-web</artifactId>
                  </dependency>
                  <dependency>
                      <groupId>org.mybatis.spring.boot</groupId>
                      <artifactId>mybatis-spring-boot-starter</artifactId>
                      <version>2.1.0</version>
                  </dependency>
          
                  <dependency>
                      <groupId>mysql</groupId>
                      <artifactId>mysql-connector-java</artifactId>
                      <version>8.0.11</version>
                      <scope>runtime</scope>
                  </dependency>
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-test</artifactId>
                      <scope>test</scope>
                  </dependency>
              </dependencies>
          
              <build>
                  <plugins>
                      <plugin>
                          <groupId>org.springframework.boot</groupId>
                          <artifactId>spring-boot-maven-plugin</artifactId>
                      </plugin>
                  </plugins>
              </build>
          
          </project>
          

          (3)Bean實(shí)體類,依據(jù)數(shù)據(jù)庫表,生成set和get方法;

          package com.springboot.demo.bean;
          
          /**
           * @author 
           * @version 1.0
           * @date 2021/09/07 4:27 下午
           */
          /**
           * Bean層:也叫model層,模型層,entity層,實(shí)體層,就是數(shù)據(jù)庫表的映射實(shí)體類,存放POJO對象;
           * 依據(jù)數(shù)據(jù)庫表,生成set和get方法;
           */
          public class UserBean {
              private int id;
              private String name;
              private String password;
          
              public int getId() {
                  return id;
              }
          
              public void setId(int id) {
                  this.id = id;
              }
          
              public String getName() {
                  return name;
              }
          
              public void setName(String name) {
                  this.name = name;
              }
          
              public String getPassword() {
                  return password;
              }
          
              public void setPassword(String password) {
                  this.password = password;
              }
          }
          

          (4)DAO層訪問數(shù)據(jù)庫接口文件:

          package com.springboot.demo.mapper;
          
          import com.springboot.demo.bean.UserBean;
          /**
           * @author 
           * @version 1.0
           * @date 2021/09/07 4:41 下午
           */
          /**
           * DAO層訪問數(shù)據(jù)庫接口文件
           */
          public interface UserMapper {
          
              UserBean getInfo(String name,String password);
          
          }
          

          5)DAO層訪問數(shù)據(jù)庫實(shí)現(xiàn)文件(需在resource包下創(chuàng)建mapper文件夾,然后再創(chuàng)建一個UserMapper.xml.在application配置文件中mybatis:mapper-locations:對應(yīng)的就是該文件地址),注意<mapper>標(biāo)簽的namespace屬性要填寫 訪問數(shù)據(jù)庫接口類文件路徑:

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
          <mapper namespace="com.springboot.demo.mapper.UserMapper">
          
              <select id="getInfo" parameterType="String" resultType="com.springboot.demo.bean.UserBean">
                  SELECT * FROM user WHERE name = #{name} AND password = #{password}
              </select>
          
          </mapper>

          (6)Service層業(yè)務(wù)接口類編寫:

          package com.springboot.demo.service;
          import com.springboot.demo.bean.UserBean;
          import org.springframework.stereotype.Repository;
          
          /**
           * @author 
           * @version 1.0
           * @date 2021/09/07 4:29 下午
           */
          
          /**
           * Service層:也叫服務(wù)層,業(yè)務(wù)層,包括XxxService.java(業(yè)務(wù)接口類),XxxServiceImpl.java(業(yè)務(wù)實(shí)現(xiàn)類);
           * (可以在service文件夾下新建impl文件放業(yè)務(wù)實(shí)現(xiàn)類,也可以把業(yè)務(wù)實(shí)現(xiàn)類單獨(dú)放一個文件夾下,更清晰
           */
          
          @Repository
          public interface UserService {
          
              UserBean loginIn(String name,String password);
          
          }
          

          (7)Service層業(yè)務(wù)實(shí)現(xiàn)類編寫,注意要注解@Service,注入DAO:

          package com.springboot.demo.impl;
          import com.springboot.demo.bean.UserBean;
          import com.springboot.demo.mapper.UserMapper;
          import com.springboot.demo.service.UserService;
          
          /**
           * @author 
           * @version 1.0
           * @date 2021/09/07 4:48 下午
           */
          /**
           * Service層業(yè)務(wù)實(shí)現(xiàn)類編寫,注意要注解@Service,注入DAO:
           */
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.stereotype.Service;
          
          @Service
          public class UserServiceImpl implements UserService {
          
              //將DAO注入Service層
              @Autowired
              private UserMapper userMapper;
          
              @Override
              public UserBean loginIn(String name, String password) {
                  return userMapper.getInfo(name,password);
              }
          }
          

          8)項(xiàng)目啟動類要添加注解@MapperScan項(xiàng)目啟動時掃描mapper接口,否則會報錯找不到mapper文件:

          package com.springboot.demo;
          
          import org.mybatis.spring.annotation.MapperScan;
          import org.springframework.boot.SpringApplication;
          import org.springframework.boot.autoconfigure.SpringBootApplication;
          
          @SpringBootApplication
          @MapperScan("com.springboot.demo.mapper")
          
          public class DemoApplication {
              public static void main(String[] args) {
                  SpringApplication.run(DemoApplication.class);
              }
          
          }
          

          (9)編寫測試類,看是否能成功 訪問數(shù)據(jù)庫,獲取數(shù)據(jù)庫信息:

          package com.springboot.demo;
          
          
          import com.springboot.demo.bean.UserBean;
          import com.springboot.demo.service.UserService;
          import org.junit.Test;
          import org.junit.runner.RunWith;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.boot.test.context.SpringBootTest;
          import org.springframework.test.context.junit4.SpringRunner;
          
          @RunWith(SpringRunner.class)
          @SpringBootTest
          public class TestApplicationTests {
          
              @Autowired
              UserService userService;
          
              @Test
              public void contextLoads() {
                  UserBean userBean = userService.loginIn("springboot", "123456");
                  System.out.println("該用戶ID為:");
                  System.out.println(userBean.getId());
              }
          }

          (10) controller層,注意添加@controller注解,注入Service服務(wù):

          package com.springboot.demo.controller;
          
          /**
           * @author 
           * @version 1.0
           * @date 2021/09/07 4:58 下午
           */
          
          import com.springboot.demo.bean.UserBean;
          import com.springboot.demo.service.UserService;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.RequestMethod;
          
          @Controller
          public class LoginController {
          
              //將Service注入Web層
              @Autowired
              UserService userService;
          
              @RequestMapping("/login")
              public String show(){
                  return "login";
              }
          
              @RequestMapping(value = "/loginIn",method = RequestMethod.POST)
              public String login(String name,String password){
                  UserBean userBean = userService.loginIn(name,password);
                  if(userBean!=null){
                      return "success";
                  }else {
                      return "error";
                  }
              }
          }

          (11)html文件:

          login.html

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>login</title>
          </head>
          <body>
              <form role="form" action = "/loginIn" method="post">
                  賬號:<input type="text" id="name" name = "name"> <br>
                  密碼:<input type="password" id = "password" name = "password"> <br>
                  <input type="submit" id = "login" value = "login">
              </form>
           
          </body>
          </html>

          success.html

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>success</title>
          </head>
          <body>
              <h1>登錄成功!</h1>
          </body>
          </html>

          error.html

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>error</title>
          </head>
          <body>
              <h1>登錄失敗!</h1>
          </body>
          </html>

          21.先運(yùn)行測試類,看是否成功獲取數(shù)據(jù)庫信息:

          22.運(yùn)行TestApplication.java文件,啟動項(xiàng)目,無任何WARN警告信息,進(jìn)入瀏覽器輸入localhost:8080/login




          項(xiàng)目到這里就算完美結(jié)束了,對自己說一聲,加油,努力學(xué)習(xí)。

          分享是人們與社會產(chǎn)生聯(lián)系的一種方式,本質(zhì)上是一種互利行為,在互利中,選擇、鞏固和發(fā)展彼此的社會關(guān)系。完全沒有分享,社會將不能成立。分享是構(gòu)成社會的要素之一。

          
          <div id="app">
          	{{msg}}
          </div>
          
          <script src="/js/vue.js"></script>
          <script>
          	const app = new Vue({
          		el:'#app',
          		data:{
          			msg: 'study Vue 2323322'
          		}
          	})
          </script>
          

          html中輸入vue后回車自動生成以上代碼

          步驟:1,找到設(shè)置setting中File-->Settings-->Editor-->Live Templates

          新建快捷生成操作名稱


          在vue中新建vue快捷名稱


          使用位置為html中


          完成

          dea插件介紹

          作為一枚程序員,平時最常用的ide就是IntelliJ IDEA。平時會用到各種各樣的插件,通過插件的使用,提高自己的開發(fā)效率。

          • idea具有全局性,安裝好插件后,對idea生效,所有的工程均能找到。
          • idea使用的便捷性,在固定的菜單中,或者右鍵即可看到該插件的使用入口
          • 專注度高,展示出來的內(nèi)容均是自己需要關(guān)注的,不需要關(guān)注的就不會展示。可以專注思考自己要怎么用。
          • 和系統(tǒng)解耦,插件可以給給開發(fā)提效,卻不會去占用項(xiàng)目的空間位置。

          為什么開發(fā)idea插件?

          目前已有插件并不能真的完全滿足自己的需求。舉個簡單的例子,比如,最近在用mybatis plus的generator,配置完成之后,運(yùn)行main方法,就可以生成ORM代碼。新建一個工程,就需要把代碼給拷貝過去,然后再重新配置一下,再生成。

          缺點(diǎn):

          • 過于繁瑣,每次都需要去把代碼給拷貝過去,然后運(yùn)行。
          • 冗余,這個代碼對于實(shí)際的業(yè)務(wù)來說,沒有任何意義。
          • 不便捷,代碼只能生成在固定地方,否則就得自己去更改配置。然后自己再重復(fù)性的去復(fù)制過去。
          • 不便捷,代碼放在固定地方,在比較大的工程結(jié)構(gòu)中,自己需要去找。如果新加入的開發(fā)不熟悉,并不知道這個在哪,低效。

          基于以上思考,就需要開發(fā)插件來和系統(tǒng)解耦,達(dá)到提效的效果。

          開發(fā)插件的場景需要準(zhǔn)備些什么

          • 首先你需要有一定的開發(fā)經(jīng)驗(yàn),新手的話,還是需要先學(xué)習(xí)語言基礎(chǔ),idea的使用等。
          • 有需求場景,知道自己接下來要開發(fā)的是一個什么東西,圍繞著需求不斷地去完善插件
          • 大致看下idea plugin sdk的開發(fā)手冊,對它能干什么有一個大致的了解。
          • 如果要使用gradle開發(fā),需要對gradle有一定的使用能力。

          開發(fā)插件流程(最簡單的使用場景)

          新建項(xiàng)目(使用的最新的idea,創(chuàng)建流程稍有不一樣)

          配置gradle

          最新版的插件開發(fā)使用的是kts的gradle插件。基本用法是一樣的,不同的是寫法有稍微一點(diǎn)不一樣。

          一些常用的配置

          依賴

          //頂層結(jié)構(gòu)
          dependencies {
              implementation("org.springframework.boot:spring-boot-starter:2.7.0")
          }
          
          // 一般的gradle是 
          compile group: 'org.springframework.boot', name: 'spring-boot-starter', version: '2.7.0'
          

          將依賴打進(jìn)jar包中(不打進(jìn)去,插件如果有用到依賴,就會無法使用,找不到類)

          // 頂層結(jié)構(gòu)
          tasks.jar.configure {
              duplicatesStrategy = org.gradle.api.file.DuplicatesStrategy.INCLUDE
              from(configurations.runtimeClasspath.get().filter { it.name.endsWith("jar")}.map { zipTree(it) })
          }
          

          將倉庫改為阿里云倉庫

          // 頂層結(jié)構(gòu)
          repositories {
              mavenLocal()
              maven("https://maven.aliyun.com/nexus/content/repositories/central/")
              mavenCentral()
          }
          

          創(chuàng)建第一個action

          import com.intellij.openapi.actionSystem.AnAction;
          import com.intellij.openapi.actionSystem.AnActionEvent;
          import com.intellij.openapi.project.Project;
          import com.intellij.openapi.ui.Messages;
          
          public class MyAction extends AnAction {
            @Override
              public void actionPerformed(@NotNull AnActionEvent e) {
                  Project project = e.getProject();
                  Messages.showMessageDialog(project, "this is message content", "this message title", Messages.getInformationIcon());
              }
          }
          

          將action配置到plugin中

          src -> main -> resource -> META-INF -> plugin.xml
          
          <idea-plugin>
            <!-- 插件的id,該id是唯一的,插件的坐標(biāo)是一維的,只有一個id。這點(diǎn)和maven的不太一樣,maven的是二維坐標(biāo) -->
           <id>com.geek45.plugin-demo</id>
            <!-- 插件名字-->
            <name>plugin demo</name>
            <!-- 插件的描述,有固定格式,這里可以寫html代碼 -->
            <description><![CDATA[
                  <h1> Demo plugin </h1>
                  測試插件 <br>
                  點(diǎn)擊插件可以彈出一個彈窗
                  <p>
                  plugin demo <br />
                  <b>
                        <a href="https://www.geek45.com">Website</a> |
                        <a href="https://github.com/xiaopangzhi795/plugin-demo">GitHub</a> |
                    </b>
                  </p>
            ]]>
            </description>
            <!-- 這里是插件依賴管理,和gradle的依賴不一回事,可以依賴其他的插件 -->
            <depends>com.intellij.modules.platform</depends>
            <!-- 拓展管理,后續(xù)的ui頁面會在這里配置,暫時用不到 -->
            <extensions defaultExtensionNs="com.intellij">
          
            </extensions>
            <!-- action配置,按鈕展示在哪里需要在這配置 -->
            <actions>
             <action class="com.geek45.action.MyAction" id="myAction" text="action" description="this is action demo" >
                <!-- 將插件放在Tools菜單中的first位置。 -->
                <add-to-group group-id="ToolsMenu" anchor="first" />
              </action>
            </actions>
            
          </idea-plugin>
          

          打包

          gradle中,運(yùn)行jar命令,就可以把插件打成jar包,在項(xiàng)目根目錄中,有build目錄,libs中會有打好的jar包。

          plugin中,選擇本地安裝,然后選擇剛才打好的jar包,就可以把插件安裝到自己的idea中。

          本地運(yùn)行

          打包安裝太麻煩了,可以選擇本地運(yùn)行的方式進(jìn)行調(diào)試。

          選擇runIde,就可以本地運(yùn)行。該命令支持debug運(yùn)行,debug可以打斷點(diǎn)。

          運(yùn)行該命令,會啟動一個新的idea,該idea中已經(jīng)安裝了你開發(fā)的插件。在該idea中可以直接使用插件,使用過程中,可以在項(xiàng)目里面斷點(diǎn)跟進(jìn)。

          新的idea和正常idea操作是一樣的,可以打開一個測試code,來測試你的插件是否正常運(yùn)行。

          運(yùn)行效果

          來源:blog.csdn.net/smile_795/article/details/125470136


          主站蜘蛛池模板: 亚洲丰满熟女一区二区哦| 日本无码一区二区三区白峰美| 中文字幕精品一区| 国产精品毛片a∨一区二区三区| 一区二区三区伦理高清| 黄桃AV无码免费一区二区三区| 精品一区二区三区高清免费观看| 精品日产一区二区三区手机| 日韩毛片基地一区二区三区| 国产精品无码一区二区三区免费| 一区五十路在线中出| 无码少妇一区二区性色AV| 欧美日韩精品一区二区在线视频 | 日韩一区二区三区四区不卡| 精品国产一区二区二三区在线观看| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 99久久综合狠狠综合久久一区| 麻豆亚洲av熟女国产一区二| 国产成人一区二区三区免费视频| 中文字幕AV一区中文字幕天堂| 无码人妻一区二区三区兔费| 成人午夜视频精品一区| 精品熟人妻一区二区三区四区不卡 | 国产vr一区二区在线观看| 无码一区二区三区| 国产精品538一区二区在线| 久久精品一区二区国产| 国产主播一区二区三区在线观看| 亚洲福利视频一区| 日本一区二区三区在线视频 | aⅴ一区二区三区无卡无码| 国产成人精品视频一区二区不卡| 国产视频一区在线播放| 精品一区精品二区制服| 国产在线精品一区二区夜色| 精品国产一区二区三区www| 国产suv精品一区二区33| 一区二区三区四区精品视频| 久久se精品动漫一区二区三区| 国精品无码一区二区三区在线| 国产成人精品一区二区秒拍 |