2021SC@SDUSC
目录
一.引言
登录注册使用了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的原因。