검색결과 리스트
Spring 정리에 해당되는 글 68건
- 2021.08.05 스프링 입문 맛보기 8
- 2021.08.05 스프링 입문 맛보기 7
- 2021.08.04 스프링 입문 맛보기 6
글
스프링 입문 맛보기 8
인프런 강의 16일차.
- 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)
1. JPA (Java Persistence API)
- JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
- JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체중심의 설계로 패러다임을 전환할 수 있다.
- JPA를 사용하면 개발 생산성을 크게 높일 수 있다.
- 한국은 Mybatis를 많이 사용했으나 2015년 기점으로 JPA도 많이 올라옴
- JPA는 인터페이스일 뿐이고 이를 실제로 구현하는 것은 각 업체별로 마음에 드는 것을 사용하면 됨 (hibernate를 많이 씀)
*build.gradle 파일에 JPA, h2 데이터베이스 관련 라이브러리 추가
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
//implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
testImplementation('org.springframwork.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
> spring-boot-starter-data-jpa는 내부에 jdbc 관련 라이브러리를 포함한다. 따라서 jdbc는 제거해도 된다.
* 스프링 부트에 JPA 추가 설정
--resource/application.properties 파일
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Drive
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
- JPA가 관리하도록 추가하려면 @Entity 애노테이션을 클래스에 추가하면 됨
- PK는 @Id 애노테이션을 추가하면 됨
import javax.persistence.*;
@Entity
public class Member {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) //DB가 자동으로 만드는 identity 설정
private Long id;
private String name;
public Long getId(){
return id;
}
public void setId(Long id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
- 서비스 단에서 중복을 방지하고자 @Transaction을 걸어두어야 한다.
'Spring 정리' 카테고리의 다른 글
스프링 입문 맛보기 10 (0) | 2021.08.11 |
---|---|
스프링 입문 맛보기 9 (0) | 2021.08.05 |
스프링 입문 맛보기 7 (0) | 2021.08.05 |
스프링 입문 맛보기 6 (0) | 2021.08.04 |
스프링 입문 맛보기 5 (0) | 2021.07.14 |
설정
트랙백
댓글
글
스프링 입문 맛보기 7
인프런 강의 15일차.
- 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)
1. 스프링 JdbcTemplate
- 순수 Jdbc와 동일한 환경설정을 하면 된다.
- 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해준다. 하지만 SQL은 직접 작성해야한다.
* 스프링 JdbcTemplate 회원 리포지토리
private final JdbcTemplate jdbcTemplate; //jdbc 템플릿을 선언해줘야함
@Autowried
public JdbcTemplateMemberRepository(DataSource dataSource){ //스프링이 데이터소스 자동으로 Injection 해줌
jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public Optional<Member> findById(Long id){
List<Member> result = jdbcTempalte.query("select * FROM member where id = ?", memberRowMapper(), id);
return result.stream().findAny();
}
@Override
public Optional<Member> findByName(String name){
List<Member> result = jdbcTempalte.query("select * FROM member where name = ?", memberRowMapper(), name);
return result.stream().findAny();
}
@Override
public Optional<Member> findAll(Long id){
return jdbcTempalte.query("select * FROM member", memberRowMapper());
}
@Override
public Member save(Member member){
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("member").usingGeneratedKeyColumns("id");
Map<String, Object> parameters = new HashMap<>();
parameters.put("name", member.getName());
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
member.setId(key.longValue());
return member;
}
private RowMapper<Member> memberRowMapper(){
return new RowMapper<Member>(){
@Override
public Member mapRow(ResultSet rs, int rowNum) throws SQLException {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
}
}
/* 위와 동일한 로직을 lambda 형태로 변환
return (rs, rowNum) -> {
Member member = new Member();
member.setId(rs.getLong("id"));
member.setName(rs.getString("name"));
return member;
}
*/
}
'Spring 정리' 카테고리의 다른 글
스프링 입문 맛보기 9 (0) | 2021.08.05 |
---|---|
스프링 입문 맛보기 8 (0) | 2021.08.05 |
스프링 입문 맛보기 6 (0) | 2021.08.04 |
스프링 입문 맛보기 5 (0) | 2021.07.14 |
스프링 입문 맛보기 4 (0) | 2021.07.06 |
설정
트랙백
댓글
글
스프링 입문 맛보기 6
인프런 강의 14일차.
- 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (김영한 강사님)
* 스프링 통합 테스트 (스프링 컨테이너와 DB까지 연결한 통합 테스트를 진행해보자)
1.회원 서비스 스프링 통합 테스트
- 테스트는 제일 끝단이기 때문에 편한 방법으로 선언해서 사용하면 됨.
- @SpringBootTest,@Transacitional 태그를 사용하여 선언
- @SpringBootTest : 스프링 컨테이너와 테스트를 함께 실행한다. (스프링 서버를 새로 시작 후 테스트가 완료되면 서버가 종료된다. )
- @Transactional : 테스트케이스에 이 애노테이션이 있으면, 테스트 시작 전에 트랜잭션을 시작하고, 테스트 완료 후에 항상 롤백한다. (이렇게하면 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다.)
'Spring 정리' 카테고리의 다른 글
스프링 입문 맛보기 8 (0) | 2021.08.05 |
---|---|
스프링 입문 맛보기 7 (0) | 2021.08.05 |
스프링 입문 맛보기 5 (0) | 2021.07.14 |
스프링 입문 맛보기 4 (0) | 2021.07.06 |
스프링 입문 맛보기 3 (0) | 2021.05.04 |