분류 전체보기
-
[Spring] Spring Data Jpa 메소드 이름으로 쿼리 생성하기Spring 2021. 12. 22. 15:39
스프링 데이터 jpa는 메소드 이름을 선언해주면 이름을 분석해 jpql 쿼리를 실행시켜준다. 순수 jpa 레포지토리로 구현한 함수가 이런 형태라면 public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age") .setParameter("username", username) .setParameter("age", age) .getResultList(); } 스프링 데이터 jpa는 public interface MemberRepository extends JpaRepository..
-
[Java] Java 함수적 인터페이스 Consumer, SupplierJAVA 2021. 12. 17. 21:10
Consumer와 Supplier는 standard functional interfaces 중 하나이다. Consumer => Interface Consumer Supplier -> Interface Supplier Consumer의 경우 매개값은 있고, 리턴값은 없다. Supplier의 경우 매개값은 없으며, 리턴값이 있다. Consumer consumer = str -> System.out.println(str + " 8"); consumer.accept("Java"); // accept 함수 구현 //Java출력 Supplier intSupplier = () -> { int num = (int) (Math.random() * 6) + 1; return num; }; // 람다식 int num = i..
-
[Java]Optional 활용법JAVA 2021. 12. 17. 20:02
1. ifPresent() - get() 대신 orElse()/orElseGet()/orElseThrow() 쓰기 더 직관적으로, 코드를 한줄이라도 줄일 수있다. // 안 좋은 예시 Optional member = ...; if (member.isPresent()) { return member.get(); } else { return null; } // 좋은 예시 Optional member = ...; return member.orElse(null); // 안 좋은 예시 Optional member = ...; if (member.isPresent()) { return member.get(); } else { throw new NoSuchElementException(); } // 좋은 예시 Optio..
-
[Java] OptionalJAVA 2021. 12. 17. 15:58
Optional클래스는 래퍼클래스다. Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있으며, 보다 직관적인 처리를 할 수 있다. Optinonal 객체 생성 //filter Optional.of("True").filter((value)-> "True".equals(value)).orElse("No Data"); //"True" Optional.of("False").filter((value)-> "True".equals(value)).orElse("No Data"); //"No Data" //map Optional.of("1").map(Integer::valueof).orElseThrow(NoSuchElementException..
-
[Java] java8 streamJAVA 2021. 12. 17. 00:54
java8부터 지원이 된 stream은 람다함수형식으로 간결하고 직관적으로 요소들을 처리가 가능한 기능이다. 이러한 stream을 이용해 for문 등 직관적이지 않은 처리들을 깔끔하게 처리할 수 있다. Stream의 구조 stream의 구조는 크게 세가지로 볼 수 있다. 1. stream의 생성 2. 중개 연산 3. 최종 연산 세가지로 구성되있으며, 중개연산은 연산결과를 stream형태로 반환하기 때문에 연속적으로 사용할 수 있다. 대략적인 구조는 데이터소스객체집합.stream생성().중개연산().최종연산(); 이다. Stream 생성 스트림 api는 다음과 같은 다양한 종류의 소스들에 사용할 수 있다. 1. 컬렉션 2. 배열 3. 가변 매개변수 4. 지정된 범위의 연속된 정수 5. 특정 타입의 난수 6..
-
[Java] 메소드 참조(method reference)JAVA 2021. 12. 16. 18:57
메소드 참조(method reference)는 람다 표현식이 단 하나의 메소드만을 호출하는 경우에 람다 표현식에서 불필요한 매개변수를 제거하고 사용할 수 있도록 해줍니다. 문법 클래스 이름::메소드 이름 or 참조변수 이름::메소드 이름 예제 (a, b) -> Class.function(a, b); // 람다 표현식 Class::function; // 메소드 참조 s -> s.toUpperCase(); // 람다 표현식 String::toUpperCase; // 메소드 참조 생성자 참조 생성자를 호출하는 람다 표현식도 메소드 참조를 이용할 수있다. 예제 (a) -> {return new Object(a); } //람다 표현식 Object::new; // 메소드 참조 출처 : 코딩의 시작, TCP School
-
[Spring] JPA 중복 컬럼 에러Spring 2021. 12. 9. 17:05
엔티티 설계 중 이해안되는 에러가 떴다. 대충 해석하자면 키매핑을 잘못했다는 뜻이였다. 기존의 내 설계는 이런식으로 진행했었다. 처음에 내가 @JoinColumn를 이해했을 때는 매핑할 외래키를 테이블과 엮어 이름을 설정해야 한다고 이해했어서 이런식으로 설정햇었다. 그래서 오류를 구글링 해보니 @JoinColumn에 대한 오해가 있었다라는걸 알게 됬다. @JoinColumn은 필드의 엔티티를 추적해서 그 엔티티의 PK를 매핑해주는 기능이였었다. name설정에 매핑하는 엔티티명과 변수명이 꼭 들어가야할 필요가 없는것이였다. 오히려 name은 내 엔티티에서 외래키 컬럼명을 만들어주는 개념이였다. 그래서 이렇게 이름을 따로 설정해주니 별문제 없이 돌아가는 것을 확인했다.
-
[DB] 다대다 관계 테이블의 PK 설정방법DB 2021. 12. 3. 01:01
다대다 관계 테이블의 PK를 설정하는 방법은 두가지가 있다. 1. FK 두개를 키로 설정하는 방법 2. generatevalue를 써 의미없는 키값을 쓴다. 두개의 방법에는 장단점이 존재하는데, 인프런 스프링 강의의 김영한 선생님은 2번을 추천하신다. 그 이유는 유연성에서 장점을 가져올 수 있기때문이다. 1번으로 구현을 하면 그 순간에는 장점이 참 많은데, 운영을 하면 애플리케이션이 계속 발전하게 된다. id가 의미있는 데이터에 종속되어있는 식으로 걸려있으면, 시스템을 유연성있게 갈아치기 어려울 수 있다고 한다. 다대다 관계 테이블에 하나의 또 참조값이 들어가게 되면 1번의 경우 디비를 크게 업데이트 해야되는 경우가 생길 수 있다. 그리고 2번의 경우엔 정 필요하면 제약조건을 추가해 1번의 장점을 어느정..