디비 테이블 조인을 지양할 때 어쩔 수 없이 자바에서 조인을 해줘야 하는 상황이 발생할 경우
해결방안
아래 예제는 inner join만 사용
1. 아래 사이트 맨 하단에 메이븐을 내 프로젝트에 등록 및 아래 사이트 가이드 참고
글 쓰는 시점에서의 버전은 0.9.12
<dependency>
<groupId>org.jooq</groupId>
<artifactId>jool</artifactId>
<version>0.9.12</version>
</dependency>
2. 각 테이블 목록을 조회 후 inner join 수행
import static org.jooq.lambda.tuple.Tuple.tuple; // 중요
...
@Service
public class UserService {
@Autowired
private CommonDao commonDao;
public List<User> getUsers() {
List<User> userList = commonDao.selectList("UserDao.getUser");
List<UserRole> userRoleList = commonDao.selectList("UserRoleDao.getUserRole");
// 여기서 join
return userList.stream()
.flatMap(v1 -> userRoleList.stream().map(v2 -> tuple(v1, v2)))
.filter(t -> t.v1.getUserId().equals(t.v2.getUserId())) // join 조건
.map(t -> t.v1) // t.v1 = userList, t.v2 = userRoleList
.distinct() // 중복 제거
.collect(Collectors.toList());
}
}
3. 다양한 예제가 있는 참고사이트
https://blog.jooq.org/2015/08/13/common-sql-clauses-and-their-equivalents-in-java-8-streams/
끝.
'Java, JSP' 카테고리의 다른 글
log4j2 WAS shutodown memory leak 문제 (0) | 2019.09.26 |
---|---|
메이븐 로컬저장소에 직접 등록 명령어 (0) | 2016.12.14 |
ThreadLocal(스레드로컬) (0) | 2016.08.16 |
Apahce poi 엑셀 읽기(파싱) (0) | 2016.07.31 |
Java ServerSocket Multithereading 예제 (0) | 2016.04.25 |
댓글