我有2个表group(id,groupname),group_crew(group_id,crew_id,crew_name),我现在要用springboot做个分页查询,显示group_id,group_name,crew_id,crew_name
时间: 2024-03-17 10:40:59 浏览: 62
好的,你可以使用 Spring Data JPA 来实现分页查询。首先,你需要定义一个实体类来表示 `group` 表和一个实体类来表示 `group_crew` 表。这两个实体类之间存在一对多的关系。
Group 实体类:
```java
@Entity
@Table(name = "group")
public class Group {
@Id
private Long id;
private String groupname;
@OneToMany(mappedBy = "group")
private List<GroupCrew> groupCrews;
// 省略 getter 和 setter 方法
}
```
GroupCrew 实体类:
```java
@Entity
@Table(name = "group_crew")
public class GroupCrew {
@Id
private Long id;
private Long crew_id;
private String crew_name;
@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
// 省略 getter 和 setter 方法
}
```
接下来,在你的 Repository 中定义一个方法,使用 Spring Data JPA 的分页查询功能来查询数据:
```java
public interface GroupRepository extends JpaRepository<Group, Long> {
@Query("SELECT g.id AS group_id, g.groupname, gc.crew_id, gc.crew_name FROM Group g INNER JOIN g.groupCrews gc")
Page<Map<String, Object>> findGroupCrews(Pageable pageable);
}
```
在这个方法中,我们使用了 `@Query` 注解来指定 SQL 语句,通过 `INNER JOIN` 将 `group` 表和 `group_crew` 表连接起来,使用 `Pageable` 参数来实现分页查询。最后,我们将查询结果以 `Map<String, Object>` 的形式返回,其中键为列名,值为列值。
最后,在你的 Controller 中调用这个方法,将查询结果返回给前端:
```java
@RestController
public class GroupController {
@Autowired
private GroupRepository groupRepository;
@GetMapping("/groups")
public Page<Map<String, Object>> getGroupCrews(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) {
Pageable pageable = PageRequest.of(page, size);
return groupRepository.findGroupCrews(pageable);
}
}
```
在这个 Controller 中,我们使用 `@GetMapping` 注解来定义一个 GET 请求的接口,通过 `@RequestParam` 注解来获取前端传递的分页参数,最后调用 `groupRepository.findGroupCrews` 方法来查询数据并返回分页结果。
阅读全文