Spring JPA 聯表查詢
簡要背景說明:
- 使用者角色表 P_USER_ROLE和使用者資料表 P_USER
- 一個使用者角色必定有一個使用者資料,但多個使用者角色可以共用一個使用者資料
- P_USER_ROLE 中USER_DATA_ID 為P_USER 的主鍵
需求:查詢使用者角色列表(含使用者詳細資料),所以在查詢使用者角色的同時,希望關聯查詢使用者資料
實現步驟1/2:
在UserRole(P_USER_ROLE 的實體物件),增加User(P_USER的實體物件)屬性,並生成get/set
/**
* 使用者資料
*/
private User user;
/**
* 使用者資料
*/
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "user_data_id", updatable = false, insertable = false, nullable = false)
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
實現步驟2/2:
在原有分頁查詢條件Specification(查詢P_USER_ROLE)中追加Specification查詢條件(查詢P_USER)
@Override
public Page<UserRole> query(Map<String, Object> parameters, Long currentPage, Long pageSize) throws CodeException {
List<Sort.Order> orders = OrderBuildable.create(parameters);
Specification specification = SpecificationFactory.create(this.getGenericClass(), parameters).and(new Specification<UserRole>() {
@Override
public Predicate toPredicate(Root<UserRole> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
Join<UserRole, User> userJoin = root.join("user", JoinType.INNER);
String nickName = (String) parameters.get("qry_like_nickName");
if (StringUtils.isNotBlank(nickName)) {
predicates.add(criteriaBuilder.like(userJoin.get("nickName").as(String.class), "%" + nickName + "%"));
}
String name = (String) parameters.get("qry_like_name");
if (StringUtils.isNotBlank(name)) {
predicates.add(criteriaBuilder.like(userJoin.get("name").as(String.class), "%" + name + "%"));
}
query.where((Predicate[]) predicates.toArray(new Predicate[0]));
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}
});
int page = currentPage.intValue();
if (page > 0) {
--page;
} else {
page = 0;
}
PageRequest pageable;
if (orders != null && !orders.isEmpty()) {
pageable = PageRequest.of(page, pageSize.intValue(), Sort.by(orders));
} else {
pageable = PageRequest.of(page, pageSize.intValue());
}
return this.getRepository().findAll(specification, pageable);
}
相關文章
- Spring Data JPA 實現聯表查詢Spring
- spring data jpa 多對一聯表查詢Spring
- Spring Data JPA 實現多表關聯查詢Spring
- spring data jpa查詢Spring
- JPA 連表查詢
- Spring JPA聯表情況下的複雜查詢Spring
- JPA多表關聯查詢
- Spring JPA 定義查詢方法Spring
- JPA 之 多表聯合查詢
- jpa動態查詢與多表聯合查詢
- spring data jpa關聯查詢(一對一、一對多、多對多)Spring
- Spring Data Jpa 複雜查詢總結 (多表關聯 以及 自定義分頁 )Spring
- spring data JPA 模糊查詢 --- 使用 LIKE --- 的寫法Spring
- Spring Boot中使用JPA構建動態查詢Spring Boot
- Spring Data Jpa 的簡單查詢多表查詢HQL,SQL ,動態查詢, QueryDsl ,自定義查詢筆記SpringSQL筆記
- Mongodb 關聯表查詢MongoDB
- mysql三表關聯查詢MySql
- 按月分表聯合查詢
- SQL 三表聯合查詢SQL
- mysql 三表關聯查詢MySql
- jpa一對多查詢
- JPA時間段查詢
- Spring Data JPA + QueryDSL實現CRUD和複雜查詢案例Spring
- jpa 聯合查詢資料,查詢使用者資訊與部門資訊
- mysql三張表關聯查詢MySql
- 兩表關聯查詢:sql、mybatisSQLMyBatis
- springDataJpa聯表查詢之多對多Spring
- 20、聯表查詢JoinON詳解
- SpringBoot Jpa多條件查詢Spring Boot
- JPA的多表複雜查詢
- mysql三表關聯查詢練習MySql
- MYSQL A、B表陣列關聯查詢MySql陣列
- SpringMVC+Spring Data JPA +Bootstrap 分頁實現和模糊查詢分頁SpringMVCboot
- django 兩個表或多個表聯合查詢Django
- mysql三表聯合查詢(員工表,部門表,工資表)MySql
- Spring Data JPA基本增刪改查和JPQL查詢(含完整程式碼和視訊連線)Spring
- flink維表關聯絡列之Redis維表關聯:實時查詢Redis
- MySQL三表聯查及兩表聯查MySql