SpringBoot+MyBatis做注册接口,抛弃mapper.xml

848 阅读3分钟

第一章我们讲的项目创建,结构分析,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);
}