项目实训(十一)---登录注册

2021SC@SDUSC

目录

一.引言

二.创建实体类

三.创建 service 服务类

四.创建 mapper 类

五.创建 sql 语句

六.调用服务,处理业务逻辑

小结


一.引言

登录注册使用了Mybatis框架进行实现。

代码结构:

 配置文件:

二.创建实体类

  • 在此文件包下面新建 UserBean 类,来用抽象用户信息,内容如下:
package com.example.demo.entity;


public class UserBean {
    int userId;
    String userName;
    String phoneNumber;
    String password;
    String profile_url;

    public UserBean(String phoneNumber,String password){
        this.phoneNumber=phoneNumber;
        this.password=password;

    }

//   按Alt+Insert

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getProfile_url() {
        return profile_url;
    }

    public void setProfile_url(String profile_url) {
        this.profile_url = profile_url;
    }
}
  • 在此文件包下面新建 Response 类,用来返回接口调用信息描述(成功与否)。内容如下:
package com.example.demo.entity;

public class Response {
        String msg;
        int code;
        Boolean isSuc = true;

        public Response(){}
        public Response(Boolean isSuc,String msg, int code) {
            this.msg = msg;
            this.code = code;
            this.isSuc = isSuc;
        }
        public Boolean getIsSuc() {
            return isSuc;
        }
        public void setIsSuc(Boolean isSuc) {
            this.isSuc = isSuc;
        }
        public String getMsg() {
            return msg;
        }
        public void setMsg(String msg) {
            this.msg = msg;
        }
        public int getCode() {
            return code;
        }
        public void setCode(int code) {
            this.code = code;
        }

    }

三.创建 service 服务类

  • 新建 service 文件包,在此文件包下新建 UserService 类编写接口,内容如下:
package com.example.demo.Service;

import com.example.demo.entity.UserBean;
import java.util.List;

public interface UserService {

    int addUser(String phoneNumber, String password);//用于注册时,添加用户
    List<UserBean> queryByUsername(String phoneNumber);//用于登陆时,验证用户

}
  • 在 service 文件包下面新建 impl 文件包,在 impl 文件包下新建 UserServiceImpl 类来实现 UserService 接口。
package com.example.demo.Service.impl;


import com.example.demo.Mapper.UserMapper;
import com.example.demo.Service.UserService;
import com.example.demo.entity.UserBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;
    @Override
    public int addUser(String phoneNumber, String password){
        UserBean user = new UserBean(phoneNumber, password);
        int count = userMapper.addUser(user);
        return count;
    }

    @Override
    public List <UserBean> queryByUsername(String phoneNumber){
        List<UserBean> userList = userMapper.queryByUsername(phoneNumber);
        return userList;
    }

}

四.创建 mapper 类

根据 service 服务类创建对应的 mapper 类。
新建 mapper 文件包,在此文件包下新建 UserMapper 类,内容如下:

package com.example.demo.Mapper;


import com.example.demo.entity.UserBean;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;


//@Repository
@Mapper
public interface UserMapper{
    int addUser(UserBean user);
    List<UserBean> queryByUsername(String phoneNumber);
}

五.创建 sql 语句

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.Mapper.UserMapper">

    <insert id="addUser" parameterType="com.example.demo.entity.UserBean">
        INSERT INTO `user`(phoneNumber,password) VALUES (#{password},#{phoneNumber})
    </insert>
    <select id="queryByUsername" parameterType="com.example.demo.entity.UserBean"  resultType="com.example.demo.entity.UserBean">
        SELECT * FROM `user` WHERE phoneNumber = #{phoneNumber}
    </select >
</mapper>


六.调用服务,处理业务逻辑

新建 controller 文件包,在此文件包下新建 UserController 类,在此类中调用调用相关服务并处理逻辑,内容如下:

注册接口的逻辑处理:
判断密码,手机号是否为空,如果为空,注册失败;
如果都不为空,根据用户名查询是否有重复手机号,如果有,注册失败;
如果没有重复手机号,注册成功。数据库记录+1,id为自增格式。


登录接口的逻辑处理:
判断手机号、密码是否为空;
如果都不为空,根据用户名查询数据库对应的密码;
如果密码有误,登陆失败;
如果密码正确,登陆成功。返回用户id

package com.example.demo;

import com.example.demo.Service.UserService;
import com.example.demo.entity.Response;
import com.example.demo.entity.UserBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
//@SpringBootApplication
@CrossOrigin

public class LoginController{
    @Autowired
    private UserService service;

    //注册
    @RequestMapping(value = "/register")
    @ResponseBody
    public Response register(String phone ,String password){
          System.out.print("进入");


        //1.判断密码、手机号是否为空
        if(password != null && phone != null){

            List<UserBean> users =  service.queryByUsername(phone);

            //2.判断是否有重复用户名

            if(users!=null && users.size()>0){

                return new Response(true,"注册失败,手机号重复,请更换",-1);

            }
            else {
                //返回1表示插入成功,否则是插入失败
                int count = service.addUser(password,phone);
                if(count>0){
                    //3.没有重复用户名,注册成功
                    List<UserBean> users1 =  service.queryByUsername(phone);
                    UserBean u=users1.get(0);
                     int uid= u.getUserId();
                    return new Response(true,"注册成功",uid);

                }else {

                    return new Response(true,"注册失败,数据库插入异常",-1);
                }

            }
        }else{

            return new Response(true,"注册失败,请检查用户名、密码、手机号是否为空",-1);

        }
    }

    //登录

    @RequestMapping(value = "/login")
    @ResponseBody
    public Response login(String phone,String password){

        System.out.print("进入");

        //1. 判断用户名、密码是否为空
        if(phone != null && password != null ){
            List<UserBean> users =  service.queryByUsername(phone);

            //2. 判断用户名是否存在
            if(users!=null && users.size()>0){

                UserBean user = users.get(0);

                //3. 判断密码是否正确
                if(password .equals(user.getPassword()) ){
                      int uid=user.getUserId();
                    //4. 密码正确,登陆成功
                    return new Response(true,"登陆成功",uid);

                }else {

                    return new Response(false,"登陆失败,密码错误",-1);

                }
            }else {

                return new Response(true,"登陆失败,用户名不存在",-2);

            }
        }else {

            return new Response(true,"登陆失败,请检查用户名、密码是否为空",-3);

        }
    }


}

小结

这一部分我的主要困难其实还是在数据库配置上(没错已经大三了还有这个问题),导致开始写的代码所有其他接口都访问不到了,后来发现是一个注解没有加上,这里一开始没发现是登录注册的问题,所以这里我们查错误查了一下午,才发现是因为新增加了这个Controller的原因。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值