728x90
반응형

분류 전체보기 476

[6] JAVA 덧셈식 출력하기

문제설명 두 정수 a, b가 주어질 때 다음과 같은 형태의 계산식을 출력하는 코드를 작성해 보세요. a + b = c 입력 #1 4 5 출력 #1 4 + 5 = 9 [제출 답안] import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); System.out.println(a + " + " + b + " = " + (a + b)); } } [풀이과정] 단일 피 연산자 사이에 문자열 + 를 추가하고 마지막에 = 문자열을 더하여 문자열 연산으로 계산한 뒤 결과값을 ..

[5] JAVA 특수문자 출력하기

문제설명 다음과 같이 출력하도록 코드를 작성해 주세요. 출력 #1 !@#$%^&*(\'"?:; [제출 답안] import java.util.Scanner; public class Solution { public static void main(String[] args) { System.out.println("!@#$%^&*(\\'\"?:;"); } } [풀이과정] 핵심 : Escape squence \ 자바 println에서의 문자열 출력에서 이스케이프 시퀀스는 대표적으로 \n 줄개행 , \t 수평탭 등이 있다. 쌍따옴표로 묶여있는 문자열에 쌍따옴표 혹은 역슬레시를 출력하기 위해서는 해당 문자 앞에 역슬레시를 입력해준다. [다른사람 풀이] 충격적인 풀이를 발견했다. 심지어 8명이 아래와 같은 방법으로 풀었..

[JPQL] JOIN 원하는 엔티티 여러개 가져오기

JPA 객체 참조특성으로 JOIN이 되더라도 연관관계로만 데이터를 못가져 오는 경우, JPQL에서 인위적으로 JOIN을 걸어야하는 상황이 발생할때가 있습니다. 기본적인 쿼리는 아래와 같습니다. SELECT project.*, user_project.*, project_part.* FROM project LEFT JOIN user_project ON (user_project.project_no = project.project_no) AND (user_project.user_no = 1) LEFT JOIN project_part ON (project_part.project_part_no = user_project.project_part_no); 3개의 테이블을 JOIN해서 데이터를 모두 가져오거나 원하는 데..

Hibernate/JPQL 2023.09.13

[Swagger3] spring doc 2.1.0 설정 및 Map<String,Object> 스키마

swagger3는 SpringBoot3._버전에서 사용이 가능하고 SpringBoot2._ 버전에서는 사용이 불가능하다 SpringBoot2._ 버전에 적용할경우 아래 오류 발생. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration': Unsatisfied dependency expressed through method 'setConfigurers' parameter 0; nested exception is..

SpringFramework 2023.07.27

[JPA] EntityManager 기본 설정 및 개념 정의

EntityManager 기본설정 비영속상태 준영속상태 객체 영속화 트랜잭션 커밋 영속객체조회 쓰기지연 변경감지 플러쉬 EntityManager기본설정 [persistence.xml] EntityManagerFactory를 통해 등록한 Persistence Unit 이름을 지정해준다. public class JpaExampleMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabasic"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction()..

[JPA] UPDATE 변경감지와 병합 (DirtyChecking / Merge)

엔티티는 영속상태로 관리된다. 이렇게 영속상태에서 관리되는 엔터티의 값을 변경하게 되면 JPA는 Transaction Commit시점에 변경된 내용을 확인하고 Database에 반영한다. 이것을 '변경감지' 'DirtyChecking' 이라고 한다. 변경 감지(DirtyChecking) : Transaction commit시점에 엔티티의 변경을 감지해서 updateQuery를 날려준다. @SpringBootTest @Transactional public class ItemUpdateTest { @PersistenceContext EntityManager em; @Test @Rollback(false) public void updateTest() throws Exception { Book saveBook ..

[JPA] 영속성 전이와 고아객체 (CASCADE, orphaRemoval)

CASECADE ALL : 전체 적용 PERSIST : 영속 REMOVE : 삭제 MERGE : 병합 REFRESH : REFRESH DETACH : DETACH @Entity @Getter @Setter public class Parent { @Id @GeneratedValue @Column(name = "PARENT_ID") private Long id; private String name; @OneToMany(mappedBy = "parent") private List childList = new ArrayList(); /* 연관관계 편의 메소드 - childList에 값 추가, parent값 초기화 */ public void addChild(Child child) { childList.add(ch..

[JPA] 즉시로딩/지연로딩(Eager/Lazy) 과 JPQL N+1 이슈

지연로딩(Lazy)JPA는 지연로딩 전략을 지원한다.@ManyToOne(fetch = FetchType.LAZY)위와 같이 @XxxTOXxx 어노테이션의 fetch옵션을 통해 로딩 전략을 설정할 수 있으며 Eager, Lazy 두개의 전략을 설정할 수 있다.Eager : 즉시로딩연관관계 엔티티를 모두 조회한다.@ManyToXxxx fetch 옵션 기본값이다Lazy : 지연로딩현재 조회하려는 엔티티만을 조회하고, 연관관계 엔터티는 객체탐색으로 탐색하는 순간 조회된다.@XxxxToMany fetch 옵션 기본값이다[User Entity]@Entity(name = "USERS")@Setter@Getter@ToStringpublic class User { @Id @GeneratedValue @Colu..

[JPA] JPA에서 Proxy 객체란?

프록시 find() : 데이터베이스를 통해서 실제 엔티티 객체를 조회한다. getReference() : 데이터베이스 조회를 미루는 Proxy(가짜) 엔티티 객체를 조회한다. 위와같이 JPA에서는 em.find 뿐만 아니라 em.getReference()라는 메서드도 지원해준다. 아래 테스트 코드를 통해 find() 메소드로 User를 조회해 보자. [find() user 테스트코드] @SpringBootTest @Transactional @Commit class DemoApplicationTests { @PersistenceContext EntityManager em; @Test void Proxy() { User user = new User(); user.setUsername("hello"); em...