第一章我们讲的项目创建,结构分析,mysql配置,登陆功能,这里直接说注册的实现方法
首先看下登陆controller代码
@PostMapping("login")
public BaseResult login(@RequestParam(value = "user", defaultValue = "") String user,
@RequestParam(value = "pass", defaultValue = "") String pass) {
if (user.equals("")) return new BaseResult(400, "账号必须传!", "");
if (pass.equals("")) return new BaseResult(400, "密码必须传!", "");
User user1 = mapper.login(user, pass);
if (user1 == null) return new BaseResult(500, "账号密码不正确!", "");
user1.setPass("");
return new BaseResult(200, "", user1);
}
我们发现,一个参数写一个变量接受,这样太过于繁琐,如果注册表需要传10多个甚至20多个参数的时候,controller显得非常蠢笨,所以我们讲一个新的接受参数的办法,用于简化以上代码实现注册功能
编写mapeer文件实现注册,由于还是操作user表,所以还是在UserMapper中操作
@Insert("insert into user (user, pass) values (#{user}, #{pass})")
int register(User bean);
新增,修改,删除操作,返回值全部为int,返回受影响行数,如果=0则代表操作失败
编写controller文件实现注册,由于还是操作user表,所以还是在UserController中操作
@PostMapping
public BaseResult register(User user) {
if (user == null || user.getUser() == null || user.getPass() == null) return new BaseResult(400, "参数不正确", "");
if (mapper.findByUser(user.getUser()) != null) return new BaseResult(500, "账号已经注册", "");//由于登录账号是唯一的,查询是否存在,如果存在则拦截注册,给出错误提示
if (mapper.register(user) == 0) return new BaseResult(500, "注册失败", "");
return new BaseResult(200, "", "注册成功!");
}
大家可以发现,我方法接收了一个user对象,但是没有添加@RequestParam(value = "user", defaultValue = "") 注解,这就是我们要说的新的接收参数方法
前台用form-data方式传参时,后台可以用实体类接收,把前台传入的参数自动转到实体类中,多余的参数不接收,这种方法可以简化参数过多的问题,大家也可以用json字符串来接收
@PostMapping("login")
@PostMapping
但是大家发现,我的controller现在有两个方法,一个登陆,一个注册,为什么我的注册比登陆少了几个东西呢?
原因是因为,当前台访问一个controller的时候,如果这个controller中只有一个该请求方法,比如现在前台请求post地址为:http://localhost:8080/user
后台接收到请求会自动在UserController中找到所有post的方法,由于我们没有指定请求哪个方法,所以默认请求@PostMapping的方法而不是@PostMapping("login")
通过上方我们知道,一个controller中,当这个请求方式只有一个方法的时候则不需要指定别名
好了看下效果
实现效果演示
实现注册功能本章完结,以下贴出完整controller 跟 mapper代码
完成代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import www.td0f7.cn.springboot.springboot.base.BaseResult;
import www.td0f7.cn.springboot.springboot.entity.User;
import www.td0f7.cn.springboot.springboot.mapper.UserMapper;
@RestController
@RequestMapping("user")
public class UserController {
@Autowired(required = false)
private UserMapper mapper;
@PostMapping("login")
public BaseResult login(@RequestParam(value = "user", defaultValue = "") String user,
@RequestParam(value = "pass", defaultValue = "") String pass) {
if (user.equals("")) return new BaseResult(400, "账号必须传!", "");
if (pass.equals("")) return new BaseResult(400, "密码必须传!", "");
User user1 = mapper.login(user, pass);
if (user1 == null) return new BaseResult(500, "账号密码不正确!", "");
user1.setPass("");
return new BaseResult(200, "", user1);
}
@PostMapping
public BaseResult register(User user) {
if (user == null || user.getUser() == null || user.getPass() == null) return new BaseResult(400, "参数不正确", "");
if (mapper.findByUser(user.getUser()) != null) return new BaseResult(500, "账号已经注册", "");
if (mapper.register(user) == 0) return new BaseResult(500, "注册失败", "");
return new BaseResult(200, "", "注册成功!");
}
}
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import www.td0f7.cn.springboot.springboot.entity.User;
@Mapper
public interface UserMapper {
@Select("select * from user where user = #{user} and pass = #{pass}")
User login(String user, String pass);
@Select("select id from user where user = #{user}")
User findByUser(String user);
@Insert("insert into user (user, pass) values (#{user}, #{pass})")
int register(User bean);
}