전체 글 196

JUnit 함수 정리

assertArrayEquals(a, b) : 배열 A와 B가 일치함을 확인 assertEquals(a, b) : 객체 A와 B가 같은 값을 가지는지 확인 assertEquals(a, b, c) : 객체 A와 B가 값이 일치함을 확인( a: 예상값, b:결과값, c: 오차범위) assertSame(a, b) : 객체 A와 B가 같은 객체임을 확인 assertTrue(a) : 조건 A가 참인지 확인 assertNotNull(a) : 객체 A가 null이 아님을 확인 @Test : 테스트를 만드는 모듈 역할 @DisplayName : 테스트 클래스 또는 테스트 메서드의 사용자 정의 표시 이름을 정의 @ExtendWith : 사용자 정의 확장명을 등록하는데 사용 @BeforeEach : 각 테스트 메서드 전에..

카테고리 없음 2022.08.26

스프링 em.merge()

에서 보듯 merge()는 영속성 컨텍스트가 관리되도록 데려오는 함수이다. em.merge()는 JPA에서 단 두 군데에서 사용한다. 1.Repository.save(엔티티). // @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } 위 함수는 위의 그림을 보면 쉽게 이해가 될 것이다. 2.Repository.delete(엔티티) @Override @Transactional @..

TIL 2022.08.25

JPA save, flush, commit..@Transaction

JPA의 save(Entity) 는 영속성 컨텍스트 em.flush() 나 em.commit() 을 요청하는줄 알았으나, 아니었다!! @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } save는 단순하게 persist 하거나, merge 하는거였다..! 준영속상태란? 변경 감지 기능을 사용하면 원하는 속성만 선택해서 변경할 수 있지만, 병합을 사용하면 모든 속성이 변경된다. ..

카테고리 없음 2022.08.25

OSIV에 대해 (220825)

OSIV니, 영속성컨텍스트니, 프록시니 트랜잭션이니 대략적으로는 알았지만 역시 직접 경험을 해봐야 와닿는 것 같다. 문제 발견 : 어떤 엔티티와 DB사이는 @Convert 어노테이션으로 연결되어있어 형변환으로 들어갔었다. 하지만 DB에 있는 형태로 조회가 되지 않고, 계속 엔티티에 있는 형태로 조회가 되길래 무슨 일인가 하고 찾아봤더니, Controller에서도 영속성 컨텍스트에 있는 값을 읽어서 나타나는 문제였다. 위는 기본적으로 스프링이 제공하는 영속성 컨텍스트 범위이다. 위와같은상태였기 때문에, Controller에서도 영속성 컨텍스트에 있던 값을 읽던 것이다. (DB에는 다른 값이었는데도 불구하고!!) 키는 경우 : ADMIN처럼 커넥션을 많이 사용하지 않는 곳. 따라서 OSIV를 false로 설..

TIL 2022.08.25

Converter에 관하여 (220825)

자바에서는 100 200 으로 값이 저장되면, DB에서는 Y N 로 저장하고 싶다고 가정해보자. 이런 경우에 @Convert 어노테이션과 converter class를 이용한다. 지금 경우에는 자바 : LocalDateTime 객체 DB : String 형태. 로 변환을 하고 싶으므로 아래와같은 util성 클래스를 먼저 선언한 후 static final String DATE_FORMAT = "yyyy.MM.dd HH:mm:ss"; static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_FORMAT); public static LocalDateTime stringToDate(String date) { retu..

TIL 2022.08.25

자바 8 11 17 차이 정리

와닿는것만 생각해봤다.. 8: Optional 사용 ( null 처리 용이) stream 사용 ( 컬렉션,데이터를 모두 같은방법으로 다루기 가능) 람다식 사용 ( 가독성) 11. String 함수 추가. 파일관리에 필요한 메소드 추가됨. 17. 가바지컬렉션, 문자열 처리가 좋음. 스위치식 지원 봉인클래스 추가( 상속,인터페이스 구현에 제한을 둠.) 추가 : JRE : 자바 실행만 원하는것 JDK : 자바 개발도구.

카테고리 없음 2022.08.24

자바 NPE 예방법

1. equals 사용시 문자열을 먼저 적기. String a=null; if(a.equals("good")){ System.out.println("a = " + a); } 이것보다 String a=null; if("good".equals(a)){ System.out.println("a = " + a); } 이런식으로 하는게 낫다. 2.null을 파라미터나 반환값으로 넣지 않는다. 3.null Check 구문을 넣는다. 4. toString() 보다는 String.ValueOf()를 사용한다. (값이 null 이면 "null" 을 반환해줌) 5. Optional 래퍼클래스를 사용하기. Optional.ofNullable () .orElseThrow 구문

TIL 2022.08.24

내가 헷갈린 자바 list , 배열의 차이

C++로 코테를 하다보니, vector와 string을 자주 썼었다. 물론 당연히 c++에서도 차이는 있었지만, 둘다 배열로 생각해서 값을 조회에도 차이가없었지만, 자바는 달랐다.. 1. 값을 넣을떄 list는 자바의 vecotr처럼 add 를 해줘야한다. (push_back) 2. list는 .forEach가 가능하지만 배열은 불가능하다. 배열은 String[] s = {"good","bad","sad"}; Arrays.stream(s).forEach(st-> System.out.println("st = " + st)); 식으로 Arrays.stream(문자열).forEach 가 가능하다. 3.값을 읽을때 list는 get(2)식으로 get으로 값을 읽고, array는 기존방식대로 값을 읽는다. arr..

카테고리 없음 2022.08.24