ClazzRepository1.java接口
import com.mcy.springdatajpa.entity.Clazz;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface ClazzRepository1 extends JpaRepository<Clazz, Integer>, JpaSpecificationExecutor {
}
以上数据访问层接口用于对班级表进行相关的CRUD操作,同时由于实现了JpaSpecificationExecutor接口,ClazzRepository接口也将拥有JpaSpecificationExecutor接口提供的功能。
StuRepository1.java接口
import com.mcy.springdatajpa.entity.Stu;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
public interface StuRepository1 extends JpaRepository<Stu, Integer>, JpaSpecificationExecutor {
}
3、定义业务层类
在service包下新建一个SchoolService1.java类,其中主要的几个查询方法有。
根据性别查询学生信息方法。
@SuppressWarnings(“serial”)
public List<Map<String, Object>> getStusBySex(char sex){
List stus = stuRepository1.findAll(new Specification(){
@Override
public Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder cb) {
//root.get(“sex”)表示获取sex这个字段名称,equal表示执行equal查询
//相当于select s from Stu s where s.sex = ?1
Predicate p1 = cb.equal(root.get(“sex”), sex);
return p1;
}
});
List<Map<String, Object>> results = new ArrayList<>();
//遍历查询出的学生对象,提取姓名,年龄,性别信息
for(Stu s: stus){
Map<String, Object> stu = new HashMap<>();
stu.put(“name”, s.getName());
stu.put(“age”, s.getAge());
stu.put(“sex”, s.getSex());
results.add(stu);
}
return results;
}
动态查询学生信息:可以根据学生对象的姓名(模糊匹配),地址查询(模糊匹配),性别,班级查询学生信息,如果没有传入参数,默认查询所有的学生信息。
@SuppressWarnings(“serial”)
public List<Map<String, Object>> getStusByDynamic(Stu stu){
List stus = stuRepository1.findAll(new Specification() {
@Override
public Predicate toPredicate(Root root, CriteriaQuery<?> query, CriteriaBuilder cb) {
//本集合用于封装查询条件
List predicates = new ArrayList<>();
if(stu != null){
//是否传入用于查询的姓名
if(!StringUtils.isEmpty(stu.getName())){
predicates.add(cb.like(root.get(“name”), “%”+stu.getName()+“%”));
}
//判断是否传入查询的地址
if(!StringUtils.isEmpty(stu.getAddress())){
predicates.add(cb.like(root.get(“address”), “%”+stu.getAddress()+“%”));
}
//判断是否传入查询的性别
if(stu.getSex() != ‘\0’){
predicates.add(cb.equal(root.get(“sex”), stu.getSex()));
}
//判断是否传入用于查询的班级信息
if(stu.getClazz() != null && !StringUtils.isEmpty(stu.getClazz().getName())){
root.join(“clazz”, JoinType.INNER);
Path clazzName = root.get(“clazz”).get(“name”);
predicates.add(cb.equal(clazzName, stu.getClazz().getName()));
}
}
return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
}
});
List<Map<String, Object>> results = new ArrayList<>()