Hibernate

Hibernate는 ORM 방식으로 JDBC Raw 쿼리를 만들어주는 편리한 라이브러리입니다. ORM이란 무엇인가? Object-Relational Mapping의 약자로, "객체(Object)"와 “관계형 데이터(Relational Database)” 간의 데이터를 자동으로 매핑(Mapping) 해주는 기술입니다. Hibernate에서는 객체를 관계형 데이터로 자동 매핑하는 기술을 통해 객체와 레코드(Row) 를 일대일로 연결해 개발자가 SQL을 직접 작성하지 않고도 DB 데이터를 객체처럼 다룰 수 있는 기술을 제공합니다. Hbernate에서는 다음과 같이 EntityManager라는 클래스를 통해 객체를 데이터베이스에 저장(persist)하거나 데이터를 객체로 변환(load)할 수 있습니다.// 객체..
JPA는 Hibernate의 구현체 중 하나로, Interface 타입으로 사용하기 때문에 내구 구현에 대해 잘 모르고 사용하는 경우가 많습니다. 오늘은 우리가 사용하고 있는 findAll() 메서드는 내부적으로 어떻게 호출될지 이번 포스팅을 통해 알아보려고 합니다. JpaRepositoryJpaRepository는 Interface 타입으로 선언되었기 때문에 아래 코드와 같이 내부 구현을 알 수 없습니다. 그렇기 때문에 Spring Context가 띄워질 때, JpaRepository가 어떤 구현체를 사용하는지 알아보겠습니다.@NoRepositoryBeanpublic interface JpaRepository extends ListCrudRepository, ListPagingAndSortingRepo..
작성 계기 지난 리팩토링 프로젝트에서 Spring Boot 3로 업그레이드 하면서 JDK 17로 바꾸게 됐는데, 이에 따라 여러 Dependencies를 고치게 되었다. 이에 따라 다양한 이슈가 발생했었는데, 가장 기억에 남았던 이슈라 글로 정리 해 본다. 이슈 사항 Kotlin Entity 에서 @OneToMany List fundImageList 형식으로 사용하는 곳에서 RuntimeExecption 발생 MutableList로 고치니 잘 동작 => 이대로 끝나면 발전 가능성이 없는 것이다. 무엇이 문제였을까? 공변성과 반공변성 Effective Java와 Kotlin In Action에서 공변 / 반공변에 대해 학습했었는데 와닿지 못 했었던 내용이라 그냥 달달 외웠었다. 지금 이슈가 발생했던 부분은..
JPA란?Java Persistent Api의 약자.자바 ORM에 대한 기술 명세서로, 자바 애플리케이션에서 RDB를 사용하는 방식을 정의한 인터페이스이다.JPA는 하나의 기술 명세서JPA는 특정 기능을 모아 놓은 라이브러리가 아니고,자바 애플리케이션에서 ORM 방식으로 DB에 접근하기 위한 방식을 정의한 인터페이스의 모음이다.JPA는 영속성을 통해서 Application과 DB의 데이터를 운반한다.한마디로, JPA는 RDB를 어떻게 사용할지에 대한 정의라고 이해하면 편할듯하다.JPA 영속성?Spring에서는 @Entity 어노테이션을 붙인 클래스를 통해 영속성을 관리(Entity에 대한 추가 글 필요!)JPA에서 영속성이란, 하나의 실행 흐름(컨텍스트)이라고 이해하면 될 듯하고, 우리가 흔히 아는 트랜..
기존에 jdbc+Mybatis를 통하여 개발 프로젝트를 만들다가 JPA를 공부하면서 까먹지 않기 위해 블로그에 기록해 놓았다. 우선 간략하게 JPA를 소개하면, JPA는 기존의 RDB 방식에서 벗어나 ORM을 통해 객체 지향적인 테이블 설계가 가능하고, 기존의 SQL Query가 아닌 method를 통해 직관적인 데이터 조작이 가능하다. JPA의 가장 큰 특징은 아무래도 기존에 데이터를 전달하는 목적(DTO,VO)으로 사용했던 Mybatis와는 달리 객체 지향의 장점(캡슐화,추상화,상속 등의 다형성)을 살릴 수 있다는 것이다. 지금은 환경설정에 대한 글이므로, 자세한건 다음번에 이론을 정리할 때 써야겠다.. - 우선 프로젝트를 새로 만든다면, [New] -> [spring starter project] ..
스프링 부트에서 hibernate 와 JPA 사용 도중 아래와 같은 에러 메세지가 발생. No default constructor for entity 알고보니 해당 Entity에 default constructor를 안만들어줬었다..
이번 스프링 부트를 통한 MVC 설정은 JPA - MySql - Thymeleaf를 통해 만들었습니다. - [build.gradle]에 dependency 추가dependencies { //jpa,jdbc관련 dependency implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation("commons-dbcp:commons-dbcp:1.4") implementation("org.springframework.boot:spring-boot-starter-jdbc:2.0.1.RELEASE") i..
프로젝트 만들기(feat. IntelJ) - web만 의존성 체크 후 Next - [auto-import]를 체크해주지 않으면, gradel.duild가 변경되어도 자동으로 빌드가 안된다.(수동으로 빌드를 눌러야함!) 프로젝트 실행 셋팅 - 스프링 부트 플러그인 추가 Gradle - Wrapper : 스프링 부트 프로젝트를 생성하면, gradle-wrapper에 의해 해당 프로젝트에 gradle이 자동으로 설치됨 - gradle 멀티 프로젝트 구성 : 멀티 프로젝트를 구성하면, 코드의 재사용성이 높아지고 한 서비스에 관련된 여러 프로젝트를 마치 하나의 통합 프로젝트처럼 관리할 수 있다 - [setting.gradle]에 다음과 같이 루트 프로젝트를 추가 - 테스트로 사용할 demo-web 모듈 생성 - ..
iron_jin
'Hibernate' 태그의 글 목록