
▶ JPQL 한 개의 데이터를 조회할 때에는 JPA가 find()를 제공하지만 전체를 조회할 때에는 JPA가 제공하는 JPQL을 사용해야 한다. SQL문 뒤에는 결과 중 한 개 행에 대한 resultType을 작성해준다. 여러개 행을 가져올 때에는 getResultList()를 사용한다. ▶ JPQL 주의사항 1.엔티티명과 필드명은 대소문자를 구분한다. 2.JPQL 키워드는 대소문자를 구분하지 않는다. 3.JPQL에서 사용하는 테이블명은 클래스명이 아닌 엔티티명이다. 4.엔티티의 Alias는 필수로 작성해야 한다. 쿼리 from절에 테이블명이 아니라 엔티티명을 쓴다. @Entity(name= "zzz") 클래스명이 아니라 zzz을 사용해야 한다. 없을 때는 클래스명으로. *파라미터 바인딩 년월일만 비교하..
인텔리제이에서 쿼리를 때리면 실제로 DB에 table이 만들어질까??? @Entity : JPA에 등록됨. entity로 인식함. (@Component는 빈객체 등록하려고 붙이는 어노테이션) *@Setter는 기본적으로 만들지 말고, 회사에 물어보자. @Table(name = "TBL_NAME") > 테이블명 쓰기, 생략하면 클래스명으로 자동으로 만들어짐. //빨간 줄 없애기 setting > inspections > jpa > Unresolved database references in annotations 체크 해제 @Id > 메소드와 필드에 사용 가능, PK설정(보통 Long) @GeneratedValue > 자동으로 값 증가(autoincrement) @Column(name = "컬럼명") > 생..

(day01 복습) JPA는 인터페이스이므로, JPA구현체는 hibernate이다. insert -> persist select -> find update -> setter delete -> remove ------------ JPA new project - 추가 해야 할 dependencies application.properties JPA는 mybatis(hikari)가 아닌 jdbc를 사용함. #oracle spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver spring.datasource.url=jdbc:p6spy:oracle:thin:@localhost:1521:XE spring.datasource.username=hr sp..
AOP(Aspect Oriented Programming) 관점이란 개발에 있어서, 관심사(Concern)를 의미한다. 코드의 중복을 줄일 수 있으며, 핵심 로직과 주변 로직을 분리하여 관리할 수 있다. - 파라미터가 잘 전달 되었는가? - 이 로직에서 발생할 수 있는 모든 예외 처리 핵심 로직은 아니지만 반복적으로 개발에 필요한 관심사들을 주변 로직이라고 한다. 따라서 AOP는 이러한 주변 로직을 횡단 관심사로 분리하여 작성하고 종단 관심사인 핵심 비지니스 로직만을 작성하도록 한다. 예) 나눗셈 프로그램 개발 시 두 개의 숫자를 나누는 것(핵심, 종단) 0으로 나누는 지 검사하는 것(주변, 횡단) 즉, 반복적으로 나타나는 횡단 관심사를 모듈로 분리한 후 적절한 시점에 로직을 주입하는 것이 AOP이다. ..

ORM(Object Relational Mapping) 객체진영과 RDB진영을 자동으로 매핑하여 구조의 불일치를 개발자 대신 해결해주는 기술의 총칭이다. 객체지향 구조에서 프로그래밍 언어를 사용하여 RDB의 데이터를 조작하는 방법이다. ORM을 사용하면 개발자가 SQL문을 직접 작성하지 않아도 RDB와 상호작용할 수 있다. JPA(Java Persistence API) (자바에 특화시켜서 ORM을 쓸 수 있게 만들어놓은 틀이 jpa이다. db와 java를 연동) ORM을 사용하기 위한 설계도(틀)이다. Java Application용 RDB 매핑 관리를 위한 인터페이스이며, DBMS 벤더사에 의존하지 않고 독립적으로 ORM을 사용할 수 있는 ORM 표준이다. 인터페이스이기 때문에 구현되어 있지 않은 틀만..
order project 조회, 전체 조회 숙제풀이 중단점(디버깅) 왼쪽에 빨간 점: 중단점 디버그 -> 톱니바퀴 기계로 컴퓨터가 돌아감. 세계 최초의 exception -> 톱니바퀴 사이에 벌레가 들어가 있어서 오류가 생김. 버그를 없애자, 오류를 해결하자, 오류를 검사하자 -> 디버그 중단점을 설정해서 여기서부터~여기까지 한줄씩 검사를 해보겠다. 디버깅상태를 눌러주면, 한줄씩 번역 가능. -> 너무 오래 걸리니까 단위테스트로 발전 @Controller Bean을 등록한다? > 어떤 영역에 저장이 된다. ApplicationContext : Bean을 관리해주는 객체, context영역을 관리하는 객체 Context : 메모리 상의 임시영역을 쓴다, context가 있으면 임시로 메모리에 올려놓고 필요..

어떤 태그든지 안에 selectKey태그를 쓸 수 있다. order="" >> 안에 쿼리를 언제 실행할 지 순서를 정해준다. before(insert 전에), after(insert 후에) 시퀀스의 nextval > 다음 번호를 select 시퀀스의 currentval > 현재 번호를 select select 한 것을 keyProperty로 전달받은 파라미터의 객체로 들어간다. 메소드의 파라미터 resultType의 결과로 들어간다. keyProperty 내용을 필드명과 동일하게 써야 파라미터의 필드가 정확히 매핑이 될 수 있다. public int insert(BoardVO boardVO) boardVO의 boardNumber로 들어간다. insert에서 전달받은 boardNumber를 그대로 사용하면..
1.프로젝트 만들고 설정, DB 세팅 2.mapper.xml > 쿼리 작성 // 파라미터 타입은 생략 가능(메소드 매개변수로 판단), resultType은 리턴타입과 맞춰주기 3.mapper.java > 인터페이스 생성 // @Mapper 4.config에서 alias 작성 5.mapperTest.java > 단위테스트 실시 6.DAO(JPA를 배우면 jpa repository로 바뀔 예정) - 자바스럽게 바꿔주는 역할 7.dao 단위테스트 persistence tier 끝 --------------------------------------- business tier 시작 8.service > 인터페이스 생성 // @Service 9.service > 구현 클래스 생성 // @Service 10.ser..