@Configuration
@RequiredArgsConstructor
public class MyBatisConfig {
private final ItemMapper itemMapper;
@Bean
public ItemService itemService(){
return new ItemServiceV1(itemRepository());
}
@Bean
public ItemRepository itemRepository(){
return new MyBatisItemRepository(itemMapper);
}
}
ItemMapper가
@Mapper 이거 붙여서
xml이랑 연동되서 뭔가 구현체로 하나 만들어 진 후 빈으로 등록된다.
그래서 주입받을 수 있다.
근데 인텔리제이 문제인지 빨간 줄 뜨기는 하는데, 실행하는 건 문제없다.
리포지토리 바꾸고,
@Repository
@RequiredArgsConstructor
public class MyBatisItemRepository implements ItemRepository {
private final ItemMapper itemMapper;
@Override
public Item save(Item item) {
itemMapper.save(item);
return item;
}
@Override
public void update(Long id, ItemUpdateDto updateParam) {
itemMapper.update(id, updateParam);
}
@Override
public Optional<Item> findById(Long id) {
return itemMapper.findById(id);
}
@Override
public List<Item> findAll(ItemSearchCond itemSearch) {
return itemMapper.findAll(itemSearch);
}
}
여기서 이제 ItemRepository 구현해서 쓰면 됨.
ItemMapper에 우리가
@Mapper
public interface ItemMapper {
void save(Item item);
void update(@Param("id") Long id, @Param("updateParam") ItemUpdateDto updateParam);
Optional<Item> findById(Long id);
List<Item> findAll(ItemSearchCond itemSearch);
}
save의 반환값은 없지만,
우리가 xml에서
<insert id="save" useGeneratedKeys="true" keyProperty="id">
이렇게 useGeneratedKeys 사용한다고 해줬고 keyProperty는 id라고 하면 item.id에 알아서 들어감.
그리고 객체는 주소를 직접 참조하는 거라 반영이 됨.
대충 이런 그림임
ItemMapper는 프록시로 생성되어 빈으로 등록됨.
@Import(MyBatisConfig.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 new TestDataInit(itemRepository);
}
}
MyBatisConfig 설정으로 import 해 줌
테스트와 실행 둘다 잘 됨.
MyBatis는 예외번역도 다 알아서 해줌. SQLException -> 스프링에서 제공하는DB접근 기술의 공통적인 Runtime예외
이런 거.
그리고, DB커넥션, 트랜잭션 관련 기능도 자동으로 MyBatis와 연동하고 동기화 해줌.
이런 부분은 MybatisAutoConfiguration 클래스가 자동으로 해 주는거임. 마이바티스 쓰면 기본으로 스프링에 등록되는 거 인 듯.
'스프링 > 6. 스프링 DB-2' 카테고리의 다른 글
23. JPA (0) | 2023.10.10 |
---|---|
22. 마이바티스 기능들. (0) | 2023.10.10 |
20. 마이바티스 적용 1 (0) | 2023.10.10 |
19. MyBatis 설정 (0) | 2023.10.09 |
18. MyBatis (0) | 2023.10.09 |