스프링/6. 스프링 DB-2 59

19. MyBatis 설정

먼저 라이브러리에 추가 시켜줘야 한다. build.gradle에 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' 뒤에 버전정보가 붙어야 하는 것들은, 스프링이 공식지원을 하지 않는 것 들이다. 여튼 라이브러리에 추가 하고, mybatis.type-aliases-package=hello.itemservice.domain mybatis.configuration.map-underscore-to-camel-case=true logging.level.hello.itemservice.repository.mybatis=trace application.properties에 이렇게 추가해 준다. mybatis.type-aliases-p..

18. MyBatis

MyBatis는 JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper임. JdbcTemplate가 제공하는 대부분의 기능을 제공. 그래서 MyBatis를 선택했다면 둘이 병행하지 않고 MyBatis만 사용해도 충분할거임. 가장 매력적인 점은 SQL을 XML에 편리하게 작성할 수도 있고, 동적 쿼리도 편리하게 작성할 수 있음. xml에 쓴 거 동적쿼리. 보통 JPA를 쓰다가도 순수쿼리를 작성하여 처리해야 할 때가 있다. 그때도 보통 JdbcTemplate를 쓰면 대부분 해결이 된다. 근데 좀 복잡하게 동적쿼리로 작성해야 할 때면 MyBatis를 쓰면 된다. MyBatis는 별도로 조금 설정을 해줘야 할 필요성이 있다. 이게 단점이라면 단점이다. 그리고 공식문서를 한글로 누가 번역을 잘 해..

17. 스프링부트의 임베디드 DB

사실 데이터소스에 대해 별도의 설정을 주지 않으면 스프링부트는 자동으로 임베디드 DB를 만들어 준다. @Import(JdbcTemplateV3Config.class) @SpringBootApplication(scanBasePackages = "hello.itemservice.web") public class ItemServiceApplication { public static void main(String[] args) { SpringApplication.run(ItemServiceApplication.class, args); } @Bean @Profile("local") public TestDataInit testDataInit(ItemRepository itemRepository) { return n..

16. 임베디드 모드 DB

H2 DB는 자바로 개발되어 있다. JVM안에서 메모리 모드로 동작하는 특별한 기능을 제공한다. 즉, 휘발성인 모드 이다. DB를 애플리케이션에 내장해서 함께 실행한다고 해서 임베디드 모드라고 한다. 애플리케이션이 종료되면 임베디드 모드로 동작한 H2 DB도 함께 종료되고 데이터도 모두 휘발된다. 하는 방법이 어렵지는 않다. @Import(JdbcTemplateV3Config.class) @SpringBootApplication(scanBasePackages = "hello.itemservice.web") public class ItemServiceApplication { public static void main(String[] args) { SpringApplication.run(ItemService..

14. 데이터 롤백

테스트용 DB에서 각 테스트를 끝마치고 난 뒤 원래 상태로 되돌릴 좋은 방법은 바로 롤백이다. 오토커밋 모드를 꺼두면 커밋을 하기 전 까지 내 세션에만 반영이 되어 있기 때문에, 궁극적으로는 DB에 반영이 되지 않는 것이다. 그 상태로 테스트를 하다가, 테스트가 끝난 후, Rollback 시켜버리면 된다. @BeforeEach에 오토커밋 모드를 끈 후, 테스트를 마치고 나면 @AfterEach에서 롤백을 하고 오토커밋 모드를 켜서 원래 상태로 되돌려 놓는다. @SpringBootTest class ItemRepositoryTest { @Autowired ItemRepository itemRepository; @Autowired PlatformTransactionManager transactionManag..

13. 테스트용 DB와 서버용 DB 분리

이제 아예 테스트용 DB를 따로 만들었음. jdbc:h2:tcp://localhost/./testcase 이걸로 만듦. 이제 테스트용 DB는 여기다가 쓸 거니 test의 application.properties에 명시해 줌. spring.profiles.active=test spring.datasource.url=jdbc:h2:tcp://localhost/./testcase spring.datasource.username=sa spring.datasource.password=1234 이제 앞으로 test 하위의 코드로 테스트 하면 dataSource를 저기서 가져오기 때문에, 저기 DB를 참조할거임. 격리는 했다. 이제는 테스트 후 DB를 원래상태로 되돌려 놓게끔 해야 한다. 테스트는 다른 테스트와 격리..

12. DB 접근 기술 테스트 하는 법

이제 DB 기술을 직접 서비스 하기 전에 CRUD 등 테스트 해보는 게 필요하니, 테스트 할 때마다 직접 서버를 띄워서 하기보다는, 따로 테스트를 편리하게 만드는 게 좋음. 테스트에 @SpringBootTest 이 애노테이션이 붙어 있으면, 상위의 @Import(JdbcTemplateV3Config.class) @SpringBootApplication(scanBasePackages = "hello.itemservice.web") public class ItemServiceApplication { public static void main(String[] args) { SpringApplication.run(ItemServiceApplication.class, args); } @Bean @Profile("..

11. JDBC 기능들

먼저 SimpleJdbcInsert 말 그대로 insert에 관한건데, insert를 진짜 간단하게 하게끔 도와주는 것이다. @Slf4j @Repository public class JdbcTemplateItemRepositoryV3 implements ItemRepository { private final NamedParameterJdbcTemplate template; private final SimpleJdbcInsert jdbcInsert; public JdbcTemplateItemRepositoryV3(DataSource dataSource) { this.template = new NamedParameterJdbcTemplate(dataSource); //커넥션을 얻어오고 그래야 되기 때문에 필..

10. 이름지정 파라미터2

우리가 주로 쓰는 이름지정 파라미터의 종류는 Map, MapSqlParameterSource BeanPropertySqlParameterSource 이렇게 있음 Sql 붙은 건 당빠 SqlParameterSource 상속받은거 Map은 그냥 쓰면 되고 MapSqlParameterSource는 그냥 Map처럼 쓰면 되는데, addValue해서 직접 key, value로 추가하고, 근데 이건 Sql에 좀더 특화된 기능을 가지고 있는 Map이라고 함. BeanPropertySqlParameterSource는 자바 빈 프로퍼티 규약을 통해 자동으로 파라미터 객체를 생성한다고 함. 예를 들어 getItemName -> itemName 저 itemName이 key가 되고 getItemName()해서 얻은 게 val..