목록전체 글 (229)
DevKim
[ 페이징과 정렬 ] 반환 타입에 따라 Total count 쿼리를 날릴지 안 날릴지가 결정이 된다. 반환 타입이 Page 일 때 * Count 쿼리 사용 * ✔ pageRequest에 원하는 정보 넣고 만들어서 넘겨준 뒤, interface에서 Pageable로 받으면 끝이다. ✔ PageRequest.of ( 찾을 페이지, 한 페이지의 사이즈, Sort 조건 ) -> Sort 조건은 생략가능 ✔ page안에 많은 메서드가 제공된다. [Interface] Page findByAge(int age, Pageable pageable); [Test] @Test public void page() throws Exception{ //given memberRepository.save(new Member("mwmb..
실습을 위해 간단한 일대다 양방향 매핑을 걸어준 Member 와 Team 엔티티를 생성하였고 JPA Repository와 DataJPA Repository를 각각 작성하여 각각의 테스트 코드를 작성해보았다. JPA에서는 엔티티매니저 불러와서 persist해주고 조회시 쿼리 만들어서 조회하고.. Data JPA는 인터페이스 하나로 마무리된다는게 아직도 신기한 일이다. 다른건 생략하고, 한가지 다시 짚고 넘어가야 할 점이 있었다. 여기서 equals를 따로 override 안했기 때문에, 현재 isEqualTo에는 기본적으로 == 비교를 하게 되어있다. 이때 findMember와 member 가 같다고 나오는데, 이는 JPA 특성상 같은 트렌젝션 안에서는 영속성 컨텍스트의 동일성을 보장하기 때문이다. @Sp..
https://programmers.co.kr/learn/courses/30/lessons/77885 코딩테스트 연습 - 2개 이하로 다른 비트 programmers.co.kr [ 알고리즘 ] 단순구현 [문제 접근] 문제가 어렵다기보단, 일일이 비교하면 시간초과가 나는 문제이다. 처음엔 1씩 더해서 각각의 이진수를 구하고, 끝자리부터 한자리씩 더해나가며 해결하려고 했으나 그렇게 되면 시간복잡도가 어마어마하게 커지게 된다. 이 문제는 짝수와 홀수를 나눠서 생각 할 필요가 있다. (1) 짝수 case 짝수의 경우 2진법으로 바꾸면, 무조건 끝에 0이 오게되어있다. 1~2자리수만 다르면 되므로, 맨 끝에 0을 1로만 바꿔주면된다. (2) 홀수 case 홀수의 경우 7=111 이런 경우를 대비하여, 맨 앞에 0..
https://programmers.co.kr/learn/courses/30/lessons/77485 코딩테스트 연습 - 행렬 테두리 회전하기 6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3] programmers.co.kr [ 알고리즘 ] 단순구현 [문제 접근] 문제를 보자마자 사각형을 기준으로 회전한다는 점에서, 삼성 기출 로봇청소기가 생각났다. 시작하는 행과 열의 기준을 정해주고 그 만큼 사각형을 회전해주면 된다. 매번 회전에 해당하는 숫자들을 리스트에 담아주고, 그 중의 최소값을 결과값에 담아주면 된다. [코드] def solution(rows, column..
https://programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr Spring 공부한다고 잠시 놓고 있었던 1일 1 PS를 다시 시작했다. 그저께 부터 시작이었는데.. 삼성 기출을 3번은 돌리고 싶어서 이전에 풀지 않았던 문제들 풀려고 했다가 머리 털 다 뽑히고 한문제 겨우 풀어냈다.. 하하! 삼성 기출은 정말 어렵다 ㅠㅠ 한달 뒤에 나는 잘 풀어낼 수 있는 실력을 가졌으면 하는 바람.. 그래서 오늘은 프로그래머스 2단계에 새로운 문제들이 추가됐길래 가볍게 풀어보았다. [ 알고리즘 ] 단순구현 [ 자료구조 ] 큐,스택 [문제 접근] 말은 뭔가 복잡하게 써놨지만, 그냥 단순히 모두가 알고있는 올바른 괄호 ..
SQL은 DB 테이블을 대상으로 쿼리를 하지만, JPQL은 엔티티 객체를 대상으로 검색하는 객체 지향 쿼리이다. 어차피 결국 JPQL은 SQL로 변환되기 때문이어서 그런지, SQL이랑 문법은 거의 비슷한 것 같다. String jpql="select m from Member as m where m.username like '%kim%'" em.createQuery(jpql,Member.class) .getResultList(); JPQL은 단순 문자열이므로, 동적 쿼리를 만들거나 할 때는 QueryDSL이 더 유용하다. QueryDSL은 문자가 아닌 자바코드로 JPQL을 작성할 수 있으므로 컴파일 시점에 문법 오류를 찾을 수 있다는 장점이 있다. JPQL 문법을 먼저 정리하고, 메뉴얼보고 QueryDSL..
JPA의 데이터 타입은 엔티티 타입/ 값 타입으로 나뉜다. [ 엔티티 타입 ] - @Entity로 정의하는 객체이며, 데이터가 변해도 식별자로 지속해서 추적가능하다. [ 값 타입 ] - int,String 처럼 단순히 값으로 사용하는 자바 기본 타입/객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가하다. 값 타입은 기본값 타입, 임베디드 타입, 컬렉션 값 타입으로 나뉜다. 기본 값 타입 - 자바 기본 타입(int,double) , 래퍼 클래스(Integer,Long), String 이있다. - 생명주기를 엔티티에 의존하며, 값 타입은 공유하면 안되고 공유되지도 않는다. - 기본 타입은 공유가 안되고 항상 값을 복사한다. (a=b 이면 a에 b의 값이 복사됨 -> 두개는 다른 것) - 래퍼 클래스는 ..
[ 프록시 Proxy ] 즉시로딩과 지연로딩을 제대로 이해하기 위해선, 프록시에 대한 이해가 필요하다. 프록시 객체는 실제 클래스를 상속 받아서 만들어진 가짜 객체라고 생각하면 된다. 진짜 객체는 em.find( )로 불러오지만, 프록시 객체를 조회할 땐 em.getReference( )를 통해 불러온다. 프록시 객체는 실제 객체와 겉 모습은 같고, 실제 객체의 참조(target)을 보관하고 있다. 만약 여기서 프록시 객체의 getName()을 호출한다면, target에 있는 (진짜 객체) getName( )을 대신 호출해준다. Client가 getName( )을 요청하면 내부적으로 영속성 컨텍스트에게 진짜 멤버 객체를 가져오라고 요청한다. 영속성 컨텍스트에서 DB를 조회해서 실제 엔티티를 생성해주고, ..