baa3.昨天一个基本的springboot程序已经启动,今天开始写程序包里面的内容
·我的domain包下的Sm2user.java文件下的代码
import javax.persistence.*;
@Table(name = "sm2user")
@Entity
public class Sm2user {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long usersm2id;
private String usersm2uname;
private String usersm2upass;
private Integer usersm2perm;
private String friends;
public String getFriends() {
return friends;
}
public void setFriends(String friends) {
this.friends = this.friends+friends;
}
public long getUsersm2id() {
return usersm2id;
}
public void setUsersm2id(long usersm2id) {
this.usersm2id = usersm2id;
}
public String getUsersm2uname() {
return usersm2uname;
}
public void setUsersm2uname(String usersm2uname) {
this.usersm2uname = usersm2uname;
}
public String getUsersm2upass() {
return usersm2upass;
}
public void setUsersm2upass(String usersm2upass) {
this.usersm2upass = usersm2upass;
}
public Integer getUsersm2perm() {
return usersm2perm;
}
public void setUsersm2perm(Integer usersm2perm) {
this.usersm2perm = usersm2perm;
}
public void setPassword(String s) {
this.usersm2upass = s;
}
}
这个类是映射接收mysql数据库里面的内容的,里面的参数务必和数据库的参数一致(提示:这里定义的变量务必小写开头)
·Sm2UserDAO层代码
@Repository
public interface Sm2UserDAO extends JpaRepository<Sm2user,Long> {
Sm2user findByUsersm2uname(String usersm2uname); //通过用户名uname查找用户,注意要按照JPA的格式使用驼峰命名法
Sm2user findByUsersm2unameAndUsersm2upass(String usersm2uname, String usersm2upass);//通过用户名uname和密码查找用户
Sm2user findByUsersm2id(Long uid);
}
这里我暂时只定义了三个方法,我是继承了JpaRepository的方法,不需要写mysql里面的语句,可以直接用方法查找数据库的数据
·service层的UserService接口
public interface UserService {
Sm2user loginService(String usersm2uname, String usersm2upass);
Sm2user registService(Sm2user sm2user);
Long nametoid(String usersm2uname);
Sm2user findbyuid(Long uid);
void updfriend(String usersm2uname, Long uid);
void updfriend(Long uid, String usersm2uname);
String idToName(Long uid);
String parse(String friends);
}
这里里面都是我自己定义的方法看名字应该能知道方法的意思其中updfriend方法是我用来记录朋友的方法,我这个项目里面,登录后可以添加好友
·UserService的实现类UserServiceImpl
@Service
public class UserServiceImpl implements UserService {
@Resource
private Sm2UserDAO userDao;
@Override
public Sm2user loginService(String usersm2uname, String usersm2upass) {
Sm2user user = userDao.findByUsersm2unameAndUsersm2upass(usersm2uname,usersm2upass);
if (user!=null){
user.setPassword("");
}
System.out.println("登录成功");
return user;
}
//
@Override
public Sm2user registService(Sm2user sm2user) {
if(userDao.findByUsersm2uname(sm2user.getUsersm2uname())!=null){
System.out.println("无法注册");
// 无法注册
return null;
}else{
//返回创建好的用户对象(带uid)
Sm2user newUser = userDao.save(sm2user);
if(newUser != null){
newUser.setPassword("");
}
System.out.println("注册成功");
return newUser;
}
}
@Override
public Long nametoid(String usersm2uname) {
if (userDao.findByUsersm2uname(usersm2uname)!=null){
System.out.println("根据名称查找id成功");
return userDao.findByUsersm2uname(usersm2uname).getUsersm2id();
}else {
System.out.println("错误");
return null;
}
}
@Override
public Sm2user findbyuid(Long uid) {
return userDao.findByUsersm2id(uid);
}
@Override
public void updfriend(String usersm2uname, Long uid) {
Sm2user user = userDao.findByUsersm2uname(usersm2uname);
user.setFriends("f"+uid);
userDao.save(user);
}
@Override
public void updfriend(Long uid, String usersm2uname) {
Sm2user user = userDao.findByUsersm2uname(usersm2uname);
user.setFriends("s"+uid);
userDao.save(user);
}
@Override
public String idToName(Long uid){
if (userDao.findByUsersm2id(uid)!=null){
Sm2user user = userDao.findByUsersm2id(uid);
System.out.println("idtoname成功");
return user.getUsersm2uname();
}else {
System.out.println("idtoname失败");
return null;
}
}
@Override
public String parse(String friends) {
// 定义正则表达式
Pattern pattern = Pattern.compile("(?<type>[sf])(?<id>\\d+)");
// 定义两个 ArrayList 分别存储 s 类和 f 类数据
List<String> sList = new ArrayList<>();
List<String> fList = new ArrayList<>();
// 使用正则表达式匹配字符串中的数据,并将其保存到对应的数组中
Matcher matcher = pattern.matcher(friends);
while (matcher.find()) {
Long id = Long.parseLong(matcher.group("id"));
String name = idToName(id);
if (matcher.group("type").equals("s")) {
sList.add(name);
} else {
fList.add(name);
}
}
// 将数组转换成 JSON 格式的字符串
Gson gson = new Gson();
String sJson = gson.toJson(sList);
String fJson = gson.toJson(fList);
// 构造包含 s 和 f 的 JSON 对象
return "{" + "s:" + sJson + "," + "f:" + fJson + "}";
}
}
这个就是方法的具体实现
·Sm2UserController
@RestController
@RequestMapping("sm2user")
public class Sm2UserController {
@Resource
private UserService userService;
@PostMapping("/login")
public Result<Sm2user> loginController(@RequestParam String uname, @RequestParam String password){
Sm2user user = userService.loginService(uname,password);
if(user!=null){
return Result.success(user,"登录成功!");
}else {
return Result.error("123","账号或密码错误!");
}
}
@PostMapping("/register")
public Result<Sm2user> registController(@RequestBody Sm2user newUser){
newUser.setUsersm2perm(1);
System.out.println(newUser.getUsersm2upass());
Sm2user user = userService.registService(newUser);
if(user!=null){
return Result.success(user,"注册成功!");
}else{
return Result.error("456","用户名已存在!");
}
}
@PostMapping("/getfriends")
public Result<String> getfriends(@RequestParam String uname1, @RequestParam String uname2){
Long uid1 = userService.nametoid(uname1);
Long uid2 = userService.nametoid(uname2);
if (uid1!=null&&uid2!=null){
userService.updfriend(uname1,uid2);
userService.updfriend(uid1,uname2);
return Result.success("发送好友请求成功","查询朋友成功");
}else {
return Result.error("456","查询朋友错误");
}
}
@PostMapping("/recfriends")
public Result<String> recfriends(@RequestParam String uname){
Sm2user user = userService.findbyuid(userService.nametoid(uname));
String friends = user.getFriends();
String date = userService.parse(friends);
System.out.println(date);
if (date!=null){
return Result.success(date,"查询成功");
}else {
return Result.error("456","无好友请求数据");
}
}
}
这里是处理用户请求的控制器层里面的PostMapping就是post请求接收口RequestParam 是接受请求的键值的(类似/recfriends?uname=123这个后面的123就是uname其键值。
·这里我还用到了一个返回网页数据的Result类
Result
public class Result<T> {
private String code;
private String msg;
private T data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Result() {
}
public Result(T data) {
this.data = data;
}
public static Result success() {
Result result = new Result<>();
result.setCode("0");
result.setMsg("成功");
return result;
}
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>(data);
result.setCode("0");
result.setMsg("成功");
return result;
}
public static <T> Result<T> success(T data,String msg) {
Result<T> result = new Result<>(data);
result.setCode("0");
result.setMsg(msg);
return result;
}
public static Result error(String code, String msg) {
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
}
}
代码敲完的层级结构应该是这样的
写完代码,运行一下试试看
运行成功
接着我们测试一下接口
这里我用的是postman测试
首先测试注册
把 {"usersm2uname": "liu", "usersm2upass": "1223"}发送到后端
好的,注册成功
再去navicat看一下
数据库记录了一条新的数据 ,然后再测试一下getfriends这个发送好友请求的接口
这时候,liut的friends栏多了一个f1,123栏多了一个s6,意思是liut发送了一个请求给id为1的123,123接受到了id为6的好友请求
既然发送了好友请求,怎么解析好友请求呢比如说1好123同学
他接受到的好友请求就是
这个post请求查询这个请求可以查询当前账号接受到了谁的好友请求,发出去了多少好友请求
(明天继续)