springboot从0开始前后端分析,linux部署,云服务器运行,网络穿透本地运行,的项目分析(二)

1 篇文章 0 订阅
1 篇文章 0 订阅

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请求查询这个请求可以查询当前账号接受到了谁的好友请求,发出去了多少好友请求

(明天继续) 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值