분류 전체보기 1341

Ch04. MyBatis - MyBatis 적용

기본 ItemMapper @Mapper public interface ItemMapper { void save(Item item); void update(@Param("id") Long id, @Param("updateParam")ItemUpdateDto itemUpdateDto); Optional findById(Long id); List findAll(ItemSearchCond itemSearch); } MyBatis 매핑 XML을 호출해주는 매퍼 인터페이스이다. 이 인터페이스에는 @Mapper 애노테이션을 붙여주어야 한다. 그래야 MyBatis에서 인식할 수 있다. 이 인터페이스의 메서드를 호출하면 다음에 보이는 xml의 해당 SQL을 실행하고 결과를 돌려준다. ItemMapper 인터페이스의 구현..

Ch04. MyBatis - MyBatis 설정

mybatis-spring-boot-starter 라이브러리를 사용하면 MyBatis를 스프링과 통합하고, 설정도 아주 간단히 할 수 있다. mybatis-spring-boot-starter 라이브러리를 사용해서 간단히 설정하는 방법을 알아보자. 의존관계 추가 build.gradle dependencies { ... //MyBatis 추가 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' ... } 참고로 뒤에 버전 정보가 붙는 이유는 스프링 부트가 버전을 관리해주는 공식 라이브러리가 아니기 때문이다. 스프링 부트가 버전을 관리해주는 경우 버전 정보를 붙이지 않아도 최적의 버전을 자동으로 찾아준다 다음과 같은 라이브러리가..

Ch04. MyBatis - MyBatis 소개

MyBatis는 앞서 설명한 JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper이다. 기본적으로 JdbcTemplate이 제공하는 대부분의 기능을 제공한다. JdbcTemplate과 비교해서 MyBatis의 가장 매력적인 점은 SQL을 XML에 편리하게 작성할 수 있고 또 동적 쿼리를 매우 편리하게 작성할 수 있다는 점이다. 비교(문자 더하기) Before(JdbcTemplate) String sql = "update item " + "set item_name=:itemName, price=:price, quantity=:quantity " + "where id=:id"; After(MyBatis) update item set item_name=#{itemName}, price=#{p..

Ch03. 테스트 - @Transactional, 임베디드 모드 DB, 스프링 부트와 임베디드 모드

@Transactional 스프링은 테스트 데이터 초기화를 위해 트랜잭션을 적용하고 롤백하는 방식을 @Transactional 애노테이션 하나로 깔끔하게 해결해준다. @SpringBootTest @Transactional class ItemRepositoryTest { @Autowired ItemRepository itemRepository; /* @Autowired PlatformTransactionManager transactionManager; TransactionStatus status; @BeforeEach void beforeEach() { //트랜잭션 시작 status = transactionManager.getTransaction(new DefaultTransactionDefinition(..

Ch03. 테스트 - 데이터베이스 연동, 데이터베이스 분리, 데이터 롤백

데이터베이스 연동 데이터 접근 기술에 대해서 더 알아보기 전에 데이터베이스에 연동하는 테스트에 대해서 알아보자. 데이터 접근 기술은 실제 데이터베이스에 접근해서 데이터를 잘 저장하고 조회할 수 있는지 확인하는 것이 필요하다 src/test/resources/application.properties spring.profiles.active=test spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.username=sa #jdbcTemplate sql log logging.level.org.springframework.jdbc=debug Test에 데이터베이스 연결을 한다. Test 실행 @SpringBootTest class It..

Ch02. 스프링 JdbcTemplate - JdbcTemplate 기능 정리

주요 기능 JdbcTemplate 순서 기반 파라미터 바인딩을 지원한다. NamedParameterJdbcTemplate 이름 기반 파라미터 바인딩을 지원한다. (권장) SimpleJdbcInsert INSERT SQL을 편리하게 사용할 수 있다. SimpleJdbcCall 스토어드 프로시저를 편리하게 호출할 수 있다. https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#jdbc-simple-jdbc-call-1 Data Access The Data Access Object (DAO) support in Spring is aimed at making it easy to work with data acces..

Ch02. 스프링 JdbcTemplate - JdbcTemplate(SimpleJdbcInsert)

JdbcTemplate은 INSERT SQL를 직접 작성하지 않아도 되도록 SimpleJdbcInsert라는 편리한 기능을 제공한다. JdbcTemplateItemRepositoryV3 /** * SimpleJdbcInsert */ @Slf4j public class JdbcTemplateItemRepositoryV3 implements ItemRepository { private final NamedParameterJdbcTemplate template; private final SimpleJdbcInsert jdbcInsert; public JdbcTemplateItemRepositoryV3(DataSource dataSource) { this.template = new NamedParameterJd..

Ch02. 스프링 JdbcTemplate - JdbcTemplate(이름 지정 파라미터)

누군가 SQL 코드의 순서를 변경하게 된다면 어떻게 될까 => ( price와 quantity의 순서를 변경했다.) Before String sql = "update item set item_name=?, price=?, quantity=? where id=?"; template.update(sql, itemName, price, quantity, itemId); After String sql = "update item set item_name=?, quantity=?, price=? where id=?"; template.update(sql, itemName, price, quantity, itemId); 결과적으로 price 와 quantity 가 바뀌는 매우 심각한 문제가 발생한다. 이런 일이 없을..

Ch02. 스프링 JdbcTemplate - JdbcTemplate 적용

전체 코드 /** * JdbcTemplate */ @Slf4j public class JdbcTemplateItemRepositoryV1 implements ItemRepository { private final JdbcTemplate template; public JdbcTemplateItemRepositoryV1(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); } @Override public Item save(Item item) { String sql = "insert into item(item_name, price, quantity) values (?, ?, ?)"; KeyHolder keyHolder = new Gen..

Ch02. 스프링 JdbcTemplate - JdbcTemplate 소개와 설정

SQL을 직접 사용하는 경우에 스프링이 제공하는 JdbcTemplate은 아주 좋은 선택지다. JdbcTemplate 은 JDBC를 매우 편리하게 사용할 수 있게 도와준다. 장점 설정의 편리함 JdbcTemplate은 spring-jdbc 라이브러리에 포함되어 있는데, 이 라이브러리는 스프링으로 JDBC를 사용할 때 기본으로 사용되는 라이브러리이다. 그리고 별도의 복잡한 설정 없이 바로 사용할 수 있다. 반복 문제 해결 JdbcTemplate은 템플릿 콜백 패턴을 사용해서, JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업을 대신 처리해준다. 개발자는 SQL을 작성하고, 전달할 파리미터를 정의하고, 응답 값을 매핑하기만 하면 된다. 우리가 생각할 수 있는 대부분의 반복 작업을 대신 처리해준다. 커넥..