小编chi*_*boi的帖子

Spring Data JPA中的分页(限制和偏移)

我希望用户能够在我的查询方法中指定限制(返回的数量的大小)和偏移量(返回的第一个记录/返回的索引).

这是我没有任何分页功能的类.我的实体:

@Entity
public Employee {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;

    @Column(name="NAME")
    private String name;

    //getters and setters
}
Run Code Online (Sandbox Code Playgroud)

我的存储库:

public interface EmployeeRepository extends JpaRepository<Employee, Integer> {

    @Query("SELECT e FROM Employee e WHERE e.name LIKE :name ORDER BY e.id")
    public List<Employee> findByName(@Param("name") String name);
}
Run Code Online (Sandbox Code Playgroud)

我的服务界面:

public interface EmployeeService {

    public List<Employee> findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)

我的服务实施:

public class EmployeeServiceImpl {

    @Resource
    EmployeeRepository repository;

    @Override
    public List<Employee> findByName(String name) {
        return repository.findByName(name);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我尝试提供支持偏移和限制的分页功能.我的实体类保持不变.

我的"新"存储库包含一个可分页的参数:

public interface EmployeeRepository extends JpaRepository<Employee, …
Run Code Online (Sandbox Code Playgroud)

paging spring pagination jpa spring-data

34
推荐指数
5
解决办法
6万
查看次数

在存储库接口或实体类中定义查询之间的区别?

抱歉,这是一个非常笨拙/愚蠢的问题,但是我想知道,除了实现之外,在存储库中定义查询之间是否还有其他区别:

public interface EmployeeRepository<Employee, Integer> {

    @Query("select e from Employee e where e.name like :name")
    public List<Employee> findByName(@Param("name") String name);
}
Run Code Online (Sandbox Code Playgroud)

并在实体中定义查询:

@Entity
@NamedQuery(name="Employee.findByName", query="select e from Employee e where e.name like :name")
public class Employee {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int id;
    //...
}
Run Code Online (Sandbox Code Playgroud)

像是两者都有优点/缺点?

jpa repository named-query spring-data spring-data-jpa

1
推荐指数
1
解决办法
732
查看次数