您当前的位置: 首页 > 

java持续实践

暂无认证

  • 2浏览

    0关注

    746博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

黑马十次方项目day07-09之添加好友业务编写

java持续实践 发布时间:2019-02-17 16:39:34 ,浏览量:2

文章目录
      • 一.创建Model
        • 1.创建Friend模型
        • 2. 创建NoFriend模型
      • 二.Controller层
      • 三. FriendService层
      • 四.Dao层

一.创建Model 1.创建Friend模型

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);
}
关注
打赏
1658054974
查看更多评论
立即登录/注册

微信扫码登录

0.0509s