전체 글 196

StringUtils.hasText

매개변수 String이 null 이거나 , "" (빈칸) 일 수가 있다. -> 그럴땐 을 쓰면 됨. ex) StringUtils.hasText(condition.getUsername()) public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } 처음에 MemberJpaRepository 생성자에 적어야한다. --- QueryDsl 사용할떄 Repository 구조 필자는 실무 코드 보는데 처음에 복잡했었다. 1.MemberRepository extends JPArepository 하는데, 2. MemberRepsitoryCustom( 쿼리 dsl 인터페이스) 3. Mem..

TIL 2022.08.23

querydsl 벌크연산, sql함수를 querydsl로 변환.

회워중에 나이가 28살 이하인 회원들은 모두 이름을 "비회원" 으로 처리하고싶을떄, @Test @DisplayName("") @Commit void Bulkupdate() throws Exception { //given long count = queryFactory .update(member) .set(member.username, "비회원") .where(member.age.lt(28)) .execute(); 이런식으로 하면 count에는 영향을 받은 칼럼의 갯수가저장이 된다. 주의할 점 영속성 컨텍스트는 "비회원"으로 바뀌기 전으로 남아있고, DB에는 "비회원" 으로 바꾸기때문에, 불일치가 생길 수 있음. 만약 update 하고 나서 select를 바로 하면, --> DB보다 영속성 컨텍스트가 우선이..

카테고리 없음 2022.08.23

220823 동적 쿼리 처리

Querydsl에서 동적 쿼리를 처리하는 방식은 크게 두가지이다. 1. BooleanBuilder user이름과 나이를 가지고 검색을하는 쿼리를 만들고 싶으면, null인지 아닌지 체크하고 builder에 값을넣고, where 절에서 builder을 사용하면 된다. 사용자 이름이 있을땐 검색하고, age가 없을떈 하고.. 뭐 이런느낌으로. private List searchMember1(String usernameCond, Integer ageCond) { BooleanBuilder builder = new BooleanBuilder(); if(usernameCond !=null){ builder.and(member.username.eq(usernameCond)); } if(ageCond!=null) b..

TIL 2022.08.23

220823 Query _ FetchOne, FetchFrist..

1. fetchFirst() : limit(1). fetchOne() //하나만 찾고 바로 나오는것. exist 같은것과 비슷한 성능. 2. QueryDsl에서 서브쿼리 쓸때, 같은 엔티티를 쓸거면 Q엔티티를 하나 더 해줘야함. QMember memberSub = new QMember("memberSub"); List fetch = queryFactory.selectFrom(member) .where(member.age.eq( JPAExpressions.select(memberSub.age.max()) .from(memberSub) )) .fetch(); 윗줄에 memberSub로 새로운 엘리어스를 만들고 수행함. 3. 테스트할때 만약 엔티티나 dto를 list로 반환한다면, 그거에 대한 보증 : ext..

TIL 2022.08.23

220822 JPQL, querydsl

JPQL 기본문법 : select m from Member m where m.username = :username -> 테이블 별칭이 필요하다. .setParameter("username","member1") 이런식으로 username에 들어갈것도 넣음. --- and 할때 .where( member.username.eq("member1"), member.age.eq(10) ) or .where( member.username.eq("member1").and(member.age.eq(10)) ) 둘 다 가능 여러개 가능. null도 없어서 전자가 좋음. 리스트 조회 : fetch() // 데이터 없으면 빈 리스트 fetchOne() // 데이터 없으면 null, 둘 이상이면 NonUniqueResultEx..

TIL 2022.08.22

220819 @Transient , Stream에 대해

@Transient 어노테이션을 붙이면, 그 칼럼은 DB 칼럼에 저장되지 않는다 + 아예 영속 범주에 들어가지 않는다. --- Stream은 Java8부터 지원하는걸로, 하나씩 참조하며 반복처리 가능. for문을 대체할수이싿. 하지만 : for문이 더 빠르다!!!! 데이터의 크기와 상관없이. 왜 for문이 더 빠를까? 최적화가 되어있음 + 인덱스기반이라 for문이 빠름. 그럼 stream은 왜 사용하는가? 1. 코드 간결해짐 2. 코드로 작성해야하는 filter, reduce 같은 로직을 수행할 수 있다. 결론 : 단순 반복이면 stream보다 for이 낫다. Arrays.asList : -> 배열을 반환함. ** List people 이 들어왔다고 하고, 특정 나이 이상의 사람들 filter 하는 메서..

TIL 2022.08.19

Response 헤더 정리

Swagger 을 이용해서 Response 객체를 뜯어보는데, 헤더부분은 어떤 의미가 있나 궁금증이 들어서 파게 되었다. 순서대로 보자. 1. cache-control: no-cache, no-store, max-age=0, must-revalidate no-cache : 캐시해도 되지만, 항상 원래 서버에 검증하고 사용. max-age : 캐시 유효기간 : 0 no-store : 데이터에 민감한 정보가 있으므로 저장하면 안됨. must- revalidate : 캐시 만료후 최초 조회시 원 서버에 검증해야함 2. connection: keep - alive close는 메세지 교환 후 TCP 연결 종료 Keep-Alive는 메세지 교환 후 TCP 연결 유지 이유: -> 동일한 클라이언트가 서버에 여러 요..

TIL 2022.08.18

스프링 실행시 나타나는 화면 해석

스프링 실행시 나오는 외계어 해석을 해보려고한다. 궁금해서 구글에 검색해보니 다른 사람은 왜 이 글을 안썼지..? 혹시 발견하면 댓글 부탁드립니다. 벌써 어지럽고 당장 블로그를 끄고싶어짐.. 10:01:09.778 [Thread-0] DEBUG org.springframework.boot.devtools.restart.classloader.RestartClassLoader - Created RestartClassLoader org.springframework.boot.devtools.restart.classloader.RestartClassLoader@5e81d1a1 1. Created RestartClassLoader. 어플리케이션 코드를 읽어드리는 RestartClassLoader를 만든다. 참고 :..

TIL 2022.08.18

PersistenceUnitInfo 란.

스프링 실행시 나오는 코드.. EntityManagerFactory를 만드는 인터페이스 라고 보면 될것 같다. 그럼 EntityManagerFactory 란? -> EntityManager을 만들어주는 거겠지? EntityManager란 JPA 영속성의 상태를 변환시켜주는 함수를 지원해주는 구현체이다. 위 사진은 객체가 DB에 저장되거나, DB를 읽을때 jpa persistence의 원리이다. 추후 설명하겠지만. 저 짝대기위에있는 함수들을 entitymanager가 지원해준다.

카테고리 없음 2022.08.18

HikariPool-1 이란, 커넥션풀이란.

https://code-lab1.tistory.com/209 DB 커넥션 풀(Connection pool)이란? HikariCP란? 커넥션 비용 WAS(Web Application Server)와 데이터베이스 사이의 연결에는 많은 비용이 든다. MySQL 8.0을 기준으로 INSERT 문을 수행할 때 필요한 비용의 비율은 다음과 같다. 괄호 안의 숫자가 비율을 의 code-lab1.tistory.com 위 블로그를 참조했습니다. DB와 WAS 간의 Connection을 해주는 프로그램이 HikralPool 이다. WAS와 DB의 연결은 꽤 많은 비용이 필요로한다. HikariCP는 가벼운 용량과 빠른 속도를 가지는 JDBC의 커넥션 풀 프레임워크이다. 위와 같은 구조로 ,DB와 연결될 커넥션을 가져온다.

카테고리 없음 2022.08.18