需求分析
1.注册登陆
使用post请求,登陆路径为/login,传输的数据为username,password,这里就使用json来组织数据。而响应通过一组键值对来返回(msg:true)true表示登陆成功,false表示登陆失败
注册路径为/
2.上传音乐
使用post请求,路径为/uplode,传输的数据为filename(文件名)及文件(.mp3)同时给服务器目录下上传文件
3.删除音乐
使用post请求,路径为/delete,传输数据为音乐id,再通过Session获取user对象来获取userid
4.批量删除音乐
使用post请求,路径为/deletemore,传输数据为音乐id数组,再通过Session获取user对象来获取userid
5.查询音乐
使用post请求,路径为/findmusic,传输数据为查询数据,进行数据库模糊查询
6.添加音乐至喜欢列表
使用post请求,路径为/lovemusic,传输数据为音乐id及用户id并添加信息至数据库
7.查找在喜欢列表中的音乐
使用post请求,路径为/findlove,传输数据为用户id
8.移除喜欢列表中的音乐
使用post请求,路径为/removelove,传输数据为用户id及音乐id,并在数据库中移除对应的数据
数据库设计
1.音乐表
id 音乐id
title 音乐名
singer 歌手名
time 上传时间
url 音乐路径
userid 上传用户id
2.用户表
id 用户id
username 用户名
password 密码
age 年龄
gender 性别
email 邮箱
3.喜欢列表
id 唯一索引id(没有什么意思,对类似数据做区分)
userid 用户id
musicid 音乐id
实体类
Music:
public class Music {
private int id;
private String title;
private String single;
private String time;
private String url;
private int userid;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getSingle() {
return single;
}
public void setSingle(String single) {
this.single = single;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
@Override
public String toString() {
return "Music{" +
"id=" + id +
", title='" + title + '\'' +
", single='" + single + '\'' +
", time='" + time + '\'' +
", url='" + url + '\'' +
", userid=" + userid +
'}';
}
}
User:
public class User {
private int id;
private String username;
private String password;
private int age;
private String gender;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
", email='" + email + '\'' +
'}';
}
}
Dao层
UserDao:
public class UserDao {
public User login(User loginUser) {
User user = null;
Connection connection = null;
PreparedStatement statement = null;
ResultSet ret = null;
try {
connection = DBUtils.getConn();
String sql = "select * from user where username = ? and password = ?";
statement = connection.prepareStatement(sql);
statement.setString(1,loginUser.getUsername());
statement.setString(2,loginUser.getPassword());
ret = statement.executeQuery();
if (ret.next()){
user = new User();
user.setId(ret.getInt("id"));
user.setUsername(ret.getString("username"));
user.setPassword(ret.getString("password"));
user.setEmail(ret.getString("email"));
user.setGender(ret.getString("gender"));
user.setAge(ret.getInt("age"));
}else {
System.out.println("登陆失败");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
DBUtils.getClose(connection,statement,ret);
}
return user;
}
public void insertUser(User user){
Connection con = null;
PreparedStatement pre = null;
try {
con = DBUtils.getConn();
String sql = "insert into user values (null,?,?,?,?,?)";
pre = con.prepareStatement(sql);
pre.setString(1,user.getUsername());
pre.setString(2,user.getPassword());
pre.setString(3,user.getEmail());
pre.setString(4,user.getGender());
pre.setInt(5,user.getAge());
int ret = pre.executeUpdate();
if (ret == 1){
System.out.println("注册成功");
}else {
System.out.println("注册失败");
}
}catch (SQLException e){
e.printStackTrace();
}finally {
DBUtils.getClose(con,pre,null);
}
}
}
MusicDao层:
public class MusicDao {
public int insert(Music music){
Connection con = null;
PreparedStatement pre = null;
try {
con = DBUtils.getConn();
String sql = "insert into music values(null,?,?,now(),?,?)";
pre = con.prepareStatement(sql);
pre.setString(1,music.getTitle(