My footsteps

김영한 '스프링 입문' / 4 본문

Develop/곤부📙

김영한 '스프링 입문' / 4

밀김 2023. 10. 3. 16:00
728x90

 

 

 

 

 

 

 

 

 

 

 

@Transactional : 테스트 케이스에 이어노테이션이 있으면 테스트 완료후에 항상 롤백을해서 DB에 데이터가 남지 않으므로 다음테스트에 영향을 주지않음

 

 

단위테스트 : 자바코드만 실행해보는거

 

통합테스트 : 스프링 컨테이너랑 디비까지연동해서 테스트해보는거

 

* 순수한 단위테스트가 훨씬 더 좋은거다

 

 

 

 

 


jdbcTemplate

 

 

 

// jdbc템플릿 사용방법(레퍼지토리에 임플리먼츠 받고)

private final JdbcTemplate jdbcTemplate;

@Autowired
public JdbcTemplateMemberRepository(DataSource dataSource){
	jdbcTemplate = new JdbcTemplate(dataSource);
}

 

 

테스트케이스 잘작성하는게 굉장히 중요하다..

 

 

 

 

 


JPA

 

 

 

jpa를 사용하면 기본적인 SQL도 jpa가 짜주기때문에 그런것들은 신경을 안써도 돼서 좀더 객체지향적으로 개발을 할수있게 해준다

 

 

< jpa 설치법 >

build.gradle에 이한줄 추가하고 그래들 재실행

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

 

어플리케이션 프로퍼티스에

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none

이렇게 적어주구,하이버네이트 라이브러리 추가되었는지 확인

 

 

 

 

jpa는 인터페이스이고 구현체는 하이버네이트이다

 

 

 

DB가 id를 자동생성해주는걸 아이덴티티 라고 한다

 

 

 

엔티티에 @Entity @Id @GeneratedValue(strategy = GenerationType.IDENTiTY) 이렇게 어노테이션 달아주면 jpa가 동작할수 있다 

 

 

 

jpa는 entitymanager로 동작한다

 

 

 

jpa로 저장하는법 이렇게 하면 끝난다. 퍼시스트 뜻이 지속하다 인데 영원히 저장하다..뭐 이렇게 받아들이면 될듯

 

 

findById는 이러게

 

 

findAll (m=member) 쿼리문처럼 *이나 m.id 이런게 아닌 멤버객체 그 자체를 셀렉트 함 이게 JPQL 이라는 문법임

 

 

 

 

 

@Override
public Optional<Member> findByName(String name) {
List<Member> result = em.createQuery("select m from Member m where m.name = :name",Member.class)
.setParameter("name",name) // 쿼리의 name 매개변수에 전달된 이름 설정
.getResultList(); // 쿼리를 실행하고 결과를 리스트로 받기
return result.stream().findAny(); //옵셔널로 반환
}

 

 

 

PK를 사용하지 않는거는 JPQL을 사용함

 

 

 

 

 

 

 

 

 

728x90

'Develop > 곤부📙' 카테고리의 다른 글

JavaScript / 1  (0) 2023.10.06
김영한 '스프링 입문' / 5  (0) 2023.10.05
김영한 '스프링 입문' / 3  (0) 2023.09.30
게시판 만들기  (0) 2023.09.25
김영한 '스프링 입문' / 2  (0) 2023.09.14