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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

音乐播放器详解

發布時間:2024/1/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 音乐播放器详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1.項目設計

?2.創建項目 配置文件

2.1創建項目

?2.2配置文件

2.2.1在application.properties 中添加配置文件

2.2.2在resources 目錄下創建mapper

3.數據庫的設計與實現

?4.交互接口的設計

5.工具包

5.1設置統一響應類

?5.2Constant類

5.3了解 MD5 加密 和?BCrypt?加密

?5.4在Config中 注入?BCryptPasswordEncoder?對象

5.5添加攔截器

5.5.1LoginInterceptor 類

5.5.2AppConfig 類

6.登錄模塊

6.1創建User實體類

6.2使用 Mybatis 操作數據庫

6.2.1?在 UserServer 中添加代碼

6.2.2在 UserMapper 中添加代碼

6.2.3在 UserMapper.xml 中添加代碼

6.3創建 UserConroller 添加代碼

?7.注冊模塊

7.1使用 Mybatis 操作數據庫

7.1.1在?UserServer 中添加代碼

7.1.2在 UserMapper 中添加代碼

7.1.3在 UserMapper.xml 中添加代碼

7.2向 UserController 中添加代碼

8.退出功能

8.1向 UserController 中添加代碼

8.2登錄注冊測試

?9.上傳音樂模塊

9.1創建Music 實體類

9.2使用Mybatis 操作數據庫

9.2.1?在 MusicServer 中添加代碼

9.2.2在 MusicMapper 中添加代碼

9.2.3在 MusicMapper.xml 中添加代碼

9.3向 MusicController 中添加代碼

10.播放音樂模塊

10.1向 MusicController 中添加代碼

?11.刪除音樂模塊

11.1使用 Mybatis 操作數據庫

11.1.1?在 MusicServer 和 CollectServer 中添加代碼

11.1.2在 MusicMapper 和 CollectMapper 中添加代碼

11.1.3在 MusicMapper.xml 和 CollectMapper.xml 中添加代碼

11.2刪除單一音樂功能

11.2.1向 MusicController 中添加代碼

?11.3刪除多個音樂功能

11.3.1向 MusicConroller 中添加代碼

12.收藏音樂模塊

12.1創建 Collect 實體類

12.2使用 Mybatis 操作數據庫

12.2.1在 CollectServer 中添加代碼

12.2.2?在 CollectMapper 中添加代碼

12.2.3在 CollectMapper.xml 中添加代碼

12.3向 CollectControll 中添加代碼

?13.取消收藏音樂模塊

13.1使用 Mybatis 操作數據庫

13.1.1?在 CollectServer 中添加代碼

13.1.2?在 CollectMapper 中添加代碼

13.1.3在 CollectMapper.xml 中添加代碼

13.2向 CollectControll 中添加代碼

?14.主頁面 - 查詢模塊

14.1使用 Mybatis 操作數據庫

14.1.1?在 MusicServer 中添加代碼

14.1.2在 MusicMapper 中添加代碼

14.1.3在 MusicMapper.xml 中添加代碼

14.2向 MusicController 中添加代碼

?15.收藏頁面 - 查詢模塊

15.1?使用 Mybatis 操作數據庫

15.1.1?在 CollectServer 中添加代碼

15.1.2在 CollectMapper 中添加代碼

15.1.3在 CollectMapper.xml 中添加代碼

15.2向 CollectController 中添加代碼


1.項目設計

前端:HTML+CSS+JavaScript+JQuery

后端:Spring MVC+Spring Boot + MyBatis

?2.創建項目 配置文件

2.1創建項目

?2.2配置文件

2.2.1在application.properties 中添加配置文件

配置數據庫

spring.datasource.url=jdbc:mysql://localhost:3306/onlinemusicserver?characterEncoding=utf8&useSSL=true spring.datasource.username=root spring.datasource.password=1234 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

配置MyBatis、文件上傳大小、上傳的路徑

mybatis.mapper-locations=classpath:mapper/**Mapper.xmlspring.servlet.multipart.max-file-size = 15MB spring.servlet.multipart.max-request-size=100MBupload.path=E:/logs/

2.2.2在resources 目錄下創建mapper

mapper下添加 目錄 **.xml 并添加代碼

<?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.example.onlinemusicserver.mapper."對應的Mapper""></mapper>

3.數據庫的設計與實現

用戶表

  • 用戶Id
  • 用戶賬號
  • 用戶密碼
  • 音樂表

  • 音樂Id
  • 音樂名
  • 音樂歌手
  • 上傳時間
  • 存儲地址
  • 用戶Id
  • 收藏表

  • 收藏Id
  • 用戶Id
  • 音樂Id
  • drop database if exists `onlinemusicserver`; create database `onlinemusicserver`;use `onlinemusicserver`;drop table if exists `user`; create table `user`(`userId` int primary key auto_increment,`username` varchar(20) unique,`password` varchar(255) not null );drop table if exists `music`; create table `music`(`musicId` int primary key auto_increment,`title` varchar(100) not null,`author` varchar(20) not null,`uploadtime` timestamp default CURRENT_TIMESTAMP,`path` varchar(1000) not null,`userId` int not null );drop table if exists `collect`; create table `collect`(`collectId` int primary key auto_increment,`userId` int not null,`musicId` int not null );

    ?4.交互接口的設計

    上傳音樂

    請求 POST /music/upload HTTP/1.1{singer, MultipartFile file}響應 {status: 1/-1 (1 為成功, -1 為失敗),message: "對應信息",data: "內容" }

    ?收藏功能

    請求 POST /collect/loveMusic HTTP/1.1{musicId: 1}響應 {status: 1/-1,message: "",data: "" }

    取消收藏功能

    請求 POST /collect/deleteLoveMusic HTTP/1.1{musicId: 1}響應 {status: 1/-1,message: "",data: "" }

    收集頁面 — 空查詢 模糊查詢

    請求 POST /collect/findLoveMusic HTTP/1.1{musicName: "可以為空可以不為空, 為空的時候,查詢所有, 不為空的時候, 模糊查詢"}響應 {status: 1/-1,message: "",data: {{musicId: "",title: "",author: "",uploadtime: "",path: "",userId: "",}...} }

    主頁頁面 — 空查詢 模糊查詢

    請求 POST /music/findMusic HTTP/1.1{musicName: "可以為空可以不為空, 為空的時候,查詢所有, 不為空的時候, 模糊查詢"}響應 {status: 1/-1,message: "",data: {{musicId: "",title: "",author: "",uploadtime: "",path: "",userId: "",}...} }

    刪除單個音樂

    請求 POST /music/delete HTTP/1.1{musicId: ""}響應 {status: 1/-1,message: "",data: "" }

    刪除多個音樂

    請求 POST /music/deleteMore HTTP/1.1{musicId: "1 2 3 4 5"(數組)}響應 {status: 1/-1,message: "",data: "" }

    播放音樂

    請求 GET /music/play?path="..." HTTP/1.1響應 {音樂的字節信息 }

    登錄功能

    請求 POST /user/login HTTP/1.1{username: "",password: ""}響應 {status: 1/-1,message: "",data: "" }

    注銷功能

    請求 GET /user/logout HTTP/1.1響應 HTTP/1.1 200

    注冊功能

    請求 POST /user/register HTTP/1.1{username: "",password: ""}響應 {status: 1/-1,message: "",data: "" }

    5.工具包

    5.1設置統一響應類

    這個類是用來讓響應返回的格式統一的

    public class ResponseBodyMessage<T> {private int status;private String message;private T data;public ResponseBodyMessage(int status, String message, T data) {this.status = status;this.message = message;this.data = data;} }

    ?5.2Constant類

    這個類是用來存儲不變的常量的. 例如設置了session對象 , 是一個字符串. 不變的字符串.將來在其他地方獲取對應的session需要通過這個字符串獲取

    public class Constant {public static final String USER_SESSION_KEY = "user"; }

    5.3了解 MD5 加密 和?BCrypt?加密

    MD5是一個安全的散列算法,輸入兩個不同的明文不會得到相同的輸出值,根據輸出值,不能得到原始的明文,即其過程不可逆; 但是雖然不可逆,但是不是說就是安全的。因為自從出現彩虹表后,這樣的密碼也"不安全"。

    更安全的做法是加鹽或者長密碼等做法,讓整個加密的字符串變的更長,破解時間變慢。

    Bcrypt就是一款加密工具,可以比較方便地實現數據的加密工作。你也可以簡單理解為它內部自己實現了隨機加鹽處理 。我們使用MD5加密,每次加密后的密文其實都是一樣的,這樣就方便了MD5通過大數據的方式進行破解。
    Bcrypt生成的密文是60位的。而MD5的是32位的。Bcrypt破解難度更大。

    MD5使用示例(加鹽)

    添加依賴

    <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.9</version> </dependency>

    ?實現類

    public class MD5Util {private static final String salt = "1q2w3e4r5t";//可任意設置public static String md5(String src) {return DigestUtils.md5Hex(src);}/*** 第一次加密 :模擬前端自己加密,然后傳到后端* @param inputPass* @return*/public static String inputPassToFormPass(String inputPass) {String str = ""+salt.charAt(1)+salt.charAt(3) + inputPass+salt.charAt(5) + salt.charAt(6);return md5(str);}/*** 第二次加密* @param formPass 前端加密過的密碼,傳給后端進行第2次加密* @param salt 后端當中的鹽值* @return*/public static String formPassToDBPass(String formPass, String salt) {String str = ""+salt.charAt(0)+salt.charAt(2) + formPass +salt.charAt(5)+ salt.charAt(4);return md5(str);}/*** 上面兩個函數合到一起進行調用* @param inputPass* @param saltDB* @return*/public static String inputPassToDbPass(String inputPass, String saltDB) {String formPass = inputPassToFormPass(inputPass);String dbPass = formPassToDBPass(formPass, saltDB);return dbPass;} }

    ?BCrypt使用示例

    添加依賴

    <!-- security依賴包 (加密)--> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> </dependency>

    在springboot啟動類添加:

    @SpringBootApplication(exclude ={org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})

    創建BCryptTest測試類:

    public class BCryptTest { public static void main(String[] args) {//模擬從前端獲得的密碼String password = "123456";BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();String newPassword = bCryptPasswordEncoder.encode(password);System.out.println("加密的密碼為: "+newPassword);//使用matches方法進行密碼的校驗boolean same_password_result = bCryptPasswordEncoder.matches(password,newPassword);//返回trueSystem.out.println("加密的密碼和正確密碼對比結果: "+same_password_result);boolean other_password_result = bCryptPasswordEncoder.matches("987654",newPassword);//返回falseSystem.out.println("加密的密碼和錯誤的密碼對比結果: " + other_password_result); }

    運行結果(每次加密結果都不一樣)

    ?5.4在Config中 注入?BCryptPasswordEncoder?對象

    @Configuration public class AppConfig implements WebMvcConfigurer {@Beanpublic BCryptPasswordEncoder getBCryptPasswordEncoder() {return new BCryptPasswordEncoder();} }

    5.5添加攔截器

    5.5.1LoginInterceptor 類

    public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession httpSession = request.getSession(false);if(httpSession != null && httpSession.getAttribute(Constant.USER_SESSION_KEY) != null) {return true;}response.sendRedirect("/login.html");return false;} }

    5.5.2AppConfig 類

    @Configuration public class AppConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {LoginInterceptor loginInterceptor = new LoginInterceptor();registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/**/login.html").excludePathPatterns("/**/css/**.css").excludePathPatterns("/**/images/**").excludePathPatterns("/**/fonts/**").excludePathPatterns("/**/js/**.js").excludePathPatterns("/**/scss/**").excludePathPatterns("/**/user/login").excludePathPatterns("/**/user/register").excludePathPatterns("/**/user/logout");} }

    6.登錄模塊

    6.1創建User實體類

    @Data public class User {private int userId;private String username;private String password; }

    6.2使用 Mybatis 操作數據庫

    這里登錄 需要進行 數據庫的查詢. 查詢是否存在當前 username 的用戶.

    所以要設計, 通過用戶名查找用戶信息?

    6.2.1?在 UserServer 中添加代碼

    public User selectByName(String username) {return userMapper.selectByName(username);}

    6.2.2在 UserMapper 中添加代碼

    /*** 通過用戶名去查找用戶信息, 用來對比登錄信息.* @param username 用戶名* @return 對應用戶名的用戶信息*/User selectByName(String username);

    6.2.3在 UserMapper.xml 中添加代碼

    <select id="selectByName" resultType="com.example.onlinemusicserver.model.User">select * from user where username=#{username};</select>

    6.3創建 UserConroller 添加代碼

  • 首先去數據庫根據用戶名查詢是否存在當前用戶.
  • 如果不存在, 登錄失敗.
  • 如果存在, 用輸入的密碼, 和數據庫中的密碼進行比較, 看是否相等. (注: 數據中的密碼是加密的)
  • 如果不相等, 登錄失敗.
  • 如果相等, 創建 session, 并登錄成功.
  • @RestController @RequestMapping("/user") public class UserController {@Autowiredprivate UserServer userServer;@Autowiredprivate BCryptPasswordEncoder bCryptPasswordEncoder;/*** 用戶登錄* @param user* @param req* @return*/@RequestMapping("/login")public ResponseBodyMessage<User> login(@RequestBody User user, HttpServletRequest req) {User truUser = userServer.selectByName(user.getUsername());if(truUser != null) {System.out.println("登陸成功");System.out.println(user.getPassword() + " " + truUser.getPassword());boolean flg = bCryptPasswordEncoder.matches(user.getPassword(),truUser.getPassword());if(!flg) {return new ResponseBodyMessage<>(-1,"當前賬號密碼錯誤!",user);}HttpSession session = req.getSession(true);session.setAttribute(Constant.USER_SESSION_KEY,truUser);return new ResponseBodyMessage<>(1,"登錄成功!",truUser);}else{System.out.println("登錄失敗");return new ResponseBodyMessage<>(-1,"當前賬號密碼錯誤!",user);}} }

    ?7.注冊模塊

    7.1使用 Mybatis 操作數據庫

    這里注冊, 需要查看當前用戶是否存在, 存在就不能注冊, 通過用戶查找, 這里已經實現.

    注冊一個新用戶還需要 向數據庫中添加一個新的用戶信息

    7.1.1在?UserServer 中添加代碼

    public int addnewUser(User newUser) {return userMapper.addnewUser(newUser);}

    7.1.2在 UserMapper 中添加代碼

    /*** 注冊新的用戶* @param newUser 新用戶信息* @return*/int addnewUser(User newUser);

    7.1.3在 UserMapper.xml 中添加代碼

    <insert id="addnewUser">insert into user(username,password) values (#{username},#{password});</insert>

    7.2向 UserController 中添加代碼

  • 首先查看是否該用戶是否存在
  • 存在, 就注冊失敗
  • 不存在, 就進行注冊, 首先對當前密碼進行加密.
  • 加密之后對這個用戶添加到數據庫中.
  • /*** 注冊用戶* @param user 用戶信息* @return */@RequestMapping("/register")public ResponseBodyMessage<Boolean> register(@RequestBody User user) {User user1 = userServer.selectByName(user.getUsername());if(user1 != null) {return new ResponseBodyMessage<>(-1,"當前用戶已經存在",false);}else {User newUser = new User();newUser.setUsername(user.getUsername());String newPassword = bCryptPasswordEncoder.encode(user.getPassword());newUser.setPassword(newPassword);userServer.addnewUser(newUser);return new ResponseBodyMessage<>(1,"注冊成功",true);}}

    8.退出功能

    這里點擊退出之后, 直接刪除 對應 的 session 即可

    8.1向 UserController 中添加代碼

    直接刪除對應session 為?Constant.USER_SESSION_KEY, 然后跳轉到login.html

    @RequestMapping("/logout")public void userLogout(HttpServletRequest request, HttpServletResponse response) throws IOException {HttpSession session = request.getSession(false);// 攔截器的攔截, 所以不可能出現session為空的情況session.removeAttribute(Constant.USER_SESSION_KEY);response.sendRedirect("login.html");}

    8.2登錄注冊測試

    ?

    ?9.上傳音樂模塊

    9.1創建Music 實體類

    @Data public class Music {private int musicId;private String title;private String author;private Timestamp uploadtime;private String path;private int userId;private String srcPath; }

    9.2使用Mybatis 操作數據庫

    上傳音樂, 要上傳 音樂名, 音樂歌手, 音樂地址, 上傳作者Id. (音樂上傳時間, 已經默認設置了. 不需要傳也可以)

    通過音樂名去查找歌曲, 這里用來對當前歌曲判斷, 是否出現歌曲和歌手都相同的情況.

    9.2.1?在 MusicServer 中添加代碼

    public int insert(String title, String author, String path, int userId){return musicMapper.insert(title,author,path,userId);}public List<Music> selectByTitle(String title) {return musicMapper.selectByTitle(title);}

    9.2.2在 MusicMapper 中添加代碼

    /*** 上傳音樂* @param title 音樂名* @param author 歌手* @param path 對應的地址* @param userId 上傳的用戶Id* @return 返回影響行數*/int insert(String title, String author, String path, int userId);/*** 通過音樂名去查找歌曲.* @param title 音樂名* @return 對應音樂名的所有歌曲*/List<Music> selectByTitle(String title);

    9.2.3在 MusicMapper.xml 中添加代碼

    <insert id="insert">insert into music(title,author,path,userId) values (#{title},#{author},#{path},#{userId}); </insert><select id="selectByTitle" resultType="com.example.onlinemusicserver.model.Music">select * from music where title = #{title}; </select>

    9.3向 MusicController 中添加代碼

    這里首先對session判斷, 判斷是否存在session. (配置攔截器之后就不需要判斷了)

    去數據庫中查詢所有title相同的歌曲. 如果歌曲名相同,歌手也相同, 那么就上傳失敗.

    創建文件夾. 將文件上傳到文件夾中.(文件名是以歌手-歌名創建, 為了防止重名無法讀取)

    然后對該文件, 進行判斷, 判斷是不是 MP3 文件, 注意MP3文件, 字節碼中有 字符"TAG"

    在數據庫中上傳數據. 注意這里的path.

    @RestController @RequestMapping("/music") public class MusicController {@Autowiredprivate MusicServer musicServer;@Value("${upload.path}")public String SAVE_PATH;/*** 上傳音樂* @param singer* @param file* @param request* @return*/@RequestMapping("/upload")public ResponseBodyMessage<Boolean> insertMusic(@RequestParam String singer,@RequestPart("filename") MultipartFile file,HttpServletRequest request,HttpServletResponse response) {// 檢測登錄HttpSession session = request.getSession(false);if (session == null || session.getAttribute(Constant.USER_SESSION_KEY) == null) {System.out.println("當前未登錄!");return new ResponseBodyMessage<>(-1,"請登錄后上傳",false);}// 文件的類型String fileNameAndType = file.getOriginalFilename();// 防止出現重復的相同歌曲和相同歌手.可以出現相同歌曲不同歌手String title = fileNameAndType.substring(0,fileNameAndType.lastIndexOf('.'));// 可能出現多首名稱相同的歌曲, 所以用 ListList<Music> list = musicServer.selectByTitle(title);if(list != null){for(Music music : list) {if(music.getAuthor().equals(singer)){return new ResponseBodyMessage<>(-1,"當前歌手的歌曲已經存在!",false);}}}// 創建文件String path = SAVE_PATH +singer+"-"+fileNameAndType;File dest = new File(path);if(!dest.exists()) {dest.mkdirs();}try {file.transferTo(dest);//return new ResponseBodyMessage<>(1,"上傳成功!",true);} catch (IOException e) {e.printStackTrace();return new ResponseBodyMessage<>(-1,"服務器上傳失敗!",false);}// 這里對是不是 MP3 文件進行判斷. 主要是判斷是否存在 TAG 這個字符File file1 = new File(path);byte[] res = null;try {res = Files.readAllBytes(file1.toPath());if(res == null) {return new ResponseBodyMessage<>(-1,"當前文件不存在",false);}String str = new String(res);if(!str.contains("TAG")) {file1.delete();return new ResponseBodyMessage<>(-1,"當前不是mp3文件",false);}}catch (IOException e){e.printStackTrace();return new ResponseBodyMessage<>(-1,"服務器出現問題", false);}// 在數據庫中上傳數據User user = (User) session.getAttribute(Constant.USER_SESSION_KEY);// 這里傳遞的 path 沒有帶 `.MP3` 后期在前端進行設置String uploadPath = "/music/play?path="+singer+"-"+title;try {int ret = musicServer.insert(title,singer,uploadPath,user.getUserId());if(ret == 1) {response.sendRedirect("/index.html");return new ResponseBodyMessage<>(1,"上傳成功",true);}else {return new ResponseBodyMessage<>(-1,"數據庫上傳失敗",false);}}catch (BindingException | IOException e) {dest.delete();return new ResponseBodyMessage<>(-1,"數據庫上傳失敗",false);}} }

    10.播放音樂模塊

    10.1向 MusicController 中添加代碼

  • 獲取存儲路徑的文件.
  • 讀取文件中的所有字節,讀入內存, 如果不為空, 返回字節碼回去
  • /*** 播放音樂* @param path* @return*/@RequestMapping("/play")public ResponseEntity<byte[]> playMusic(@RequestParam String path){File file = new File(SAVE_PATH + path);byte[] res = null;try {res = Files.readAllBytes(file.toPath());if (res == null) {return ResponseEntity.badRequest().build();}return ResponseEntity.ok(res);} catch (IOException e) {e.printStackTrace();return ResponseEntity.badRequest().build();}}

    ?11.刪除音樂模塊

    11.1使用 Mybatis 操作數據庫

    刪除音樂, 主要是兩個刪除, 一個是刪除單個, 根據單個musicId 刪除. 另一個是刪除多個, 根據多個 musicId 刪除.
    ?
    這里根據 musicId 刪除, 需要去數據庫里查找 是否存在當前 musicId 的歌曲. 存在刪成功, 不存在刪失敗.
    ?
    注意, 刪除的時候, 不僅要刪除 music表里的歌曲. 也要刪除 collect 表里的歌曲

    11.1.1?在 MusicServer 和 CollectServer 中添加代碼

    musicServer

    public Music selectById(int musicId) {return musicMapper.selectById(musicId);}public int deleteById(int musicId) {return musicMapper.deleteById(musicId);}

    ?collectServer

    public int deleteLoveMusicById(int musicId){return collectMapper.deleteLoveMusicById(musicId);}

    11.1.2在 MusicMapper 和 CollectMapper 中添加代碼

    musicMapper

    /*** 通過音樂Id去查找歌曲* @param musicId 音樂Id* @return 查找到的音樂Id*/Music selectById(int musicId);/*** 刪除對應音樂Id的歌曲* @param musicId 音樂Id* @return 返回影響行數*/int deleteById(int musicId);

    collectMapper

    /*** 刪除收藏表中音樂Id為musicId的* @param musicId 音樂Id* @return 返回受影響行數*/int deleteLoveMusicById(int musicId);

    11.1.3在 MusicMapper.xml 和 CollectMapper.xml 中添加代碼

    <select id="selectById" resultType="com.example.onlinemusicserver.model.Music">select * from music where musicId = #{musicId};</select><delete id="deleteById">delete from music where musicId = #{musicId};</delete> <delete id="deleteLoveMusicById">delete from collect where musicId = #{musicId};</delete>

    11.2刪除單一音樂功能

    11.2.1向 MusicController 中添加代碼

  • 首先查看要刪除的 musicId 的音樂是否存在
  • 如果不存在就直接返回刪除失敗
  • 如果存在, 就刪除, 首先刪除數據庫中的記錄, 再刪除服務器上的數據
  • 同時刪除 collect 表中的 musicId 的數據
  • /*** 刪除音樂* @param musicId* @return*/@RequestMapping("/delete")public ResponseBodyMessage<Boolean> deleteMusic(@RequestParam String musicId) {// 1. 檢測音樂是不是存在Music music = musicServer.selectById(Integer.parseInt(musicId));// 2. 不存在直接返回, 存在就刪除if (music == null) {System.out.println("該音樂不存在");return new ResponseBodyMessage<>(-1,"沒有你要刪除的音樂",false);}// 2.1 刪除數據庫中的記錄int ret = musicServer.deleteById(Integer.parseInt(musicId));if(ret == 1) {// 2.2 刪除服務器上的數據int index = music.getPath().lastIndexOf("=");String PathName = music.getPath().substring(index+1);File file = new File(SAVE_PATH + PathName+".mp3");if(file.delete()){collectServer.deleteLoveMusicById(Integer.parseInt(musicId));return new ResponseBodyMessage<>(1,"刪除成功!",true);}else{return new ResponseBodyMessage<>(-1,"服務器刪除失敗!",false);}}else {return new ResponseBodyMessage<>(-1,"數據庫刪除失敗!",false);}}

    ?11.3刪除多個音樂功能

    11.3.1向 MusicConroller 中添加代碼

  • 遍歷傳過來的 musicId的集合. 查詢是否存在當前musicId 的音樂
  • 存在就刪除數據庫中的數據, 然后刪除服務器上的數據, 再刪除 collect 表中的數據
  • 都刪除成功就計數. 如果和傳來的集合的數據總數和計數的總數一樣, 就返回刪除成功
  • /*** 刪除多選音樂* @param musicId* @return*/@RequestMapping("/deleteMore")public ResponseBodyMessage<Boolean> deleteMoreMusic(@RequestParam("musicId[]") List<Integer> musicId) {int sum = 0;for (int i = 0; i < musicId.size(); i++) {Music music = musicServer.selectById(musicId.get(i));if(music == null) {return new ResponseBodyMessage<>(-1,"沒有你要刪除的音樂",false);}int ret = musicServer.deleteById(musicId.get(i));if (ret == 1) {int index = music.getPath().lastIndexOf("=");String PathName = music.getPath().substring(index+1);File file = new File(SAVE_PATH + PathName+".mp3");if(file.delete()){collectServer.deleteLoveMusicById(musicId.get(i));sum += ret;}else{return new ResponseBodyMessage<>(-1,"服務器刪除失敗!",false);}}else {return new ResponseBodyMessage<>(-1,"數據庫刪除失敗!",false);}}if(sum == musicId.size()) {return new ResponseBodyMessage<>(1,"音樂刪除成功!",true);}else{return new ResponseBodyMessage<>(-1,"音樂刪除失敗!",false);}}

    12.收藏音樂模塊

    12.1創建 Collect 實體類

    @Data public class Collect {private int collectId;private int userId;private int musicId; }

    12.2使用 Mybatis 操作數據庫

    首先要通過 musicId 和 userId去查找當前是否存在 collect 表中 在通過 musicId 和 userId 去添加歌曲

    12.2.1在 CollectServer 中添加代碼

    public Collect findCollectMusic(int userId, int musicId) {return collectMapper.findCollectMusic(userId,musicId);}public int insertLoveMusic(int userId, int musicId) {return collectMapper.insertLoveMusic(userId, musicId);}

    12.2.2?在 CollectMapper 中添加代碼

    /*** 查看對應用戶是否已經收藏了該音樂* @param userId 用戶Id* @param musicId 音樂Id* @return 收藏歌單*/Collect findCollectMusic(int userId, int musicId);/*** 收藏音樂* @param userId 用戶Id* @param musicId 音樂Id* @return 返回影響行數*/int insertLoveMusic(int userId, int musicId);

    12.2.3在 CollectMapper.xml 中添加代碼

    <select id="findCollectMusic" resultType="com.example.onlinemusicserver.model.Collect">select * from collect where userId = #{userId} and musicId = #{musicId};</select><insert id="insertLoveMusic">insert into collect(userId,musicId) values(#{userId},#{musicId});</insert>

    12.3向 CollectControll 中添加代碼

  • 通過用戶Id 和 musicId查看是否存在歌曲
  • 如果存在就返回收藏失敗
  • 如果不存在, 就根據用戶id和musicId 添加收藏
  • /*** 點擊收藏的時候, 收藏音樂* @param musicId* @param request* @return*/ @RequestMapping("/loveMusic") public ResponseBodyMessage<Boolean> AddLoveMusic(@RequestParam String musicId, HttpServletRequest request) {int music_Id = Integer.parseInt(musicId);HttpSession session = request.getSession(false);User user = (User) session.getAttribute(Constant.USER_SESSION_KEY);int userId = user.getUserId();Collect collect = collectServer.findCollectMusic(userId,music_Id);if (collect != null) {return new ResponseBodyMessage<>(-1, "當前已經收藏了",false);}else{int ret = collectServer.insertLoveMusic(userId,music_Id);if(ret == 1) {return new ResponseBodyMessage<>(1, "收藏成功!",true);}else{return new ResponseBodyMessage<>(-1,"收藏失敗",false);}} }

    ?13.取消收藏音樂模塊

    13.1使用 Mybatis 操作數據庫

  • 根據userId 和 musicId 刪除歌曲
  • 13.1.1?在 CollectServer 中添加代碼

    public int deleteLoveMusic(int userId,int musicId){return collectMapper.deleteLoveMusic(userId,musicId);}

    13.1.2?在 CollectMapper 中添加代碼

    /*** 刪除用戶收藏的對應的音樂Id* @param userId 用戶Id* @param musicId 音樂Id* @return 受影響行數*/int deleteLoveMusic(int userId,int musicId);

    13.1.3在 CollectMapper.xml 中添加代碼

    <delete id="deleteLoveMusic">delete from collect where userId = #{userId} and musicId = #{musicId}</delete>

    13.2向 CollectControll 中添加代碼

  • 這里登錄之后去收藏頁面,去刪除歌曲.
  • 通過 musicId 和 userId 去刪除歌曲
  • /*** 刪除收藏的音樂* @param musicId* @param request* @return*/@RequestMapping("/deleteLoveMusic")public ResponseBodyMessage<Boolean> deleteLoveMusic(@RequestParam String musicId,HttpServletRequest request) {HttpSession session = request.getSession(false);if(session == null) {return new ResponseBodyMessage<>(-1,"當前未登錄",false);}User user = (User) session.getAttribute(Constant.USER_SESSION_KEY);int userId = user.getUserId();int ret = collectServer.deleteLoveMusic(userId,Integer.parseInt(musicId));if(ret == 1) {return new ResponseBodyMessage<>(1,"取消收藏成功!",true);}else{return new ResponseBodyMessage<>(-1,"取消收藏失敗!",false);}}

    ?14.主頁面 - 查詢模塊

    14.1使用 Mybatis 操作數據庫

  • 這里有空查詢和模糊查詢兩種數據庫操作
  • 空查詢 不帶 name
  • 模糊查詢帶name
  • 14.1.1?在 MusicServer 中添加代碼

    public List<Music> findMusic() {return musicMapper.findMusic();}public List<Music> findMusicByName(String name) {return musicMapper.findMusicByName(name);}

    14.1.2在 MusicMapper 中添加代碼

    /*** 查找所有的歌曲* @return 所有的歌曲*/List<Music> findMusic();/*** 支持模糊查詢的歌曲.* @param name 部分歌曲名* @return 對應所有的歌曲*/List<Music> findMusicByName(String name);

    14.1.3在 MusicMapper.xml 中添加代碼

    <select id="findMusic" resultType="com.example.onlinemusicserver.model.Music">select * from music;</select><select id="findMusicByName" resultType="com.example.onlinemusicserver.model.Music">select * from music where title like concat('%',#{name},'%');</select>

    14.2向 MusicController 中添加代碼

    這里判斷前端傳來的 name是否為空

  • 不為空, 進入模糊查詢
  • 為空, 進入空查詢
  • /*** 支持模糊查詢, 支持空查詢* @param name* @return*/@RequestMapping("/findMusic")public ResponseBodyMessage<List<Music>> findMusic(@RequestParam(required = false) String name) {List<Music> list = null;if(name != null) {list = musicServer.findMusicByName(name);}else {list = musicServer.findMusic();}return new ResponseBodyMessage<>(1,"查詢完畢!",list);}

    ?15.收藏頁面 - 查詢模塊

    15.1?使用 Mybatis 操作數據庫

  • 這里有空查詢和模糊查詢兩種數據庫操作
  • 空查詢 不帶 name
  • 模糊查詢帶name
  • 15.1.1?在 CollectServer 中添加代碼

    public List<Music> findLoveMusicByUserId(int userId){return collectMapper.findLoveMusicByUserId(userId);}public List<Music> findLoveMusicByNameAndUserId(String name,int userId){return collectMapper.findLoveMusicByNameAndUserId(name,userId);}

    15.1.2在 CollectMapper 中添加代碼

    /*** 查找用戶收藏的所有音樂* @param userId 用戶Id* @return 返回查詢到的所有音樂*/List<Music> findLoveMusicByUserId(int userId);/*** 查找用戶收藏音樂中名字帶有 name的音樂* @param name 部分名字* @param userId 用戶Id* @return 返回查詢到的所有音樂*/List<Music> findLoveMusicByNameAndUserId(String name,int userId);

    15.1.3在 CollectMapper.xml 中添加代碼

    <select id="findLoveMusicByUserId" resultType="com.example.onlinemusicserver.model.Music">select m.* from collect c,music m where m.musicId = c.musicId and c.userId = #{userId};</select><select id="findLoveMusicByNameAndUserId" resultType="com.example.onlinemusicserver.model.Music">select m.* from collect c,music m where m.musicId = c.musicId and c.userId = #{userId} and m.title like concat('%',#{name},'%');</select>

    15.2向 CollectController 中添加代碼

    這里判斷前端傳來的 name是否為空

  • 不為空, 進入模糊查詢
  • 為空, 進入空查詢
  • /*** 1. 空查詢, 查找所有的收藏音樂* 2. 模糊查詢, 查詢包含部分 musicName 的所有收藏音樂* @param musicName* @param request* @return*/ @RequestMapping("findLoveMusic") public ResponseBodyMessage<List<Music>> findLoveMusic(@RequestParam(required = false) String musicName,HttpServletRequest request) {HttpSession session = request.getSession(false);if(session == null) {return new ResponseBodyMessage<>(-1,"當前未登錄",null);}User user = (User) session.getAttribute(Constant.USER_SESSION_KEY);int userId = user.getUserId();List<Music> list = null;if(musicName == null) {list = collectServer.findLoveMusicByUserId(userId);}else{list = collectServer.findLoveMusicByNameAndUserId(musicName,userId);}return new ResponseBodyMessage<>(1,"查詢成功!",list); }

    ?

    總結

    以上是生活随笔為你收集整理的音乐播放器详解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    免费精品国产 | 国内精品久久久久影院男同志 | 日本韩国精品一区二区在线观看 | 日韩av在线一区二区 | 色综合久久久久久久 | 欧洲激情在线 | 成人黄色av免费在线观看 | 亚洲精品国偷自产在线99热 | 精品亚洲成a人在线观看 | 黄色片亚洲 | 在线观看免费国产小视频 | 美女视频黄免费网站 | 00av视频 | 日韩一区二区三区在线观看 | 久久久久久久久久福利 | 五月婷婷网站 | 中文字幕av最新更新 | 欧美成人在线免费观看 | zzijzzij亚洲日本少妇熟睡 | 中文字幕视频网 | 久草精品在线播放 | 国产成人一区二区三区影院在线 | 成人小视频免费在线观看 | 成人在线免费观看网站 | av在线一级 | a电影在线观看 | 国产这里只有精品 | 97在线精品国自产拍中文 | 免费视频色 | 国产视频九色蝌蚪 | 久久狠狠一本精品综合网 | 婷婷看片 | 亚洲激情 | 色av网站 | 91麻豆操| 天天色天天上天天操 | 久久天天躁夜夜躁狠狠躁2022 | 日本久久久久 | 久久精品一二三 | 黄色看片 | 国产国产人免费人成免费视频 | 亚洲精品久 | 91丨九色丨蝌蚪丨老版 | 精品久久91 | 激情综合婷婷 | 精品一区 在线 | 色婷婷成人网 | 国产免费精彩视频 | av在线播放不卡 | 久久精品国产第一区二区三区 | 久久精品国产一区二区 | 久久9999久久免费精品国产 | 日韩理论电影在线观看 | 国产伦精品一区二区三区免费 | 久久久久免费精品 | 91最新视频 | 久久福利在线 | 久久高视频 | 超碰在线97观看 | 国产一及片 | 69国产盗摄一区二区三区五区 | av高清免费在线 | 在线播放 一区 | 69夜色精品国产69乱 | 在线免费成人 | 涩涩爱夜夜爱 | 日韩一区二区三免费高清在线观看 | 国产精品久久99综合免费观看尤物 | 久久久久久免费视频 | 精品在线播放 | 国产亚洲婷婷免费 | 亚洲精品美女久久久久网站 | 精品久久久久国产免费第一页 | 免费av片在线| 中文字幕日韩av | 国产成人久久精品77777 | 日本成人黄色片 | 色综合久久88色综合天天免费 | 亚洲 欧美日韩 国产 中文 | 一区二区中文字幕在线观看 | 成人一区二区三区在线观看 | 国产99色 | 91资源在线免费观看 | 国产精品美女免费视频 | 国产最新在线视频 | 五月开心婷婷 | 国产成人一级电影 | 成人免费看黄 | 视频国产 | 久久久国产精品麻豆 | 天天射天天操天天色 | 黄色成年 | 爱情影院aqdy鲁丝片二区 | 国产午夜精品一区二区三区 | 亚洲精品国精品久久99热一 | 97香蕉久久国产在线观看 | 国产免费高清视频 | 三级av免费观看 | 伊人午夜视频 | 日韩午夜三级 | 美州a亚洲一视本频v色道 | 九九热视频在线播放 | 超碰人在线 | 爱爱av网 | 亚洲国产中文字幕在线观看 | 色婷婷导航 | 亚洲理论片 | 91九色视频国产 | 日韩专区在线观看 | 亚洲日韩中文字幕在线播放 | 国产69精品久久99不卡的观看体验 | 天天激情在线 | 中文字幕久久精品亚洲乱码 | 中文字幕乱偷在线 | 久久99这里只有精品 | 缴情综合网五月天 | 黄色精品免费 | aaawww| 精品国产视频在线观看 | 日韩sese | www色网站| 色婷婷久久一区二区 | 国产在线不卡 | 日韩91在线 | 国产色婷婷 | 亚洲人成人在线 | 伊人天天色 | 国产精品免费一区二区三区在线观看 | 四虎小视频 | 国产免费又爽又刺激在线观看 | 97在线观看视频国产 | 在线观看免费视频你懂的 | 在线免费视频a | 最新av网站在线观看 | 久久免费视频观看 | 午夜视频在线观看一区二区三区 | 九九久 | 97精品国自产拍在线观看 | 最新色视频 | 美女视频黄的免费的 | 亚洲男男gⅴgay双龙 | 精品视频中文字幕 | 亚洲精品456在线播放乱码 | 天天爱天天操天天射 | 久草在线资源网 | 日韩精品免费一区二区 | 国内视频在线观看 | 久久久亚洲网站 | 特级西西444www高清大视频 | 国产97色在线 | 欧美a在线免费观看 | 日韩av黄| 亚洲国产99 | 精品久久久久久久久久 | 国产在线视频一区二区 | 狠狠狠狠狠狠天天爱 | 日韩电影久久 | 日韩免费二区 | 婷婷伊人综合 | 欧美日本高清视频 | 日本黄色免费看 | 九九九九免费视频 | 日韩午夜高清 | 午夜精品久久久99热福利 | 成人免费看黄 | 特级西西444www大精品视频免费看 | 久久人人艹 | 国产日韩中文字幕在线 | 国产色视频网站 | 久久精品三级 | 中文字幕一区二区三区在线视频 | 蜜臀av夜夜澡人人爽人人 | 97超碰资源总站 | 国产成人精品一二三区 | 久久人人爽爽 | www.狠狠操| 日韩一区二区三区视频在线 | 日韩高清在线一区二区 | 久草在线费播放视频 | 黄色av观看| 激情综合五月 | 五月激情片 | 国产在线观看你懂得 | 国产亚洲精品久久19p | 成人黄色毛片视频 | 国产成人免费网站 | 日本最新高清不卡中文字幕 | 中文字幕在线色 | 日韩精品一区二区三区免费观看视频 | 久久久久久久av麻豆果冻 | 日韩在线精品一区 | 伊人视频 | 日韩精品久久久久 | 少妇av网 | 尤物一区二区三区 | 成人午夜电影久久影院 | 久久国产一区 | 久久精品九色 | 国产精品一区二区在线看 | 99免费| av高清不卡 | 亚洲高清视频在线观看 | 久久久国产精品久久久 | 久久色网站 | 五月天综合色激情 | 久久在线免费 | av在线免费在线观看 | 欧美精品国产综合久久 | 激情五月伊人 | 欧美三级高清 | 国产无套视频 | 久久这里只有精品1 | 亚洲视频资源在线 | 96av视频| 99热精品免费观看 | 免费情趣视频 | 国产精品美女999 | 国内成人综合 | 日本乱视频 | 最新日韩电影 | 黄色资源在线 | 久草影视在线观看 | 亚洲激情综合网 | 色天天综合网 | 欧美激情va永久在线播放 | 欧美一级片免费 | 亚洲精品美女在线 | 色综合久久久久网 | 国产在线高清 | 四虎成人av | 久久a热6| 中文字幕国产精品一区二区 | 国产女人18毛片水真多18精品 | 久久久国产电影 | 91高清完整版在线观看 | 色网免费观看 | 国产精品成人自产拍在线观看 | 亚洲综合色站 | 中文字幕av免费观看 | 91精品在线免费视频 | www日韩在线 | 亚洲成av人影片在线观看 | 18女毛片| 蜜臀久久99静品久久久久久 | 521色香蕉网站在线观看 | 国产999精品久久久久久麻豆 | 开心色婷婷 | avsex| 探花系列在线 | 久草在线99| 亚洲欧洲成人精品av97 | 久草免费在线 | 波多野结衣电影一区二区三区 | 亚洲精品国产精品久久99热 | 激情视频综合网 | 国产无遮挡猛进猛出免费软件 | 6080yy午夜一二三区久久 | 国产免费亚洲高清 | 欧美精品小视频 | 亚洲精品久久久久久国 | 日韩高清精品免费观看 | 国产成人精品999在线观看 | 99精品欧美一区二区 | 在线观看视频一区二区三区 | 免费毛片一区二区三区久久久 | 国产综合视频在线观看 | a级国产乱理论片在线观看 伊人宗合网 | 韩日在线一区 | 国产成人精品亚洲日本在线观看 | 亚洲激情 欧美激情 | 人人澡人人澡人人 | 色成人亚洲网 | 99九九99九九九视频精品 | 91麻豆精品国产91久久久久久久久 | 99亚洲国产 | 国产五月色婷婷六月丁香视频 | 香蕉视频久久久 | 欧美日韩国产精品爽爽 | 久久看片网站 | 日日爽视频 | 一区二区三区四区五区在线 | 丁香婷婷综合五月 | 麻豆精品视频在线 | 午夜精品久久久久久99热明星 | 日韩在线观看视频一区二区三区 | 男女啪啪免费网站 | 1024久久 | 欧洲成人av | 日韩综合精品 | 韩国av电影在线观看 | 在线小视频国产 | 日韩av成人在线 | 色 免费观看 | 欧美精品久久久久久久久老牛影院 | 久久99精品久久久久蜜臀 | 一区二区三区av在线 | 日韩精品中文字幕一区二区 | 欧美一区在线观看视频 | 欧美成人精品xxx | 91黄色在线观看 | 成年人在线视频观看 | 91夫妻自拍 | 亚洲美女免费精品视频在线观看 | 婷婷激情小说网 | 国产色小视频 | 菠萝菠萝蜜在线播放 | 国产精品免费在线播放 | 久草在线视频首页 | 亚洲精品男人天堂 | 天天操天天干天天爽 | 久久人人精品 | 啪啪免费观看网站 | 国产精品美女久久久久久久网站 | 国产精品96久久久久久吹潮 | 国产女人18毛片水真多18精品 | 国产精品久久久久一区二区三区共 | 国产一级免费av | 亚洲国产精品传媒在线观看 | 天天爽人人爽 | 久久免费国产视频 | 久久精品99国产精品 | 日韩小视频| 国产区在线视频 | 国产精品综合av一区二区国产馆 | 欧美日韩大片在线观看 | 久草在线视频首页 | 特级毛片在线免费观看 | www日韩高清| av在线成人 | 天天草天天 | 欧美一级片在线观看视频 | 91在线影院| 91传媒在线播放 | 成年人在线观看网站 | 一区二区三区久久 | www.超碰| 99久久精品久久亚洲精品 | 精品欧美一区二区精品久久 | 成人h在线观看 | 国产一级淫片免费看 | 日韩二区在线播放 | 精品国产三级 | 欧美日韩国产色综合一二三四 | 精品福利国产 | 国产九九九精品视频 | 91丨九色丨蝌蚪丨对白 | 午夜精品久久久久久久爽 | 91在线视频免费 | 久草视频在 | 中文字幕二区 | aaa黄色毛片| 夜夜澡人模人人添人人看 | 成人免费在线视频观看 | 日韩欧美网站 | 免费在线黄网 | 91热视频| 国产精品成人国产乱 | 在线观看黄网站 | 人人添人人 | 日本成人免费在线观看 | 在线观看黄色小视频 | 天天射天天干天天爽 | 一区中文字幕 | 久草在线资源免费 | 玖玖在线精品 | 国产精品11 | 久久综合狠狠综合 | 日韩三级在线 | 视频成人免费 | 中文字幕在线人 | 久久久视频在线 | a在线v | 国产精品白丝av | 国产69精品久久久久久久久久 | 狠狠色丁香婷婷综合久小说久 | 亚洲另类视频 | 四虎免费在线观看视频 | 激情网五月天 | 免费成人黄色片 | 日韩成人精品在线观看 | 中文字幕综合在线 | 美女福利视频一区二区 | 开心色激情网 | 久久综合狠狠综合久久综合88 | 免费三级av | 国产精选视频 | 欧美色图东方 | 91九色在线视频观看 | 久久精品91久久久久久再现 | 亚洲国产高清在线 | 亚洲国产99 | 中国成人一区 | 天天操天天曰 | 操操综合 | 日韩黄色免费电影 | 久久久久国产精品免费网站 | avwww在线观看 | av综合在线观看 | 麻豆传媒视频观看 | 成人理论电影 | 久草在线视频首页 | 久精品在线 | 精品久久综合 | 亚洲一区二区高潮无套美女 | 在线看小早川怜子av | zzijzzij日本成熟少妇 | 亚洲精品视频在线观看免费 | 人人澡人人添人人爽一区二区 | 狠狠狠狠狠狠干 | 欧美日韩精品在线免费观看 | 麻豆视频免费看 | 久久爱影视i| 久久久久国产a免费观看rela | 亚洲精品久久久久久久蜜桃 | 亚洲精欧美一区二区精品 | 国产免费久久av | 中文字幕免费高 | 五月天综合网站 | 99亚洲精品 | 成人国产精品久久久久久亚洲 | 日本论理电影 | 国产a国产a国产a | 欧美一级性生活 | 亚洲高清av在线 | 日韩专区视频 | 97精品国产97久久久久久免费 | 热精品 | 久久综合狠狠综合久久综合88 | 成人三级黄色 | 色射爱 | 日日夜夜精品免费观看 | 欧洲不卡av | 麻豆视频网址 | 丁香婷婷基地 | 911国产精品 | 国产精品入口久久 | 国产精品视频999 | 2019中文在线观看 | 中文字幕你懂的 | 黄色网址在线播放 | 国产在线精品二区 | 亚洲精品中文在线资源 | 亚洲成aⅴ人片久久青草影院 | 国产999视频在线观看 | 久草视频在线免费看 | 免费麻豆视频 | 91热在线| 久久久久久久久久久久久久电影 | 中文字幕视频免费观看 | 黄色三级在线看 | 高清免费av在线 | 黄网站大全 | 国产一区视频在线 | 国产精品久久久久久久av电影 | 叶爱av在线 | 欧美日韩精品久久久 | 丁香婷婷在线 | 亚洲精品美女在线观看 | 麻豆果冻剧传媒在线播放 | 国产亚洲免费观看 | 99久久精品免费看国产 | 久久综合中文字幕 | 亚洲成av人片在线观看www | 黄在线免费看 | 在线香蕉视频 | 自拍超碰在线 | 中文字幕一区二区三区四区 | 丁香视频五月 | 伊人色**天天综合婷婷 | 99精品乱码国产在线观看 | 日日夜夜免费精品 | 在线观看中文字幕亚洲 | 一区二区精品在线 | 成人91在线观看 | 久久1电影院 | 免费成人短视频 | 久久久精品一区二区三区 | 在线观看岛国 | 久久久www成人免费毛片 | 高清国产午夜精品久久久久久 | 久久久久免费精品视频 | 日本精品久久久一区二区三区 | 91精品久久久久久综合乱菊 | 日韩一区二区三区免费电影 | 色婷婷欧美 | 成年人视频免费在线播放 | 精品一区二区免费视频 | 97超碰资源 | 成人毛片一区 | 欧美一二三在线 | 一区 在线 影院 | 毛片播放网站 | 高清有码中文字幕 | 欧美日本三级 | 久久伊99综合婷婷久久伊 | 久久视频网| 中国一区二区视频 | 国产一区在线视频 | 久久久午夜剧场 | 国产亚洲精品久久久久久久久久久久 | 超碰在线人人97 | 一本一道久久a久久精品蜜桃 | 一区在线免费观看 | 久久免费毛片视频 | 中文字幕av日韩 | 国产中年夫妇高潮精品视频 | 免费黄色网止 | 99精品视频在线观看 | 欧美日韩视频免费 | 成 人 黄 色 视频 免费观看 | 久久1区| 午夜精品一区二区三区在线观看 | 久久久久久久久久久免费视频 | 中文在线a天堂 | 精品久久久久久综合 | 精品一区在线 | 91精品资源 | 国产在线观看地址 | 麻豆视频成人 | 日本中文乱码卡一卡二新区 | 久久人人爽人人爽人人片av软件 | 99久久日韩精品视频免费在线观看 | 精品一区精品二区高清 | 91视频麻豆视频 | 欧美黑人性爽 | 日韩va欧美va亚洲va久久 | 色综合在| 97在线观视频免费观看 | 97碰在线| 国精产品999国精产品视频 | 福利视频午夜 | 欧美少妇影院 | 日本大片免费观看在线 | 久久人人爽人人爽人人片av软件 | 97超碰伊人| 国产欧美日韩精品一区二区免费 | av在线播放一区二区三区 | 中文字幕在线视频第一页 | 亚洲欧美日本国产 | 日韩欧美综合视频 | 亚洲天天草 | 久久久天天操 | 国产精品福利午夜在线观看 | 97精品视频在线播放 | 人人干人人搞 | 欧美午夜视频在线 | 2023av在线 | 深夜免费小视频 | 在线观看色视频 | 国产丝袜美腿在线 | 亚洲男男gaygayxxxgv| 日本福利视频在线 | 久久在线观看视频 | 免费精品人在线二线三线 | 欧美久久久久久久久中文字幕 | 国产亚洲精品久久久久久久久久 | 中文在线亚洲 | 美女网站在线免费观看 | 国产精品免费观看网站 | 在线 成人 | 国产精品久久久久久一区二区 | 91av精品| 中文字幕在线观看三区 | 久久超碰网 | 精品国产美女在线 | 五月天综合激情网 | 久草网在线| 中文字幕乱码日本亚洲一区二区 | 国产乱对白刺激视频在线观看女王 | 免费观看版 | 久久超级碰 | 日韩欧美视频 | 成人免费观看视频网站 | 久久精品一二区 | 久久伊人操| 婷婷日日 | 九热精品 | 久影院| 欧美久久99 | 丁香5月婷婷 | 在线中文字幕网站 | 日韩有码在线播放 | 久久免费视频这里只有精品 | 久久人人爽人人 | 四虎在线观看网址 | 日韩久久网站 | 国产精品aⅴ| 黄色小网站免费看 | 在线亚洲人成电影网站色www | 99亚洲国产 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 青青河边草手机免费 | 在线va网站 | 97人人爽人人 | 中文字幕在线视频一区 | 久久久免费看视频 | 免费在线观看一级片 | 亚洲综合激情小说 | 国产精品久久久久久久免费观看 | 国产一区二区在线观看免费 | 久久精品之 | 91精品国产乱码 | 久草在线视频网站 | 婷婷丁香六月天 | 成年人视频在线 | 超碰999 | 国产亚洲精品久久久久久无几年桃 | 狠狠干夜夜爽 | 欧美国产精品一区二区 | 久久tv | 777xxx欧美 | 91精品国产自产老师啪 | 婷婷九月激情 | 欧洲一区精品 | www.伊人色.com | 免费日韩一级片 | 婷婷综合伊人 | 91麻豆国产 | 蜜臀av.com | 国产亚洲精品久久久久久大师 | 好看的国产精品视频 | 欧美一级片免费 | 国产精品1000 | 久久草网 | 美女亚洲精品 | 国产录像在线观看 | 在线看av网址 | 精品久久久久久久久久岛国gif | 高清不卡毛片 | 伊人手机在线 | 四虎影视成人永久免费观看视频 | 日韩国产精品一区 | 91精品国产91p65 | 亚洲成人资源在线观看 | 精品国产aⅴ麻豆 | 制服丝袜天堂 | 97电影院在线观看 | 免费看av在线 | 干狠狠| 欧美夫妻性生活电影 | 天堂在线免费视频 | 伊人影院av | 久久影视一区 | 色大片免费看 | 久久久av电影 | 九九九视频在线 | 亚洲专区在线播放 | 亚洲国产欧美在线人成大黄瓜 | 久久久影片| 欧美日本一区 | 色七七亚洲影院 | 91av资源网 | 九九九九免费视频 | 日韩福利在线观看 | 精品黄色在线 | 国产一二区免费视频 | 九九热有精品 | 在线视频 一区二区 | 国产高清在线观看av | 欧洲精品在线视频 | 福利一区二区在线 | 丁香花在线视频观看免费 | 国产精品福利一区 | 天天色天天骑天天射 | 91精品办公室少妇高潮对白 | 欧美极品裸体 | 成人在线免费小视频 | 久久最新网址 | 在线观看免费色 | 人人草在线观看 | 婷婷丁香在线视频 | 亚洲精品在线免费播放 | 国产精品一二三 | 中文字幕视频一区 | 国产毛片久久久 | 日韩免费av网址 | 99av国产精品欲麻豆 | 7777xxxx | 久久精品一区二区三区四区 | 国产午夜一区 | 亚洲精品在线观看av | 久久久国产精品人人片99精片欧美一 | 国产一二三精品 | 国产黄色片在线 | 国产九九在线 | 亚洲成人精品影院 | 天天爱天天操 | 久久观看免费视频 | 欧美久久久久久久久 | 波多野结依在线观看 | 91福利视频在线 | 高潮毛片无遮挡高清免费 | 999国产在线 | 久产久精国产品 | 亚洲精品在线播放视频 | 操老逼免费视频 | 久草电影网 | 精品国产一区二区在线 | 特级黄色片免费看 | 欧美性极品xxxx做受 | 亚洲欧洲精品一区二区 | 久久久久久看片 | 午夜三级理论 | 国产精品美女视频网站 | 国产无限资源在线观看 | 亚洲精品国产精品国自产在线 | 精品999久久久 | 狠狠色丁香婷婷综合基地 | 白丝av在线 | 欧美激情精品久久久久久 | 五月天欧美精品 | 91精品国产麻豆国产自产影视 | 日韩视频欧美视频 | 精品五月天 | 国产69精品久久久久久 | 在线色亚洲 | 亚洲第一区在线播放 | 91九色porny蝌蚪视频 | 狠狠五月婷婷 | 日韩理论电影在线观看 | 狠狠色狠狠色合久久伊人 | 日日天天 | 中文字幕在线免费看 | 久久综合婷婷 | 丁香激情综合久久伊人久久 | 国产精品久久久久久久久久新婚 | 国产亚洲精品久久久久久移动网络 | 国产在线精 | 久久免费看毛片 | 丁香综合五月 | 亚洲一区视频免费观看 | 黄色国产在线 | 国产福利小视频在线 | 91亚洲网 | 国产一级做a| 久草 | 国产精品网红直播 | 国产探花| 久久人人97超碰com | 色婷婷精品大在线视频 | 久久综合亚洲鲁鲁五月久久 | 亚洲国产精品一区二区久久,亚洲午夜 | 九九九九九国产 | 黄色大片免费网站 | 91在线视频免费播放 | 视频二区在线 | 久久午夜网| 亚洲精品国产高清 | 久久久亚洲网站 | 亚洲精品啊啊啊 | 日韩成人免费在线电影 | 九九综合九九 | 在线黄频 | 国产探花| 国产精品视频最多的网站 | 人人爽久久久噜噜噜电影 | 中文字幕黄色网 | 日本中文字幕观看 | 99精品乱码国产在线观看 | 在线观看国产v片 | 天天天天综合 | 亚洲视频电影在线 | 国产日产在线观看 | 国产色道 | 91麻豆免费看 | 久久久一本精品99久久精品66 | 五月婷婷丁香六月 | 国产精品视频全国免费观看 | 国产精品免费看久久久8精臀av | 免费看的黄色网 | 国产二区视频在线观看 | 天天射天天操天天色 | 丁香在线观看完整电影视频 | a√国产免费a | 婷婷激情欧美 | 国产精品免费久久久久 | aa一级片 | 亚洲国产精品一区二区久久,亚洲午夜 | 日本精品视频在线播放 | 18国产精品白浆在线观看免费 | 中文字幕在线播放日韩 | 国产生活一级片 | 日韩精品一区二区三区免费视频观看 | 国产高清视频在线播放一区 | 国产中文自拍 | 亚洲高清在线视频 | 欧美视频18| 韩国三级一区 | 中文字幕在线观看三区 | 欧美激精品 | 人人超碰免费 | 久久99网站 | 久久久久久高潮国产精品视 | 丁香六月天婷婷 | aaa毛片视频| 亚洲国产剧情av | 高清av不卡 | 国产在线视频一区二区三区 | 日韩国产在线观看 | 91精品国产99久久久久 | 久久黄页| 国产91精品看黄网站在线观看动漫 | 欧美激情视频在线免费观看 | 国产亚洲成av人片在线观看桃 | 久草在线最新 | 免费在线视频一区二区 | 国产在线2020 | av成人在线观看 | 99久久综合国产精品二区 | 最近中文字幕大全中文字幕免费 | 91精品国产91热久久久做人人 | 黄色小网站免费看 | 日韩成人免费在线电影 | 色成人亚洲 | 亚洲三级在线播放 | 日日干av| 国产精品av电影 | 天天天干天天天操 | 色视频网站在线观看一=区 a视频免费在线观看 | 国产69久久精品成人看 | 超碰97成人 | 九色精品免费永久在线 | 蜜桃麻豆www久久囤产精品 | 这里只有精品视频在线观看 | 欧美韩日视频 | 精品毛片在线 | 国产小视频网站 | 国产视频欧美视频 | 蜜桃视频在线视频 | 国产99久久九九精品免费 | 久久免费视频播放 | 99在线免费视频观看 | 91在线porny国产在线看 | 日韩高清观看 | 在线亚洲成人 | 99综合久久 | 五月开心网| 国产成人av| 亚洲aⅴ在线观看 | 国产视频资源在线观看 | 在线观看www视频 | 成人av网站在线观看 | 欧美日韩在线精品 | 亚洲国产一二三 | 欧美a在线免费观看 | 玖玖国产精品视频 | 日韩精品专区在线影院重磅 | 色97在线| 中文字幕第| 国产高清av免费在线观看 | 丁香激情综合久久伊人久久 | 亚洲综合小说 | 天天射综合网视频 | 在线播放一区二区三区 | 国精产品永久999 | 日韩免费高清在线 | 国产成人黄色av | 国产一区免费 | 婷婷夜夜 | 热re99久久精品国产66热 | 又爽又黄又无遮挡网站动态图 | 超碰在线资源 | 成人黄色在线电影 | 日韩欧美视频在线免费观看 | 国产成人a亚洲精品v | 日韩区欠美精品av视频 | 亚洲欧美国产精品18p | 天天操人| 国产精品女人网站 | 91精品在线看 | 亚洲成人精品在线观看 | 日韩高清免费无专码区 | 伊人在线视频 | 一级α片免费看 | 三级黄色免费片 | av综合网址 | 色综合天天色综合 | 91自拍91 | 国产美女无遮挡永久免费 | 性色在线视频 | 天天操天天添 | 伊人成人久久 | 国产精品女主播一区二区三区 | 91一区二区三区在线观看 | 五月天伊人 | 一区二区丝袜 | 伊人在线视频 | 日韩1级片 | 波多野结衣视频一区二区 | 狠狠色丁婷婷日日 | 五月天激情综合网 | 久久久久一区二区三区四区 | 人人讲 | 极品嫩模被强到高潮呻吟91 | 国产v在线观看 | 九九热免费精品视频 | 综合色在线| av在线播放亚洲 | 日韩啪视频 | 亚洲男男gaygay无套同网址 | 国产偷v国产偷∨精品视频 在线草 | 日韩精品免费一区二区三区 | 激情综合一区 | 亚洲永久字幕 | 99视频精品免费视频 | 天天操偷偷干 | 国产精品成人品 | 精品字幕在线 | 久草在线免费新视频 | 亚洲欧美在线观看视频 | 欧美日韩一区二区三区在线观看视频 | 国产精品一区二区久久精品爱微奶 | 精品久久在线 | 国产精品剧情在线亚洲 | 在线看一区二区 | 免费看在线看www777 | 超碰免费97 | 99色免费视频 | 综合成人在线 | 日韩高清在线一区 | 亚洲一区二区三区在线看 | 日日夜夜添 | 精品久久福利 | 久久免费中文视频 | av千婊在线免费观看 | 国产亚洲精品久久久久久电影 | 欧美最猛性xxxxx免费 | 激情网站| 亚洲精品456在线播放 | 国产做aⅴ在线视频播放 | 99国产精品久久久久久久久久 | 午夜精品久久久久久久99无限制 | 久久av影视 | 中文字幕在线播放一区二区 | 天天干天天干天天色 | 精品久久久久亚洲 | 亚洲一级黄色大片 | 国产美女免费 | 草久久精品 | 久色网| 91精品伦理 | 日韩欧美一区二区三区视频 | 99在线高清视频在线播放 | 97福利在线 | 夜色成人网| 91大神在线观看视频 | 日本中文字幕在线一区 | 手机看片1042 | 亚洲综合网 | 青青河边草免费观看 | 精品欧美一区二区三区久久久 | 在线导航av | 五月婷av | 中文字幕在线看视频国产中文版 | 久久久天堂 | 亚洲污视频 | 黄色中文字幕 | 亚洲精选在线观看 | 综合伊人久久 | 亚洲激情免费 | 国产高清黄 | 久久天天操 | 成人黄色国产 | 欧美性视频网站 | 亚洲精品视频免费在线 | 女人18毛片90分钟 | 日韩大片免费在线观看 | 亚洲成av人片在线观看无 | free,性欧美| av片免费播放 | 亚洲精品国产欧美在线观看 | 亚洲欧美观看 | 91亚洲精品久久久久图片蜜桃 | 在线观看国产麻豆 | 欧美精品v国产精品v日韩精品 | 一本一道久久a久久精品 | 福利区在线观看 | 国产精品一区二区av影院萌芽 | 亚洲一区二区91 | se视频网址| 在线国产一区二区 | 国产精品视频在线看 | 片黄色毛片黄色毛片 | bayu135国产精品视频 | 久草在线免费新视频 | 麻豆成人精品 | 成人免费一区二区三区在线观看 | 亚洲欧美日韩一区二区三区在线观看 | 在线看国产视频 | 日韩中文字幕免费电影 | 午夜精品久久久久久中宇69 | 最新日韩视频在线观看 | 日本系列中文字幕 | 日本黄色黄网站 | 欧美日韩91 | 久久99热这里只有精品国产 | 国产一区二区在线观看视频 | 国产久草在线 |