[QueryDSL] BooleanExpression과 BooleanBuilder의 모든 것
·
Development/Java
JPA, QueryDSL을 사용하는 프로젝트에서 BooleanExpression을 이용해서 where절을 자주 쓰곤 했는데,최근에 소스코드 보안점검을 해보니 '널(Null) 포인터 역참조가 발생할 수 있다'고 지적 받은 코드가 있어서BooleanExpression에서 널 포인터 역참조를 피하려면 어떻게 해야하는지,BooleanExpression과 BooleanBuilder는 어떤 차이가 있고 어떤 상황에서 써야하는지 알아보려고 한다.BooleanExpression과 BooleanBuilder는 QueryDSL에서 where절의 조건을 표현하는 조건 표현식이다. 사실 query문에 where문을 직접 입력해도 된다!query.where(qUser.age.goe(18));하지만 이렇게 쓰지 않는 이유는 조건..
[QueryDSL] Expressions.dateTemplate로 SQL 구문 만들기
·
Development/Java
QueryDSL로 날짜별 생성된 데이터를 세는 쿼리를 구현했다.그런데 내가 생각한 것과 데이터 개수가 다르게 나오는 것이다...(왜그럴까)1. 문제 상황Tuple results = queryFactory.select(qStatsTable.regDt, qStatsTable.count()) .from(qStatsTable) .orderBy(qStatsTable.regDt.desc()) .groupBy(qStatsTable.regDt) .limit(1) .fetc..
[Apache POI] Iterator로 읽은 빈 셀 CellType.BLANK로 예외처리하기
·
Development/Java
Apache POI를 이용해서 엑셀 파일을 읽어오는 기능을 구현했는데,기능 개발을 할 때는 되다가 테스트를 하니 ResponseDto에서 값을 가져오지 못하는 에러가 발생했다.Dto에서 디버깅을 해보니 값은 들어있어서 xlsx에서 row를 iterator로 읽는 과정에서 문제가 있다고 판단했다.1. 문제 상황try (InputStream inputStream = file.getInputStream()) { Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); Iterator rowIterator = sheet.iterator(); rowIterator.next(..
[Apache POI]Java에서 이미지를 포함한 Excel 파일 생성하기
·
Development/Java
Java에서 이미지를 포함한 Excel 파일을 생성하기 위해서Apache POI 라이브러리를 이용하여 엑셀 다운로드 기능을 구현해보자!프론트에서 엑셀 다운로드 버튼을 클릭하면 해당 화면을 캡쳐한 이미지를 백엔드로 보내서,백엔드에서 엑셀 안에 이미지를 넣어서 다운로드 받는 기능을 구현하고자 한다. 단순 데이터를 엑셀로 다운로드 하는 기능은 구현되어 있지만,이미지를 포함하여 엑셀 파일로 생성하는 기능은 미구현되어 있어서 이 부분을 중점으로 포스팅하고자 한다. 프론트에서 백엔드로 이미지를 전송할 때는 MultipartFile을 이용하여 전송하여 활용했다.이미지를 어딘가에 저장해야 하나..? (예를 들면 데이터베이스라든가..) 생각했는데 결론은 다음과 같다.1. 이미지는 데이터 값에 영향을 받기 때문에 사용자마..
[SpringBoot] select 쿼리문에서 update가 일어났던 이유
·
Development/Java
차트 관련 업무를 하고 있던 중..차트 조회를 위해 QueryDSL을 이용하여 select 문을 작성하고 있었다.join을 통해 다른 테이블에서 코드로 된 컬럼의 한글명도 불러와야 해서 select 결과를 tuple로 받아온 다음내가 원하는 entity에 @Transient로 정의한 컬럼에 하나씩 넣어서 entity를 return 하는 방식으로 구현했다. 그런데 해당 select 쿼리문을 실행하면 자꾸 update 문이 실행되는 것이다..나는 분명 조회하는 select만 썼는데 어디서 자꾸 update가 실행되는거지..? 하고 디버깅을 천천히 해보니tuple에서 entity로 변환하는 과정에서 기존에 entity에 정의한 컬럼의 값을 set으로 바꾸려고 하니 update가 실행되는 것이었다.아하..!@T..