![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUCpIJ%2FbtrYcgQXie3%2Fnxf8ZSnZjZbzkSZ5R8ZQDk%2Fimg.png)
[JPA]@Formula
2023. 2. 5. 16:20
데이터베이스/JPA
Hiberante에서 제공하는 @Formula 어노테이션을 사용하면 가상 컬럼을 만들수 있다고 한다. 가상컬럼이라는 것은 JPA 상에는 존재하지만 DB에는 생성되지 않는 칼럼을 말한다. 주의해야 할 점은 하이버네이트 문서에도 언급되어 있지만 네이티브 SQL을 사용한다는 것이다. 때문에 RDBMS의 종류를 교체하는 경우 호환성에 문제 가 있을 수도 있다. 언제 사용하는가? 예제들을 보면 댓글 개수구하기, 좋아요 개수구하기, 글자수 구하기등 무언가를 카운팅할 때 주로 사용하는 것으로 보인다. 사용법 사용법은 매우 간단하다 Entity 필드에 @Formula(쿼리)를 달아주면 된다. //댓글 개수 @Formula("(SELECT count(1) FROM reply r WHERE r.boardId = id)")..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbvr5n7%2FbtrX2Xshe4r%2FOkbwwMEgtrfdYK0myu93CK%2Fimg.png)
[자바] 박싱과 언박싱에 대해서
2023. 2. 5. 16:14
몰아 넣기
박싱 과 언박싱이란? 자바에는 기본 타입과 Wrapper 클래스가 존재한다. /** 기본 타입 : int, long, float, double, boolean 등 Wrapper 클래스 : Integer, Long, Float, Double, Boolean 등 */ // 박싱 int i = 10; Integer num = new Integer(i); // 언박싱 Integer num = new Integer(10); int i = num.intValue(); 오토 박싱 & 오토 언박싱 JDK 1.5부터는 자바 컴파일러가 박싱과 언박싱이 필요한 상황에 자동으로 처리를 해준다. // 오토 박싱 int i = 10; Integer num = i; // 오토 언박싱 Integer num = new Integer(..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxJamI%2FbtrX3qnoUOO%2Frkdyg8Yrueg0MZvO1mLUYK%2Fimg.png)
12_19 Stream의 안좋은 예제 한가지
2023. 2. 5. 15:59
카테고리 없음
회고 각 로우에 stream을 사용해 총 6개의 반복문이 일어난다. 하지만 이 로직은 하나의 리스트객체를 사용하므로 하나의 반복문으로도 이 로직을 수행할 수 있었다. //헤더, 로우 정보 셋팅 LinkedHashMap dataMaps = new LinkedHashMap(); dataMaps.put("번호", numberList); dataMaps.put("회원그룹", responseList.stream().map(accountGiftCardDto -> (Object) accountGiftCardDto.getUserGroupName()).toList()); dataMaps.put("아이디", responseList.stream().map(accountGiftCardDto -> (Object) account..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBz7dC%2FbtrVK0QoVOQ%2F8ATAJv5KDWOqTQBEbu16L1%2Fimg.png)
[Spring] @Async를 사용해 비동기 메소드 만들어보기
2023. 1. 8. 20:34
몰아 넣기
MTP 메일 전송중 N명에게 전송해야하는 로직이 있었다. 동기로 처리하기엔 100명에게 메일을 보낼 경우 한명 당 1초가 걸린다면 1분40초가 걸리는 것이다. 그래서 비동기처리를 하도록 하였다. Async 기능 켜기 자바 설정Java configuration으로 비동기 처리enabling asynchronous processing를 쓰려면 간단히 설정 클래스에 @EnableAsync를 추가해주기만 하면 된다 또는 SpringApplication에 추가해주어도 좋다. @Configuration @EnableAsync public class SpringAsyncConfig { ... } @EnableCaching @EnableAsync @EnableScheduling @SpringBootApplication..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnwb5Q%2FbtrUVa9piH5%2F6VEc94fCRkpOWT4kS9OzsK%2Fimg.png)
[JPA] Entity Lifecycle Events
2022. 12. 31. 11:53
데이터베이스/JPA
@PrePersist 선언된 것이 뭔지도 모르고 @PrePersist가 선언된 메소드를 실행 후 Repository.save(객체) 를 해버린 부끄러움을 잊지 않기위해.....ㅎㅎ Entity Event?? https://www.baeldung.com/jpa-entity-lifecycle-events 문서에 보면 아래와 같이 적혀있다. JPA는 다음과 같은 7개의 선택적 수명 주기 이벤트를 지정합니다. - 새로운 엔티티에 대해 persist가 호출되기 전에 – @PrePersist - 새로운 엔티티에 대해 persist가 호출된 후 – @PostPersist - 엔티티가 제거되기 전 – @PreRemove - 엔티티가 삭제된 후 – @PostRemove - 업데이트 작업 전 – @PreUpdate - 엔..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr8aky%2FbtrU37Qoyel%2FNkXkPD8QXVJsQbGkY539eK%2Fimg.png)
[JPA] JPQL @Query에 각 DB function() 사용해보기
2022. 12. 31. 11:19
데이터베이스/JPA
JPQL에서 기본적으로 지원하는 function만으로는 비지니스의 조회를 해결하기는 한계가 존재한다. nativeQuery를 사용하여 fetch까지 할 수 있는 방법을 찾다가 function() 을 찾게되었다. function을 쓰게 된 이유 AccountUser의 엔티티는 회원을 생일을 LocalDate로 저장되어 있다. @Getter @Setter @Entity public class AccountUser { @Id private Long id; @NotNull private LocalDate birth; } 회원 목록 조회시 생년월일 중 월만 맏아서 조회를 하게 되는 기획이 있다. MSSQL을 사용하고있어서 SUBSTRING(CONVERT(VARCHAR(8), birth, 112), 5, 2)) C..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAcDgb%2FbtrUui0s6N7%2FDdO3aj1tOv1a3fMrbSEGCk%2Fimg.png)
[mssql] ROW_NUMBER() OVER () , PARTITION BY
2022. 12. 24. 21:52
데이터베이스/mssql
ROW_NUMBER 함수란? - 각 PARTITION 내에서 ORDER BY절에 의해 정렬된 순서를 기준으로 고유한 값을 반환하는 함수입니다. - 윈도우 함수(Window Funtion)로 그룹 내 순위 함수입니다. 문법 ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼]) - PARTITION BY는 선택, ORDER BY는 필수 공부하게 된 계기 구조 이번 프로젝트에서 point 라는 도메인에 유저들이 포인트가 지급되면 하나씩 쌓이는 구조이며, totalPoint에 최근에 적립된 totalPoint에서 더해져 DB에 적재가 되는 구조입니다. @Getter @Setter @Entity public class Point extends DateTime ..
![thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSvReZ%2FbtrUuz8Ytk9%2FOsk8YVW6GcwfucwgMxbB9k%2Fimg.png)
[java/spring] Stream의 안좋은 예시 :1
2022. 12. 24. 21:10
몰아 넣기
회사에 들어가 개발자가 된지 3개월차가 되었다. 나는 Stream에 대해 관심이 많으며 그래도 Stream을 써야할 때는 못쓰더라도 쓰지 않아야할 곳에서는 안쓰고 있다고 자부하고 있었다. 하지만... 이번 기회에 그 자부심이 깨져버렸다. 여러 반복문 엑셀 다운로드기능을 구현중에 각 데이터를 Mapping 해야하는 상황이였습니다. 문제점 //헤더, 로우 정보 셋팅 LinkedHashMap dataMaps = new LinkedHashMap(); dataMaps.put("번호", numberList); dataMaps.put("회원그룹", responseList.stream().map(accountGiftCardDto -> (Object) accountGiftCardDto.getUserGroupName())..