데브코스 W9D1

코끼릭·2022년 5월 9일
0

TIL

목록 보기
25/36

스프링의 데이터 액세스 방법

JDBC Template

데이터베이스 드라이버마다의 구현체 클래스의 인터페이스를 사용해 다양한 종류의 데이터베이스에 접근할 수 있고 JdbcTemplate api의 sql문을 수행한 결과문인 resultSet을 도메인 객체로 변환해서 사용한다.

Mybatis

Jdbc template의 경우 쿼리의 결과로 나온 resultSet의 결과를 직접 도메인 객체로 생성해줘야 되는 불편함을 개선한 것으로 반복적인 crud문을 간단한 인터페이스 사용으로 대체가 가능한 장점을 가지고 있다.

@Getter
@Setter
@AllArgsConstructor
@Alias("Article")
public class Article {
    private Long id;
    private String title;
    private String author;
}

@Mapper
public interface ArticleMapper {
	@Insert("Insert into Article(title) values (#{title})")
	public Long save(Article article);
    
    @Update("Update Article set title= #{title} where id=#{id}")
	public void updateArticle(Article article);

	@Delete("Delete from Article where id=#{id}")
	public void deleteArticleById(Long id);

	@Select("SELECT Article.id, Article.title FROM Article 
  WHERE article.id = #{id}")
	Article getPerson(Long id);
}

JPA

자바에서 사용되는 ORM 기술 표준으로 관계형 데이터베이스의 값을 엔티티 객체로 변환시켜주고 자동으로 crud기능을 기본으로 제공하는 repository 인터페이스를 생성해주는 데이터 액세스 방식의 최종 개선판으로 엔티티 객체와 데이터베이스 값이 자동으로 매핑되어 객체 중심의 생산적인 개발이 가능하여 OOP의 특징을 살릴 수 있는 것이 특징이다.

하지만 그 내부를 보면 결국 개발자가 JPA를 사용하게 될 때 엔티티값의 변화를 자동으로 감지하여 해당하는 SQL문을 JDBC api를 통해 수행하게 되는 점은 변함이 없다. 대표적인 구현체로는 Hibernate가 있다.

@Entity
@Getter
@Setter
@AllArgsConstructor
public class Book {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
}

@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
}

@Service
public class BookService {

    @Autowired
    private BookRepository bookRepository;

    public List<Book> list() {
        return bookRepository.findAll();
    }
}

JPA
Entity
Hibernate

profile
ㅇㅅㅇ

0개의 댓글