@
gy911201 是封装的 jpa ... hibernate 只是有提供 hibernate-entitymanager 来实现 jpa 而已...
spring data jpa 其实只用用他们提供的 Specification 转 jpa 2.0 的 Predicate 以及提供的分页排序方法就行了 . 关于他提供的什么 query 注解 还有 什么通过接口函数命令的方式来查询 感觉太鸡肋了.
. 特别是关系复杂的系统里.. 关联的表特别多.. jpa 这种就很方便了..
就比如以下这个查询..用 mybatis 写 需要写多少 sql ? 如果还要加上 分页 排序 ?
(gist 似乎抽了,打不开,直接贴代码)
```
@
Override public List<Program> getProgramsByGroup(Collection<Group> groups, Dept dept, Collection<Level> levels) {
Set<String> strGroups =
groups.stream().map(Group::getId).collect(Collectors.toSet());
return super.findAll((root, query, cb) -> {
List<Predicate> levelPredicate = Lists.newArrayList();
levels.forEach(level -> {
levelPredicate.add(cb.equal(root.get(Program_.level), level));
});
return cb.and(
root.join(Program_.groups).get(
Group_.id).in(strGroups),
cb.equal(root.join(Program_.dept).get(
Dept_.id), dept.getId()),
cb.or(
levelPredicate.stream().toArray(Predicate[]::new))
);
});
}
```