diff --git a/spring-db/src/main/java/hello/itemservice/ItemServiceApplication.java b/spring-db/src/main/java/hello/itemservice/ItemServiceApplication.java index 6e6c7153..950a3bf3 100644 --- a/spring-db/src/main/java/hello/itemservice/ItemServiceApplication.java +++ b/spring-db/src/main/java/hello/itemservice/ItemServiceApplication.java @@ -16,7 +16,8 @@ import javax.sql.DataSource; //@Import(MemoryConfig.class) //@Import(JdbcTemplateV1Config.class) //@Import(JdbcTemplateV2Config.class) -@Import(JdbcTemplateV3Config.class) +//@Import(JdbcTemplateV3Config.class) +@Import(MyBatisConfig.class) @SpringBootApplication(scanBasePackages = "hello.itemservice.web") public class ItemServiceApplication { diff --git a/spring-db/src/main/java/hello/itemservice/config/MyBatisConfig.java b/spring-db/src/main/java/hello/itemservice/config/MyBatisConfig.java new file mode 100644 index 00000000..ea5719a0 --- /dev/null +++ b/spring-db/src/main/java/hello/itemservice/config/MyBatisConfig.java @@ -0,0 +1,27 @@ +package hello.itemservice.config; + +import hello.itemservice.repository.ItemRepository; +import hello.itemservice.repository.mybatis.ItemMapper; +import hello.itemservice.repository.mybatis.MyBatisItemRepository; +import hello.itemservice.service.ItemService; +import hello.itemservice.service.ItemServiceV1; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@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); + } +} diff --git a/spring-db/src/main/java/hello/itemservice/repository/mybatis/ItemMapper.java b/spring-db/src/main/java/hello/itemservice/repository/mybatis/ItemMapper.java new file mode 100644 index 00000000..0b76e514 --- /dev/null +++ b/spring-db/src/main/java/hello/itemservice/repository/mybatis/ItemMapper.java @@ -0,0 +1,23 @@ +package hello.itemservice.repository.mybatis; + +import hello.itemservice.domain.Item; +import hello.itemservice.repository.ItemSearchCond; +import hello.itemservice.repository.ItemUpdateDto; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Optional; + +@Mapper +public interface ItemMapper { + + void save(Item item); + + void update(@Param("id") Long id, + @Param("updateParam")ItemUpdateDto updateParam); + + List findAll(ItemSearchCond itemSearchCond); + + Optional findById(Long id); +} diff --git a/spring-db/src/main/java/hello/itemservice/repository/mybatis/MyBatisItemRepository.java b/spring-db/src/main/java/hello/itemservice/repository/mybatis/MyBatisItemRepository.java new file mode 100644 index 00000000..edf0d1bd --- /dev/null +++ b/spring-db/src/main/java/hello/itemservice/repository/mybatis/MyBatisItemRepository.java @@ -0,0 +1,39 @@ +package hello.itemservice.repository.mybatis; + +import hello.itemservice.domain.Item; +import hello.itemservice.repository.ItemRepository; +import hello.itemservice.repository.ItemSearchCond; +import hello.itemservice.repository.ItemUpdateDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@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 itemId, ItemUpdateDto updateParam) { + itemMapper.update(itemId, updateParam); + } + + @Override + public Optional findById(Long id) { + return itemMapper.findById(id); + } + + @Override + public List findAll(ItemSearchCond cond) { + return itemMapper.findAll(cond); + } +} diff --git a/spring-db/src/main/resources/application.properties b/spring-db/src/main/resources/application.properties index 20cda924..b67e9bdd 100644 --- a/spring-db/src/main/resources/application.properties +++ b/spring-db/src/main/resources/application.properties @@ -9,4 +9,6 @@ spring.datasource.username=sa #Mybatis mybatis.type-aliases-package=hello.itemservice.domain mybatis.configuration.map-underscore-to-camel-case=true -logging.level.hello.itemservice.repository.mybatis=trace \ No newline at end of file +logging.level.hello.itemservice.repository.mybatis=trace + +mybatis.mapper-locations=classpath:mapper/**/*.xml diff --git a/spring-db/src/main/resources/mapper/ItemMapper.xml b/spring-db/src/main/resources/mapper/ItemMapper.xml new file mode 100644 index 00000000..0462956a --- /dev/null +++ b/spring-db/src/main/resources/mapper/ItemMapper.xml @@ -0,0 +1,36 @@ + + + + + + insert into item (item_name, price, quantity) + values (#{itemName}, #{price}, #{quantity}) + + + update item + set item_name=#{updateParam.itemName}, + price=#{updateParam.price}, + quantity=#{updateParam.quantity} + where id = #{id} + + + + + + diff --git a/spring-db/src/test/resources/application.properties b/spring-db/src/test/resources/application.properties index b66a3fd8..d62e340e 100644 --- a/spring-db/src/test/resources/application.properties +++ b/spring-db/src/test/resources/application.properties @@ -9,4 +9,6 @@ logging.level.org.springframework.jdbc=debug #Mybatis mybatis.type-aliases-package=hello.itemservice.domain mybatis.configuration.map-underscore-to-camel-case=true -logging.level.hello.itemservice.repository.mybatis=trace \ No newline at end of file +logging.level.hello.itemservice.repository.mybatis=trace + +mybatis.mapper-locations=classpath:mapper/**/*.xml \ No newline at end of file