Java 为行的特定类型实现分页

Java 为行的特定类型实现分页,java,spring-boot,jpa,spring-data-jpa,jpa-2.0,Java,Spring Boot,Jpa,Spring Data Jpa,Jpa 2.0,我只想为某些类型的用户实现分页。表格结构为: @Entity @Table(name = "users") public class Users implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", unique = true, updatable = false, nullable = false, length =

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

@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> {

}
@存储库
公共接口用户存储库扩展了JpaRepository{
}
查询:

@Override
public Page<Users> findAll(int page, int size) {
    return dao.findAll(PageRequest.of(page, size));
}
@覆盖
公共页面findAll(整版页面,整版大小){
返回dao.findAll(PageRequest.of(page,size));
}
如何将查询限制为仅选择
type
admin、super\u admin等


我想我需要添加一些限制,比如(
admin
super\u admin
)?

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

interface UserRepository extends JpaRepository<User, Integer> {
  Page<User> findAllByTypeIn(Pageable page,String... types));
}
写下你的说明书

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;
            }
        };
    }

}
或者,如果您喜欢在中使用


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

interface UserRepository extends JpaRepository<User, Integer> {
  Page<User> findAllByTypeIn(Pageable page,String... types));
}
写下你的说明书

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;
            }
        };
    }

}
或者,如果您喜欢在中使用


创建两个方法,两个单独的actions@YCF_L你能给我看一下代码示例吗?创建两个方法,两个单独的方法actions@YCF_L你能给我看一下代码示例吗?谢谢。但是有没有更简单的方法,比如在SQL查询中使用注释?
String。。。类型
?也许我需要将其作为数组发送?当然可以,如果您愿意,也可以使用集合。如果您使用
字符串。。。键入
您可以发送单个字符串,而无需将其转换为集合或数组…@PeterPenzov如果答案有帮助,请不要忘记接受并向上投票回答谢谢。但是有没有更简单的方法,比如在SQL查询中使用注释?
String。。。类型
?也许我需要将其作为数组发送?当然可以,如果您愿意,也可以使用集合。如果您使用
字符串。。。键入
您可以发送单个字符串,而无需将其转换为集合或数组…@PeterPenzov如果答案有帮助,请不要忘记接受并向上投票答案
dao.findAll(UserSpecs.isInTypes("admin","super_admin")) ,PageRequest.of(page, size));