Spring Boot MyBatis简单练手(yi)

在Spring Boot集成mybatis框架搭建完成后,进行了一个例子的简单练手。由于在上篇文章中已经讲过了一个最简单的例子的创建,因此本文章只会写关于要求内所添加的内容。要求如下:

Spring Boot MyBatis简单练手(yi)_第1张图片
Spring Boot MyBatis简单练手(yi)_第2张图片
Spring Boot MyBatis简单练手(yi)_第3张图片

(1) 数据输出格式JsonResult

接口的输出格式已有了要求,因此需要创建一个公共类JsonResult,来返回数据。

public class JsonResult {
    private long total;
    private String message;
    private boolean status;
    private Object data;
    public JsonResult(){
        this("", true)
    }
    public JsonResult(String msg, boolean status){
        this(0, msg, null, true);
    }
    public JsonResult(long total, Object data){
        this(total, "", data, true);
    }
    public JsonResult(long total, String msg, Object data){
        this(total, msg, data, true);
    }
    public JsonResult(int total, String msg, boolean status, Object data){
        this.total = total;
        this.message = msg;
        this.status = status;
        this.data = data;
    }

    ......
    省略了setter和getter
    ......
}

(2) Dao层

按照要求,需要根据userId和userCode查询或删除用户。因此在传入参数时候,需要传入两个参数。传入两个参数时候,需要加入@Param,声明变量名,否则会报异常。

@Mapper
public interface UserMapper {
    List getUserList();

    User getUser(@Param("userId") String userId, @Param("userCode") String userCode);

    int insertUser(User user);

    int deleteUser(@Param("userId") String userId, @Param("userCode") String userCode);
    
    int updateUser(User user);
}


传递多个参数,需要使用where标签,他去自动去除条件语句句首的AND和OR。如果不加where标签,直接只用WHERE,那么如果userId为null,则生成的sql如下,后台会报异常。

SELECT * FROM user WHERE AND userCode = ?

jdbcType的作用是当插入的为空值时候,不指定jdbcType将会报错,在上述代码中,加入了userCode!=""的判断,所以此处不加jdbcType也行。


List要求只展示特定的字段,并且按照修改时间排序,所以SQL语句需要进行修改,利用ORDER BY进行排序,DESC为降序,ASC为升序。

(3) 服务层

1. getUserList

List时候由于我们不可能一次性就把数据库的数据全部提取出来,需要采用分页。在SQL语句中,我们通常用LIMIT进行分页。此例子中我们采用一个mybatis的分页插件PageHelper。在pom.xml中添加依赖。


    com.github.pagehelper
    pagehelper
    4.1.0

分页插件需要从页面传递两个参数,一个是从第几条开始查,一个是一个页面多少条数据。PageHelper.startPage(start, pageSize)后面跟着的第一条查询语句,会为其生成的SQL语句,加上LIMIT,从而实现分页的效果。用PageInfo封装list,调用getTotal()方法可以获得总共的条数。

public JsonResult getUserList(int start, int pageSize) {
    PageHelper.startPage(start, pageSize);
    List list = userMapper.getUserList();
    PageInfo pageInfo = new PageInfo(list);
    long total = pageInfo.getTotal();
    return new JsonResult(total, "success", list);
}

2. insertUser

用户ID采用UUID主键生成策略。

public JsonResult insertUser(User user) {
    User u = userMapper.getUser(null, user.getUserCode());
    if(u != null) return new JsonResult("userCode已重复", false);
    user.setUserId(UUID.randomUUID().toString().replaceAll("-", ""));
    user.setCreateTime(new Date());
    user.setModifiedTime(new Date());
    userMapper.insertUser(user);
    return new JsonResult("success", true);
}

(4) 控制层

在控制层中,代码与上篇文章中的基本类似,唯一的区别是插入或更新用户数据时候,需要进行数据验证。验证也可以通过javascript在前端完成验证。类似涉及写数据库的操作,需要采用POST,method = RequestMethod.POST规定了只有POST才能进入此方法。@RequestBody作用为接受json数据,转化为User类型的对象,@Valid标识需要验证的对象,BindingResult为验证的结果。

@RequestMapping(value = "/add", method = RequestMethod.POST)
public Object insertUser(@Valid @RequestBody User user, BindingResult result){
    if(result.hasErrors()){
        String msg = "";
        List fieldErrors = result.getFieldErrors();
        for (FieldError fieldError:
             fieldErrors) {
            msg += fieldError.getDefaultMessage() + ",";
        }
        return new JsonResult(msg.substring(0, msg.length() - 1), false);
    }
    JsonResult res = userService.insertUser(user);
    return res;
}

在User类中需要在getter方法上加注解,定义你的校验格式。不写在变量上,因为变量是private,加了会破坏类的封装性。

@NotNull(message = "年龄不能为空")
@Min(value = 18, message = "年龄必须满18岁")
@Max(value = 100, message = "年龄不能超过100岁")
public Integer getAge() {
    return age;
}

public void setAge(Integer age) {
    this.age = age;
}

@NotNull(message = "邮箱不能为空")
@Pattern(regexp = "\\w+(\\.\\w)*@\\w+(\\.\\w{2,3}){1,3}", message = "邮箱格式不正确")
public String getMail() {
    return mail;
}

public void setMail(String mail) {
    this.mail = mail;
}

@NotNull(message = "手机号码不能为空")
@Pattern(regexp = "^((17[0-9])|(14[0-9])|(13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$", message = "手机号码格式不正确")
public String getPhone() {
    return phone;
}

(5) 测试

利用Postman软件进行测试。下面只放add、list、detail三个的测试结果。

1. add

Spring Boot MyBatis简单练手(yi)_第4张图片
数据检验失败
Spring Boot MyBatis简单练手(yi)_第5张图片
数据检验成功
Spring Boot MyBatis简单练手(yi)_第6张图片
userCode重复

2. list

Spring Boot MyBatis简单练手(yi)_第7张图片

3. detail

Spring Boot MyBatis简单练手(yi)_第8张图片
通过userCode
Spring Boot MyBatis简单练手(yi)_第9张图片
通过userId

你可能感兴趣的:(Spring Boot MyBatis简单练手(yi))