JpaRepository |
JpaRepository<Entity, Id> 인터페이스 매직인터페이스 @Repository가 없어도 빈으로 등록해 줌 public interface DiaryRepository extends JpaRepository<Diary, Integer> { } |
@EnableJpaRepositories | (스프링부트에서 지원, 생략) 컨피규레이션 위에 올림. 스프링부트 시작은 @Import(JpaRepositoriesRegistrar.class) 핵심은 ImportBeanDefinitionRegistrar 인터페이스 : 스프링프레임워크 : 빈을 프로그래밍을 통해 등록가능. public class DiaryRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { GenericBeanDefinition beanDefinition = new GenericBeanDefinition(); beanDefinition.setBeanClass(Diary.class); beanDefinition.getPropertyValues().add("name","오잉"); registry.registerBeanDefinition("day", beanDefinition); } } |
jdbc | |
패러다임 불일치 | 릴레이션 - java 단위, 관계표현, 식별자 , 상속관계표현 => ORM 해결 매핑 메타데이터 기반. 생산성, 유지보수성, 성능. |
jpa 주의 | 반드시 발생하는 SQL 확인 |
? 출력 | logging.level.org.hibernate.SQL=debug logging.level.org.hibernate.type.descriptor.sql=trace binding parameter [2] as [VARCHAR] - [null] binding parameter [3] as [TIMESTAMP] - [null] binding parameter [4] as [VARCHAR] - [오늘이다.] binding parameter [5] as [BOOLEAN] - [true] binding parameter [6] as [INTEGER] - [3] |
스프링 데이터 | SQL & NoSQL 저장소, 지원프로젝트의 묶음 spring.io/projects/spring-data 스프링 데이터 모듈 : 스프링데이터 Common : 여러 저장소 지원 프로젝트의 공통기능 제공스프링데이터 REST: 저장소의 데이터를 하이퍼미디어 기반 Http 리소스로 REST API 제공 --------------------------- 스프링데이터 JPA : 스프링 데이터 Common 이 제공하는 기능에 jpa 관련 기능 추가. 스프링데이터 JDBC 스프링데이터 KeyValue --------------------------- 스프링데이터 MongoDB 스프링데이터 Redis....... |
non-invasive 논인베이시브 비침투적. 스프링 코드를 최대한 노출 시키지 않겠다.
* DB 조회 변경 과정
더보기
@Repository @Transactional public class AccountRepository { @PersistenceContext EntityManager entityManager; public Account add(Account account){ entityManager.persist(account); return account; } |
-> | @Repository @Transactional public class AccountRepository extends GenericRepository<Account, Long> { |
||||
-> JPA | package com.today10sec.diary.repository; import com.today10sec.diary.model.Diary; import org.springframework.data.jpa.repository.JpaRepository; public interface DiaryRepository extends JpaRepository<Diary, Integer> { } |
package com.today10sec.diary.etc;
import com.today10sec.diary.model.Diary;
import com.today10sec.diary.repository.DiaryRepository;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;
import java.util.HashSet;
import java.util.Set;
@Component
@Transactional
public class JpaRunner implements ApplicationRunner {
@PersistenceContext
EntityManager entityManager;
@Autowired
DiaryRepository diaryRepository;
@Override
public void run(ApplicationArguments args) throws Exception {
Diary diary = new Diary();
diary.setUse(true);
diary.setName("오늘이다.");
Session session = entityManager.unwrap(Session.class);
session.save(diary);
diaryRepository.findAll().forEach(diary1 -> System.out.println(diary1.getName()) );
}
}
'JAVA > spring' 카테고리의 다른 글
[1028 from 스프링 백기선 JPA] 스프링데이터 Common _ 쿼리, 비동기, 도메인, QueryDSL (추후 추가. ) (0) | 2021.05.03 |
---|---|
[1028 from 스프링 백기선 JPA] 스프링데이터 Common _ Repository, Interface, null (0) | 2021.05.03 |
[1028 from 스프링 백기선 JPA]Hibernate _ 엔티티, Cascade, Fetch, Query FROM EntityManager (0) | 2021.04.30 |
스프링 목차 (0) | 2021.04.29 |
[1028 FORM 백기선 스프링프레임워크 핵심기술] SpEL, AOP,Null-safety (0) | 2021.04.29 |