微服注册中心
使用Spring Cloud Eureka
作为微服务注册中心。
注册中心微服务创建Module(省略)
引入依赖
在
tensquare_parent
中加入Spring Cloud
版本绑定1
2
3
4
5
6
7
8
9
10
11<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M9</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>在
tensquare_eureka
中引入eureka
依赖1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<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">
<parent>
<artifactId>tensquare_parent</artifactId>
<groupId>com.tensquare</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>tensquare_eureka</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
</project>
application.yml
1 | server: |
启动类
1 | package com.tensquare.eureka; |
交友微服务
交友微服务创建Module(省略)
表结构分析
交友微服务的表主要为:好友表和非好友表,其中非好友表类似与黑名单。
tb_friend 好友表
字段名称 | 字段含义 | 字段类型 | 备注 |
---|---|---|---|
userid | 用户ID | 文本 | |
friendid | 好友ID | 文本 | |
islike | 是否互相喜欢 | 文本 | 0:单向喜欢 1:互相喜欢 |
tb_nofriend 非好友表
字段名称 | 字段含义 | 字段类型 | 备注 |
---|---|---|---|
userid | 用户ID | 文本 | |
friendid | 好友ID | 文本 |
需求分析
当用户登陆后在推荐好友列表中点击“心”,表示喜欢此人 ,在数据库
tb_friend
表中插入一条数据,islike
为0当你点击了喜欢过的人,也喜欢了你 , 表示互粉成功!也向
tb_friend
表中插入一条数据,islike
为1 ,并且将你喜欢她的数据islike
也修改为1- 当你点击了不喜欢某人(点击了叉),向
tb_nofriend
添加记录 - 当两个人互粉后,其中一人不喜欢对方了,删除好友表中的记录 ,向非好友表中添加记录
- 用户点击了喜欢,更新用户表中的:
fanscount
表示粉丝数 ,followcount
表示关注数 - 用户删除了好友,更新用户表中的:
fanscount
表示粉丝数 ,followcount
表示关注数
准备工作
引入依赖
1 |
|
application.yml
1 | server: |
启动类
1 | package com.tensquare.friend; |
实体类
好友实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21package com.tensquare.friend.pojo;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import java.io.Serializable;
"tb_friend") (name=
(Friend.class)
public class Friend implements Serializable {
private String userid;
private String friendid;
private String islike;
}非好友实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20package com.tensquare.friend.pojo;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import java.io.Serializable;
"tb_nofriend") (name=
(NoFriend.class)
public class NoFriend implements Serializable {
private String userid;
private String friendid;
}
添加、删除好友
添加好友与非好友
FriendController
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46package 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.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
"friend") (
public class FriendController {
private FriendService friendService;
/**
* 添加好友
*/
"/like/{friendid}/{type}", method = RequestMethod.PUT) (value =
public Result addFriend(@PathVariable String friendid,
@PathVariable String type,
HttpServletRequest request) {
Claims claims = (Claims) request.getAttribute("user_claims");
if (claims == null) {
return new Result(false, StatusCode.ACCESSERROR, "无权访问");
}
//如果是喜欢
if (type.equals("1")) {
if (friendService.addFriend(claims.getId(), friendid) == 0) {
return new Result(false, StatusCode.REPERROR, "已经添加此好友");
}
} else {
//不喜欢
friendService.addNoFriend(claims.getId(),friendid);
}
return new Result(true, StatusCode.OK, "操作成功");
}
}FriendService
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53package com.tensquare.friend.service;
import com.tensquare.friend.dao.FriendDao;
import com.tensquare.friend.dao.NoFriendDao;
import com.tensquare.friend.pojo.Friend;
import com.tensquare.friend.pojo.NoFriend;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
public class FriendService {
private FriendDao friendDao;
private NoFriendDao noFriendDao;
public int addFriend(String userid, String friendid) {
//判断如果用户已经添加了这个好友,则不进行任何操作,返回0
if (friendDao.selectCount(userid, friendid) > 0) {
return 0;
}
//向喜欢表中添加记录
Friend friend = new Friend();
friend.setUserid(userid);
friend.setFriendid(friendid);
friend.setIslike("0");
friendDao.save(friend);
//判断对方是否喜欢你,如果喜欢,将islike设置为1
if (friendDao.selectCount(friendid, userid) > 0) {
friendDao.updateLike(userid, friendid, "1");
friendDao.updateLike(friendid, userid, "1");
}
return 1;
}
/**
* 向不喜欢列表中添加记录
* @param userid
* @param friendid
*/
public void addNoFriend(String userid,String friendid){
NoFriend noFriend=new NoFriend();
noFriend.setUserid(userid);
noFriend.setFriendid(friendid);
noFriendDao.save(noFriend);
}
}FriendDao
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16package 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;
public interface FriendDao extends JpaRepository<Friend, String> {
"select count(f) from Friend f where f.userid=?1 and f.friendid=?2") (
int selectCount(String userid, String friendid);
"update Friend f set f.islike=?3 where f.userid=?1 and f.friendid=?2") (
void updateLike(String userid, String friendid, String islike);
}NoFriendDao
1
2
3
4
5
6
7package com.tensquare.friend.dao;
import com.tensquare.friend.pojo.NoFriend;
import org.springframework.data.jpa.repository.JpaRepository;
public interface NoFriendDao extends JpaRepository<NoFriend, String> {
}
删除好友
FriendController新增方法
1
2
3
4
5
6
7
8
9
10
11
12
13/**
* 删除好友
*/
"/{friendid}", method = RequestMethod.DELETE) (value =
public Result remove(@PathVariable String friendid,
HttpServletRequest request) {
Claims claims = (Claims) request.getAttribute("user_claims");
if (claims == null) {
return new Result(false, StatusCode.ACCESSERROR, "无权访问");
}
friendService.deleteFriend(claims.getId(), friendid);
return new Result(true, StatusCode.OK, "删除成功");
}FriendService新增方法
1
2
3
4
5
6
7
8
9
10
11
12/**
* 删除好友
*
* @param userid
* @param friendid
*/
public void deleteFriend(String userid, String friendid) {
friendDao.deleteFriend(userid, friendid);
friendDao.updateLike(friendid, userid, "0");
addNoFriend(userid, friendid);//向不喜欢表中添加记录
}FriendDao新增方法
1
2
3
"delete from Friend f where f.userid=?1 and f.friendid=?2") (
void deleteFriend(String userid, String friendid);
用户微服务-更新粉丝数和关注数
编写业务逻辑
变更粉丝数
UserController新增方法
1
2
3
4
5
6
7/**
* 增加粉丝数
*/
"/incfans/{userid}/{x}", method = RequestMethod.POST) (value =
public void incFanscount(@PathVariable String userid, @PathVariable int x) {
userService.incFanscount(userid, x);
}UserService新增方法
1
2
3
4
5
6
7
8
9/**
* 更新粉丝数
*
* @param x
*/
public void incFanscount(String userid, int x) {
userDao.incFanscount(userid, x);
}UserDao新增方法
1
2
3
"update User u set u.fanscount=u.fanscount+?2 where u.id=?1") (
void incFanscount(String userid, int x);
变更关注数
UserController新增方法
1
2
3
4
5
6
7
8/**
* 增加关注数
*/
"/incfollow/{userid}/{x}", method = (value =
RequestMethod.POST)
public void incFollowcount(@PathVariable String userid, @PathVariable int x) {
userService.incFollowcount(userid, x);
}UserService新增方法
1
2
3
4
5
6
7
8
9/**
* 更新关注数
*
* @param x
*/
public void incFollowcount(String userid, int x) {
userDao.incFollowcount(userid, x);
}UserDao新增方法
1
2
3
"update User u set u.followcount=u.followcount+?2 where u.id=?1") (
void incFollowcount(String userid, int x);
提供FeignClient
编写UserFeignClient
1 | package com.tensquare.friend.client; |
修改addFriend和deleteFriend逻辑
修改FriendService相关逻辑即可。
1 |
|