분류 전체보기
-
[MySQL] 꿀팁 몇가지MySQL 2024. 9. 16. 20:41
[WITH AS 로 CTE로 테이블 미리 빼놓기]WITH ap AS ( SELECT * FROM AIR_POLLUTION WHERE LOCATION1 = '경기도' AND LOCATION2 = '수원')// ROUND 함수 -> 소수 셋째자리에서 반올림이면 두번째 자리 까지니까 2SELECT YEAR(YM) AS YEAR, ROUND(AVG(PM_VAL1),2) AS 'PM10', ROUND(AVG(PM_VAL2),2) AS 'PM2.5'FROM apGROUP BY YEAR(YM)ORDER BY YEARWITH HE AS ( SELECT DEPT_ID, ROUND(AVG(SAL),0) AS AVG_SAL FROM HR_EMPLOYEES GROUP BY DEPT_ID)SEL..
-
[MySQL] DATE 관련MySQL 2024. 9. 16. 20:40
[DATE_FORMAT : 날짜 포맷팅]// 2024-10-15 10:15:00// 위에꺼가 2024-10-15 이렇게 출력됨SELECT ANIMAL_ID, NAME, DATE_FORMAT(INTAKE_DATE,"%Y-%m-%d") AS '입양 날짜'FROM ANIMAL_INSORDER BY ANIMAL_ID 보통 많이 쓰는게 %Y %m %d %y 하면 끝년도 (21, 22 ,24, 25)%M 하면 달을 글자로 (January, August)%c 하면 달에서 0 빼줌 (1, 2, 4, 10)[DATEDIFF : 날짜 차이] 두 DATE 간의 일수 차이 계산DATEDIFF(느린날짜, 빠른날짜)느린날짜 - 빠른날짜를 계산해줌SELECT ao.ANIMAL_ID, ao.NAMEFROM ANIMA..
-
[MySQL] STRING 관련MySQL 2024. 9. 16. 20:40
[SELECT 문에서 CASE-END : 특정 칼럼을 조건에 따라 다르게 출력]새로운 칼럼을 정의하는 것이므로 SELECT에 넣어줘야함! SELECT BOARD_ID, WRITER_ID, TITLE, PRICE, CASE WHEN STATUS = 'DONE' THEN '거래완료' WHEN STATUS = 'RESERVED' THEN '예약중' ELSE '판매중' END AS STATUS FROM USED_GOODS_BOARDWHERE DATE(CREATED_DATE) = '2022-10-5'ORDER BY BOARD_ID DESC SELECT loan_number, amount, CASE WHEN p>..
-
[MySQL] 쿼리 실행 순서MySQL 2024. 9. 16. 19:18
SQL 문법들 사이에서 실행되는 순서가 있다어떠한 쿼리든 순서에 따라 실행되기 때문에 이러한 처리 순서를 파악하고 있어야만 성능 좋은 쿼리가 만들어진다 // 1. 테이블 명시FROM 테이블1JOIN 테이블2 ON 조건// 2. 명시된 테이블에서 조건으로 특정 엔티티들만 추출하기WHERE 조건// 3. 그룹으로 묶고 HAVING으로 특정 그룹들만 추출GROUP BY 조건HAVING 조건// 4. 원하는 칼럼들만 추출하기SELECT 칼럼명 (DISTINCT, IF NULL)// 5. 정렬하기ORDER BY, LIMIT 1. FROM : 쿼리 실행 순서 중 가장 먼저 실행되는 부분으로 지정 테이블의 모든 데이터를 가져온다2. JOIN ON : FROM 테이블 직후 실행되며 대상 테이블을 새로 구성해준다 3...
-
[TDD] @Ignore @DisabledTDD 2024. 9. 11. 17:31
OpenAI API 키를 감추려고 application.properties 파일을 추가하니잘돌아가고 잘 올라가던 test 코드에서 application context를 로드 못한다는 에러가 자꾸 터졌다 그래서 모든 테스트 다 주석처리하고 올리긴 했는데이제 방법을 찾았다 그냥 @Ignore @Disabled 어노테이션으로 테스트 클래스 위에 적어주면 해당 테스트는 무시되서 주석처리할 필요가 없다 junit5 사용시에는 @Disabled 하면 먹힌다 그리고 단위테스트 들이 잘 돌아가면 단위테스트에는 사용안하고@Disabled@SpringBootTest@ActiveProfiles("test")class PuppyAlertApplicationTests { @Test void contextLoads() { }}..
-
[TDD] @DataJpaTestTDD 2024. 9. 10. 23:11
JPA와 관련된 @Component 들만 로딩하여 단위테스트를 진행해준다그래서 @Entity @Repository Bean들만 스캔하여 단위테스트를 진행한다 기본적으로 @DataJpaTest라는 어노테이션이 붙어 있으면 Transactional이고 각 테스트 종료 후 롤백이 된다.여기서는 인메모리 데이터 베이스를 사용한다고 하는데 이것때문에 에러가 나기도 해서, 나는 실제 내가 사용하는 MySQL 메모리로 테스트 하기위해 적힌 대로 @AutoConfigureTestDatabase를 써서 replace.None 값으로 변경해주었다. 영속성 컨텍스트도 적용된다따라서 repository.save() 하면 영속성 컨텍스트 안에 저장하고 repository.findbyId() 하면 영속성 컨텍스트 안에서 찾는거임..
-
[JPA] orphanRemovalJPA 2024. 9. 10. 22:28
부모 엔티티가 자식 엔티티의 생명주기를 관리하고 1) 부모가 삭제되거나2) 자식 엔티티가 부모와의 연관관계에서 제거될때 해당 자식 엔티티를 자동으로 삭제해주는 기능이다 예를 들어 특정 Product에 해당하는 Product Image들이 있다면해당 Product가 삭제되었을때 해당 Product에 대한 정보를 알려주는 Image들도 같이 삭제해주는게 맞다 이럴때 직접 ImageRepository에서 해당 Product를 외래키로 갖는 Image들을 찾아서 삭제하는 쿼리를 직접 작성하지 않고 orphanRemoval=TRUE를 써주면 알아서 관련된 Image들을 삭제해주는 기능이 orphanRemoval인 것이다 [orphanRemoval은 특정 자식에 대한 부모가 한 명일때만 사용해야한다!!] 특정 엔..
-
[JPA] cascadeTypeJPA 2024. 9. 5. 14:13
엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 편리함을 제공한다 cascade 옵션은 부모 엔티티가 단일 소유자일 때, 부모와 자식의 라이프 사이클을 맞추고 싶을때 사용한다ex) 게시글과 댓글 Cascade의 뜻이 ‘폭포수가 흐르다’ 라는 의미도 갖고 있는걸 알면 직관적으로 파악하기 쉽다 cascadeType.PERSIST부모가 persist될때 연관된 자식들도 persist됨부모가 자식의 전체 생명주기를 관리 casacdeType.REMOVE부모가 삭제되면 자식도 삭제됨but부모와 자식의 관계가 끊어졌다고 해서 자식이 삭제되는 것은 아님!관계가 있는 부모가 삭제되면 연쇄적으로 해당 엔티티와 연관된 자식들도 전부 삭제되는거임!cf) orphanRemoval = true 와 잘 구분해야한다! ca..
-
[JPA] @JoinColumn의 이해JPA 2024. 9. 1. 03:22
@JoinColumn에는 상대 Entity 쪽에 있는 내가 Join할 칼럼명을 지정하는게 아니다!! JoinColumn은 대상 엔티티와 "매핑할 외래키의 현재 테이블에서의 변수명"을 지정해주는 것이다!즉, JPA에서 @JoinColumn을 쓸때 이미 매핑할 PK값은 자동으로 정해져있는 것이다! 그래서 아래와 같은 코드를 적으면 2개의 필드에서 같은 칼럼명으로 매핑하려고 해서MappingException 에러가 뜬다!@OneToOne(fetch = LAZY)@JoinColumn(name = "station_id") // ←← 문제의 원인private Station upStation; // 연관 관계 매핑@OneToOne(fetch = LAZY)@JoinColumn(name = "station_id") //..
-
[TDD] @SpyTDD 2024. 9. 1. 01:33
The Spy is a wrapper created on an actual instance of the object that lets you call the real methods of that object unless the method is stubbed. It is based on the concept of partial mocking, where you want to test some real methods and mock only a few methods in a class. Spy 객체는 껍데기만 있는 Mock 객체와 다르게 실제로 구현된 기능이 돌아가는 객체이다. Spy 객체의 일부 기능을 Mock 객체처럼 Stub할 수 있다. public class SpyWithAnnotationTe..