实战 Java 第3天:开发注册、登陆接口

* 前言 <https://blog.csdn.net/weixin_44135121/article/details/94716711#_2>
* 一、创建 entity 实体类
<https://blog.csdn.net/weixin_44135121/article/details/94716711#_entity__4>
* 二、创建 service 服务类
<https://blog.csdn.net/weixin_44135121/article/details/94716711#_service__86>
* 三、创建 mapper 类
<https://blog.csdn.net/weixin_44135121/article/details/94716711#_mapper__134>
* 四、创建 sql 语句
<https://blog.csdn.net/weixin_44135121/article/details/94716711#_sql__152>
* 五、调用服务,处理业务逻辑
<https://blog.csdn.net/weixin_44135121/article/details/94716711#_171>
* 六、测试接口是否成功
<https://blog.csdn.net/weixin_44135121/article/details/94716711#_252>
* 七、总结 <https://blog.csdn.net/weixin_44135121/article/details/94716711#_266>


<>前言

在前面的《实战 Java 第2天》
<https://blog.csdn.net/weixin_44135121/article/details/93959042>
学习了如何连接数据库,今天开始编写正式的业务接口,实现注册和登陆功能。

<>一、创建 entity 实体类

注册接口和登陆接口需要用到的属性就是用户名 username、密码 password、手机号 phone。

新建 entity 文件包

* 在此文件包下面新建 User 类,来用抽象用户信息,内容如下: package com.dingding.entity; /** * Created
by xpwu on 2019/6/18. */ public class User { public String username; public int
password; public String phone; public User(){} public User(String username, int
password, String phone) { this.username = username; this.password = password;
this.phone = phone; } public String getName(){ return username; } public void
setName(String username){ this.username = username; } public int getPassword(){
return password; } public void setPassword(int password){ this.password =
password; } public String getPhone(){ return phone; } public void setPhone(
String phone){ this.phone= phone; } }
* 在此文件包下面新建 Response 类,用来返回接口调用信息描述(成功与否)。内容如下: package com.dingding.entity;
/** * Created by xpwu on 2019/6/28. */ 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; } }
所以 entity 下面有两个实体类,User 类和 Response 类。

<>二、创建 service 服务类

根据业务场景,需要提供一个注册服务与登陆服务。分别为增加用户信息与根据用户名查询用户信息。

* 新建 service 文件包,在此文件包下新建 UserService 类编写接口,内容如下: package com.dingding.mapper;
import com.dingding.entity.User; import org.springframework.stereotype.
Repository; import java.util.List; /** * Created by xpwu on 2019/6/27. */ public
interface UserService{ int addUser(User user);//增加用户信息接口 List<User>
queryByUsername(String username);//根据用户名查询用户信息 }
* 在 service 文件包下面新建 impl 文件包,在 impl 文件包下新建 UserServiceImpl 类来实现 UserService
接口。 package com.dingding.service.impl; import com.dingding.entity.User; import
com.dingding.mapper.UserMapper; import com.dingding.service.UserService; import
org.springframework.beans.factory.annotation.Autowired; import org.
springframework.stereotype.Service; import java.util.List; /** * Created by
xpwu on 2019/6/28. */ @Service public class UserServiceImpl implements
UserService { @Autowired UserMapper userMapper; public int addUser(String
username,int password,String phone){ User user = new User(username,password,
phone); int count = userMapper.addUser(user); return count; } public List <User>
queryByUsername(String username){ List <User> userList = userMapper.
queryByUsername(username); return userList; } }
<>三、创建 mapper 类

根据 service 服务类创建对应的 mapper 类。
新建 mapper 文件包,在此文件包下新建 UserMapper 类,内容如下:
package com.dingding.mapper; import com.dingding.entity.User; import org.
springframework.stereotype.Repository; import java.util.List; /** * Created by
xpwu on 2019/6/27. */ @Repository public interface UserMapper{ //注意接口名称与数据库的 id
对应 int addUser(User user); List<User> queryByUsername(String username); }
<>四、创建 sql 语句

在 resources 文件夹下,新建 mapper 文件夹,在此文件夹下新建相关的 xml 文件,内容如下。
<?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.dingding.mapper.UserMapper"> <resultMap id="BaseResultMap" type=
"com.dingding.entity.User"> <result column="username" jdbcType="VARCHAR"
property="username" /> <result column="password" jdbcType="INTEGER" property=
"password" /> <result column="phone" jdbcType="VARCHAR" property="password" /> <
/resultMap> <insert id="addUser" parameterType="com.dingding.entity.User">
INSERT INTO `user` VALUES(#{username},#{password},#{phone}) </insert> <select id
="queryByUsername" resultType="com.dingding.entity.User"> SELECT * FROM `user`
WHERE username = #{username} </select > </mapper>
<>五、调用服务,处理业务逻辑

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

* 注册接口的逻辑处理
* 判断用户名、密码、手机号是否为空,如果为空,注册失败;
* 如果都不为空,根据用户名查询是否有重复用户名,如果有,注册失败;
* 如果没有重复用户名,注册成功。
* 登陆接口的逻辑处理
* 判断用户名、密码是否为空;
* 如果都不为空,根据用户名查询数据库对应的密码;
* 如果密码有误,登陆失败;
* 如果密码正确,登陆成功。 package com.dingding.controller; import com.dingding.entity.
Response; import com.dingding.entity.User; import com.dingding.service.
UserService; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody; import org.
springframework.web.bind.annotation.RequestMapping; import org.springframework.
web.bind.annotation.RequestMethod; import org.springframework.web.bind.
annotation.RestController; import java.util.List; import java.util.Map; /** *
Created by xpwu on 2019/6/18. */ @RestController public class UserController {
@Autowiredprivate UserService service; @RequestMapping(value = "/register",
method= RequestMethod.POST) public Response register(@RequestBody Map<String,
String> person){ String username = person.get("username"); int password =
Integer.parseInt(person.get("password")); String phone = person.get("phone");
//1.判断用户名、密码、手机号是否为空 if(username != null && password != 0 && phone != null){
List<User> users = service.queryByUsername(username); //2.判断是否有重复用户名 if(users!=
null && users.size()>0){ return new Response(true,"注册失败,用户名重复,请更换",-1); }else {
int count= service.addUser(username,password,phone); if(count>0){
//3.没有重复用户名,注册成功 return new Response(true,"注册成功",1); }else { return new Response
(true,"注册失败",-1); } } }else{ return new Response(true,"注册失败,请检查用户名、密码、手机号是否为空",-
1); } } @RequestMapping(value = "/login",method = RequestMethod.POST) public
Responselogin(@RequestBody Map<String, String> person){ String username = person
.get("username"); int password =Integer.parseInt(person.get("password")); //1.
判断用户名、密码是否为空 if(username != null && password != 0 ){ List<User> users = service.
queryByUsername(username); //2. 判断用户名是否存在 if(users!=null && users.size()>0){
User user= users.get(0); //3. 判断密码是否正确 if(password == user.getPassword()){ //4.
密码正确,登陆成功 return new Response(true,"登陆成功",1); }else { return new Response(false,
"登陆失败,密码错误",-1); } }else { return new Response(true,"登陆失败,用户名不存在",-1); } }else {
return new Response(true,"登陆失败,请检查用户名、密码是否为空",-1); } } }
<>六、测试接口是否成功

* 使用 postman 验证接口。
* 验证注册接口
1)选择请求方式为 POST, 在地址栏中输入 http://localhost:8080/register
<http://localhost:8080/register> 在 Body 中添加相关参数。

2)执行 Send,选择 Params,选择Body,得到如下结果,验证成功。

* 验证登陆接口
1)将地址改为登陆接口地址,输入用户名和密码;

2)选择 send,查看结果。

* 查看数据库是否添加成功。

<>七、总结

以下是需要注意的几点。

* 使用 postman 进行验证的时候,相应的请求方式,接口地址,请求参数一定要看清楚,一 一对应。
* 因为参数对象是 json 格式,所以记得对象末尾的,不能有。

* 在接收参数时,如果对象是 int 类型,需要进行转换,如int password
=Integer.parseInt(person.get("password"));
* 在写 xml 文件的时候,int 类型的 jdbcType 为 INTEGER。即 <result column="password"
jdbcType="INTEGER" property="password" />。
* mapper 包的接口名与 xml 中的 id 保持一致。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信