文章目录
一.创建Model
1.创建Friend模型
- 一.创建Model
- 1.创建Friend模型
- 2. 创建NoFriend模型
- 二.Controller层
- 三. FriendService层
- 四.Dao层
Friend 模型使用的是联合主键. 因此在userid和friendid上都加上了@Id的注解
package com.tensquare.friend.pojo;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import java.util.Objects;
import java.io.Serializable;
/**
* 类名称:Friend
* 类描述:交友模块的实体类
*
* @author: taohongchao
* 创建时间:2019/2/17 15:41
* Version 1.0
*/
@Entity
@Table(name = "tb_friend")
@IdClass(Friend.class)
public class Friend implements Serializable{
@Id
private String userid;
@Id
private String friendid;
private String islike;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getFriendid() {
return friendid;
}
public void setFriendid(String friendid) {
this.friendid = friendid;
}
public String getIslike() {
return islike;
}
public void setIslike(String islike) {
this.islike = islike;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Friend friend = (Friend) o;
return Objects.equals(userid, friend.userid) &&
Objects.equals(friendid, friend.friendid) &&
Objects.equals(islike, friend.islike);
}
@Override
public int hashCode() {
return Objects.hash(userid, friendid, islike);
}
@Override
public String toString() {
return "Friend{" +
"userid='" + userid + '\'' +
", friendid='" + friendid + '\'' +
", islike='" + islike + '\'' +
'}';
}
}
2. 创建NoFriend模型
package com.tensquare.friend.pojo;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import java.util.Objects;
import java.io.Serializable;
/**
* 类名称:Friend
* 类描述:交友模块的实体类
*
* @author: taohongchao
* 创建时间:2019/2/17 15:41
* Version 1.0
*/
@Entity
@Table(name = "tb_nofriend")
@IdClass(NoFriend.class)
public class NoFriend implements Serializable {
@Id
private String userid;
@Id
private String friendid;
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getFriendid() {
return friendid;
}
public void setFriendid(String friendid) {
this.friendid = friendid;
}
}
二.Controller层
Controller层,代码如下,主要是先验证用户是否登录,是否为user角色 . 然后是判断添加好友,还是添加非好友. 如果是添加好友,在service层,要判断是否为重复添加好友,如果是重复添加好友,代表添加失败,如果不是重复添加好友, 代表添加成功.
package com.tensquare.friend.controller;
import com.tensquare.friend.service.FriendService;
import entity.Result;
import entity.StatusCode;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* 类名称:FriendController
* 类描述: 交友业务的Controller层
*
* @author: taohongchao
* 创建时间:2019/2/17 15:05
* Version 1.0
*/
@RestController
@CrossOrigin
@RequestMapping("/friend")
public class FriendController {
@Autowired
private HttpServletRequest request;
@Autowired
private FriendService friendService;
@RequestMapping(value = "/like/{friendid}/{type}", method = RequestMethod.PUT)
public Result addFriend(@PathVariable String friendid, @PathVariable String type) {
//验证是否登录, 并且拿到登录用户的id
Claims claims = (Claims) request.getAttribute("claims_user");
if (claims == null) {
//说明当前用户没有user角色
return new Result(false, StatusCode.LOGINERROR, "权限不足");
}
//得到当前登录的用户id
String userId = claims.getId();
//判断是添加好友,还是添加非好友
if (type != null && !"".equals(type)) {
if ("1".equals(type)) {
//添加好友
int flag = friendService.addFriend(userId, friendid);
if (flag == 0) {
return new Result(false, StatusCode.ERROR, "不能重复添加好友");
}
if (flag == 1) {
return new Result(true, StatusCode.OK, "添加成功");
}
} else if ("2".equals(type)) {
//添加非好友
}
return new Result(false, StatusCode.ERROR, "参数异常");
} else {
return new Result(false, StatusCode.ERROR, "参数异常");
}
}
}
三. FriendService层
创建FriendService,内容如下. 在Service层, 拿userid和喜欢的用户的id即friendid去数据库中查询, 如果查询到了数据,那么代表是重复喜欢. 直接返回0 . 如果查询不到数据,代表不是重复喜欢,那么将当前喜欢的数据,添加到数据库中, 接着拿喜欢的用户的id和当前用户的id去数据库查询, 是否有数据,如果有数据,那么代表是相互喜欢,则把islike置为1
package com.tensquare.friend.service;
import com.tensquare.friend.dao.FriendDao;
import com.tensquare.friend.pojo.Friend;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* 类名称:FriendService
* 类描述:交友微服务的服务层
*
* @author: taohongchao
* 创建时间:2019/2/17 15:15
* Version 1.0
*/
@Service
@Transactional(rollbackFor = Exception.class)
public class FriendService {
@Autowired
private FriendDao friendDao;
/**
* 方法名: addFriend
* 方法描述: 添加好友
* 修改日期: 2019/2/17 15:33
* @param userId
* @param friendid
* @return void
* @author taohongchao
* @throws
*/
public int addFriend(String userId, String friendid) {
//先判断userid到friendid是否有数据, 如果有数据,就代表是重复添加好友,返回0
Friend friend = friendDao.findByUseridAndFriendid(userId, friendid);
if (friend != null) {
//有数据,代表重复添加,返回0
return 0;
}
//直接添加好友, 让好友表中userid到friendid的方向type为0
//此时的friend为null,因此直接new一个接收
friend = new Friend();
friend.setUserid(userId);
friend.setFriendid(friendid);
friend.setIslike("0");
friendDao.save(friend);
//判断从friendid到userid是否有数据,如果有,把双方的状态都改为1
if (friendDao.findByUseridAndFriendid(friendid, userId) != null) {
//不为null,代表双方都喜欢了,把双方的islike都改为1
friendDao.updateIsLike("1",userId,friendid);
friendDao.updateIsLike("1",friendid,userId);
}
return 1;
}
}
四.Dao层
dao层的代码如下. 写了两个查询. 第一个查询为通过用户的id和喜欢的人id即friendid,查询联合表中的数据.使用的是jpa的查询. 第二个查询updateIsLike为使用sql语句的查询, 更新喜欢的状态的查询.
package com.tensquare.friend.dao;
import com.tensquare.friend.pojo.Friend;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
/**
* 类名称:FriendDao
* 类描述:交友模块的dao层
*
* @author: taohongchao
* 创建时间:2019/2/17 15:42
* Version 1.0
*/
public interface FriendDao extends JpaRepository {
/**
* 方法名: findByUseridAndFriendid
* 方法描述: 通过当前用户和操作的用户查找
* 修改日期: 2019/2/17 15:48
* @param userid
* @param friendid
* @return com.tensquare.friend.pojo.Friend
* @author taohongchao
* @throws
*/
public Friend findByUseridAndFriendid(String userid, String friendid);
/**
* 方法名: updateIsLike
* 方法描述: 更新喜欢的状态
* 修改日期: 2019/2/17 16:36
* @param islike
* @param userid
* @param friendid
* @return void
* @author taohongchao
* @throws
*/
@Modifying
@Query(value = "update tb_friend set islike=? where userid=? and friendid = ?", nativeQuery = true)
public void updateIsLike(String islike, String userid, String friendid);
}