根据前一篇笔记我们已经实现了最简单的增删改查,现在如果我们对数据库查询有以下需求,
对 age 字段的查询、批量更新或者删除满足某个条件的数据、获取结果按照 age 大小 排序、获取满足条件的总数等等
现在就来一一实现。
实现以上条件用的主要是 生成的 Example 文件,在使用 generator 下拉表结构的时候,在实体类的文件里,(还是使用上一篇笔记中的例子)一共生成两个文件, Student.java 和 StudentExample.java,在 mapper 文件夹里生成了 StudentMapper.java。
Student.java 主要是对表字段的定义,包括 get 和 set 的一些方法,在上一篇笔记中,在创建数据的时候就用到了 对 date 字段数据的格式化。
StudentMapper.java 主要是对函数的定义,这些函数的具体实现方法则在 StudentExample.java 中实现
在我们这篇笔记里要实现的功能都在 StudentExample.java 中被实现。
好,接下来就让我们来实现上面说的那些功能。
1、返回 age 字段 大于 20 的数据,name 字段实现枚举搜索
要实现这个 API,我们先定义两个接口参数,age,name_list
API 代码如下:
package com.tutorial.controller;
import com.sun.org.glassfish.gmbal.ParameterNames;
import com.tutorial.entity.Student;
import com.tutorial.entity.StudentExample;
import com.tutorial.mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
public class StudentController {
@Autowired
private StudentMapper studentMapper;
@PostMapping("getStudentByAgeRange")
public List<Student> getStudentByAgeRange(
Integer age,
@RequestParam(value = "name_list") List<String> name_list
){
StudentExample example = new StudentExample();
StudentExample.Criteria criteria = example.createCriteria();
if (age != null) {
criteria.andAgeLessThanOrEqualTo(age);
}
if (name_list != null) {
criteria.andNameIn(name_list);
}
// 按照 age 字段倒序排列
example.setOrderByClause("-age”);
// 获取 满足条件的总数
long count = studentMapper.countByExample(example);
System.out.println(count);
List<Student> results = studentMapper.selectByExample(example);
return results;
}
}
当我们在定义 criteria 之后,对条件进行搜索,键入 criteria.and 之后可以看到后面会联想出很多方法,都是表字段的各种条件,包括 大于、大于等于、等于、包含、Null 的判断 等等。
对于每个字段,系统都帮我们自动生成了该字段的这些方法,可以直接使用。
如果是多个条件,直接 复用 criteria 在后面添加条件即可。
因为是搜索,所以用的是 selectByExample,相应的还有 deleteByExample,updateByExample 用于对应的 更新和删除。
2、获取的结果按照 age 大小排序
排序则对 example 使用 setOrderByClause 方法,传递参数为 字段名,默认正序,前面添加 - 则为 倒序排列。
example.setOrderByClause("-age");
3、获取搜索条件的总数
在 sql 里就是 count(),在这里的话 就使用 countByExample()。
long count = studentMapper.countByExample(example);
如果需要对 返回的结果进行分页处理,这个处理放在下一篇笔记中。