JDBC

  • JDBC는 DB에 접근하고, SQL을 날릴 수 있게 해주는 자바의 표준 API
  • DriverMAnager를 사용해 각 드라이버들을 로딩, 해제한다.

[출처] https://skyblue300a.tistory.com/7

JPA

  • JPA는 자바 진영 ORM의 API 표준 명세
  • 내부적으로 JDBC를 사용

[출처] https://skyblue300a.tistory.com/7

Spring JDBC(SQL Mapper → MyBatis)

  • JDBC에서 DriveManager가 하는 일들을 JdbcTemplate에게
  • 쿼리문을 사용한다.

[출처] https://skyblue300a.tistory.com/7

Spring Data JDBC

  • Spring data는 Spring에서 DB를 쉽게 다루기 위해 시작한 프로젝트
  • @Query 어노테이션 사용

[출처] https://skyblue300a.tistory.com/7

Hibernate

  • JPA를 구현한 프레임워크
  • Spring은 기본 JPA vendor로 Hibernate를 사용

[출처] https://skyblue300a.tistory.com/7

정리

 

 

❗ 나는 Hibernate를 사용해 구현할 예정..!!!! ❗

'Web > Spring' 카테고리의 다른 글

[Annotation] @PathVariable  (0) 2021.08.06
[Pageable] 페이징 처리 - 기본  (0) 2021.08.06
[설정] 자동망치 기능  (0) 2021.08.06
[설정] application.properties  (0) 2021.08.04
[CRUD] R구현  (0) 2021.08.02

스프링을 처음 실행시키거나 DB를 초기화시킬 때 

datasource:
	initialization-mode: always
    
  jpa:
    hibernate:
      ddl-auto: create

위의 코드로 실행시켜주고

 

datasource:
	initialization-mode: never
    
  jpa:
    hibernate:
      ddl-auto: update

그 다음에 다시 바꾸어준다!

 

hibernate의 ddl-auto

  • udpate : 기존의 스키마를 유지하며 JPA에 의해 변경된 부분만 추가
  • validate : 엔티티와 테이블이 정상적으로 매핑되어있는지만 검증
  • create : 기존에 존재하는 스키마를 삭제하고 새로 생성
  • create-drop : 스키마를 생성하고 애플리케이션이 종료될 때 삭제
  • none : 초기화 동작을 하지 않음

 

❗ 도메인 파일에서 변경이 있을 때 해주면 좋다! local환경일 경우 local에서도 적용을 해줘야 하는 듯.. ❗

'Web > Spring' 카테고리의 다른 글

[CRUD] R구현  (0) 2021.08.02
[CRUD] C구현  (0) 2021.08.02
[ERROR] Pageable import  (0) 2021.08.02
[ERROR] Querydsl import  (0) 2021.08.02
[Util] ControllerNameInterceptor  (0) 2021.07.30

Persistence(영속성)

  • 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는 데이터의 특성
  • Object Persistence : 메모리 상의 데이터를 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 영구적으로 저장하여 영속성 부여
  • JDBC, Spring JDBC, Persistence Framework(Hibernate, Mybatis 등)

ORM(Object Relational Mapping)

  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것
  • DB 데이터 ← 매핑 → Object 필드
  • Persistant API (JPA, Hibernate 등)

❗ 참고 : https://gmlwjd9405.github.io/2019/02/01/orm.html

JPA(Java Persistence API)

  • Hibernate : ORM 프레임워크, Open Source SW
  • JPA : 현재 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음
    • JPA 인터페이스를 구현한 대표적인 오픈소스가 Hibernate

JPA의 동작과정

  • JPA는 애플리케이션과 JDBC 사이에서 동작

JPA 사용이유

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성
  • 유지보수
  • 성능 최적화 기능

❗ 참고 : https://gmlwjd9405.github.io/2019/08/04/what-is-jpa.html

 

사용법

Dependency추가

<dependency> 
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId> 
</dependency> 
<dependency> 
	<groupId>com.h2database</groupId> 
	<artifactId>h2</artifactId> 
</dependency> 
<dependency> 
	<groupId>org.springframework.boot</groupId> 
	<artifactId>spring-boot-starter-test</artifactId> 
	<scope>test</scope> 
</dependency> 
<dependency> 
	<groupId>org.projectlombok</groupId> 
	<artifactId>lombok</artifactId> 
	<optional>true</optional> 
</dependency>

 

Domain 생성 → Repository 생성 → Service 생성 → Controller 생성

 

properties 설정

<!--application.yml-->
jpa:
    database-platform: kr.co.userinsight.ams.dialect.CustomMariadbDialect
    hibernate:
      ddl-auto: update
      naming:
        physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
        implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl
    open-in-view: true
<!--application-local.yml-->
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:

 

JpaRepository

(JpaRepository에서 엄청 많은 기능을 제공)

인터페이스를 상속 받아서 사용하면 된다.(extends)

public interface ItemRepository extends JpaRepository<Item, Long> {
    // 비어있음
}

 

 

공통 인터페이스 기능

  • JpaRepository 인터페이스 : 공통 CRUD 제공
  • <엔티티, 식별자>로 설정

 

자주 쓰는 정렬 기능을 위해 Sort 삽입 가능

public interface MemberRepository extends JpaRepository<Member, Long> {
    List<Member> findByName(String username, Sort sort);
}

 

추가로 페이징을 위한 기능도 존재

public interface MemberRepository extends JpaRepository<Member, Long> {
    Page<Member> findByName(String username, Pageable pageable);
}

 

@Query 어노테이션을 사용해서 직접 JPQL을 지정 가능

public interface MemberRepository extends JpaRepository<Member, Long> {
    
    @Query("select m from Member m where m.username = ?1")
    Member findByUsername(String username, Pageable pageable);
}

 

Web 페이징과 정렬 기능

  • /members?page=0&size=20&sort=name,desc
@RequestMapping(value = "/members", method = RequestMethod.GET)
String list(Pageable pageable, Model mobel) {}

 

 

❗ JPA를 적용하면 개발자는 인터페이스만 만들면 된다. 알아서 동적으로 객체를 생성해서 주입해줌 ❗

❗ JPA의 한계가 존재한다! 따라서 Querydsl도 연동해서 같이 사용한다.. 다음엔 Querydsl을 확인해야지 ❗

'Web > Spring' 카테고리의 다른 글

[Util] ControllerNameInterceptor  (0) 2021.07.30
[배경] Querydsl  (0) 2021.07.28
[배경] Maven  (0) 2021.07.27
[배경] Template Engine  (0) 2021.07.27
[배경] Spring Security  (0) 2021.07.27

+ Recent posts