목록Database (61)
코드 그라데이션
엔티티 직접 사용 - 기본 키 값 실습 JpqlMain public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.pers..
페치 조인과 일반 조인의 차이 JPQLMain public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(t..
컬렉션 페치 조인 실습 JpqlMain public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(teamB..
실무에서 정말정말완전완전대박 중요함 페치 조인 엔티티 페치 조인 즉시 로딩 가져올 때와 같다. 예제 구조 예제의 단순화를 위해 회원 4는 제외하고 만들었음. 실행 결과 Member와 Team의 연관관계가 manytoone이고, 지연로딩 설정 되어 있다. 그러면 팀은 프록시로 들어온다. 지연 로딩이 일어나고, 실제 member.getTeam().getName()을 호출한 시점에 그때마다 데이터베이스에 쿼리를 날린다. 영속성 컨텍스트에서 조회 결과적으로 보면 쿼리 총 3번 나갔다. 회원 100명? 그럼 쿼리 100번 나가야 한다. N + 1. 1은 회원을 가져오기 위해서 첫 번째로 날린 쿼리 첫 번째 쿼리로 얻은 결과와 맞는 쿼리를 N번 날리게 되는 것. 이게 N + 1 문 이걸 해결하려면 페치 조인 사용 ..
경로 표현식 예시 상태 필드 String query = "select m.username From Member m"; 단일 값 연관 경로 String query = "select m.team.~~ From Member m"; 이게 m.team.username / m.team.id 뭐 요런식으로 한 번 더 들어갈 수 있다는 의미. 묵시적 내부 조인이 발생한다는 말이 무슨 뜻이냐면. -> 객체에서는 .(점)을 찍어서 하면 되지만 DB에서는 조인이 일어나야 한다. 그게 묵시적 내부 조인이라고 칭해짐. 굉장히 조심해서 써야한다. 실무하는 사람들은 직관적으로 조심해야 함을 안다. 성능 튜닝에 매우 지대한 영향을 준다. 웬만하면 JPQL과 SQL을 맞춰라. 컬렉션 값 연관 경로 String query = "sele..
JPQL 기본 함수 • CONCAT • SUBSTRING • TRIM • LOWER, UPPER • LENGTH • LOCATE • ABS, SQRT, MOD • SIZE, INDEX(JPA 용도) GPT를 통한 설명 CONCAT: 문자열을 연결하는 함수입니다. 예를 들어, CONCAT('Hello', ' ', 'World')는 "Hello World"를 반환합니다. SUBSTRING: 문자열의 일부를 추출하는 함수입니다. SUBSTRING(expression, start, length) 형식으로 사용됩니다. expression은 대상 문자열이고, start는 추출을 시작할 위치를 나타내며, length는 추출할 문자의 수를 나타냅니다. TRIM: 문자열의 앞뒤 공백을 제거하는 함수입니다. TRIM([L..
조건식 - CASE 식 학생요금 / 경로요금 예제 (기본 CASE 식) JpqlMain 쿼리 식을 따로 떼서 보면 이렇다 String query = "select " + "case when m.age = 60 then '경로요금' " + " else '일반요금' " + "end " + "from Member m"; 전체 코드는 public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.g..