gpt4 book ai didi

java - 对行的某种类型实现分页

转载 作者:行者123 更新时间:2023-12-02 01:27:32 24 4
gpt4 key购买 nike

我只想为某些类型的用户实现分页。表结构为:

@Entity
@Table(name = "users")
public class Users implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true, updatable = false, nullable = false, length = 3)
private int id;

@Column(length = 255)
private String login;

@Column(length = 255)
private String email;

@Column(length = 64)
private String salt;

@Column(length = 255)
private String type;
.....
}

存储库:

@Repository
public interface UserRepository extends JpaRepository<Users, Integer> {

}

查询:

@Override
public Page<Users> findAll(int page, int size) {
return dao.findAll(PageRequest.of(page, size));
}

如何将查询限制为仅选择type admin、super_admin 等。

我想我需要添加像 IN (admin, super_admin) 这样的限制?

最佳答案

可能最简单的方法是使用命名约定并使用 findAllByTypeIn:

interface UserRepository extends JpaRepository<User, Integer> {
Page<User> findAllByTypeIn(Pageable page,String... types));
}

但如果您有更复杂的搜索条件,我会考虑使用规范

Spring Data JPA支持规范,您可以使用JpaSpecificationExecutor接口(interface)扩展您的存储库接口(interface),如下所示:

interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {

}

写下您的规范

class UserSpecs {

public static Specification<User> isOfType(String type) {

return new Specification<User>() {

@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
return builder.equal(root.get("type"), type);
}
};
}


public static Specification<User> isInTypes(String... types) {

return new Specification<User>() {

@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
In<String> inClause = builder.in(root.get("type"));
for (String type: types) {
inClause.value(type);
}
return inClause;
}
};
}

}

并通过获取结果

dao.findAll(UserSpecs.isOfType("admin").or(UserSpecs.isOfType("super_admin")) ,PageRequest.of(page, size));

或者如果您更喜欢使用in

dao.findAll(UserSpecs.isInTypes("admin","super_admin")) ,PageRequest.of(page, size));

关于java - 对行的某种类型实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56671498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com