MyBatis - Mapped Statements collection does not contain value for~ 에러
2022. 10. 2. 13:40
데이터 접근 기술/MyBatis
Mapped Statements collection does not contain value for ~ 에러 발생시 확인해야 하는 부분 1. mapper id가 다를경우 - 대부분 이경우 - mapper파일에 가 중복되는지 체크 3. mapper location 세팅 확인 - 경로가 잘 잡혔는지. (프로젝트 처음 세팅을 했는데 안되는 경우 이 부분 확인) - classpath*:static/mappers/**/*Mapper.xml 이부분 (*가 없는 경우 *를 추가) org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error querying d..
MyBatis 기능 정리2 - 기타 기능
2022. 8. 17. 03:14
데이터 접근 기술/MyBatis
애노테이션으로 SQL 작성 다음과 같이 XML 대신에 애노테이션에 SQL을 작성할 수 있다. @Select("select id, item_name, price, quantity from item where id=#{id}") Optional findById(Long id); ● @Insert , @Update , @Delete , @Select 기능이 제공된다. ● 이 경우 XML에는 ~ 는 제거해야 한다. ● 동적 SQL이 해결되지 않으므로 간단한 경우에만 사용한다. 애노테이션으로 SQL 작성에 대한 더 자세한 내용은 다음을 참고하자. https://mybatis.org/mybatis-3/ko/java-api.html 문자열 대체(String Substitution) #{} 문법은 ?를 넣고 파라미터를..
MyBatis 기능 정리1 - 동적 쿼리
2022. 8. 16. 22:12
데이터 접근 기술/MyBatis
MyBatis에서 자주 사용하는 주요 기능을 공식 메뉴얼이 제공하는 예제를 통해 간단히 정리해보자. ● MyBatis 공식 메뉴얼: https://mybatis.org/mybatis-3/ko/index.html ● MyBatis 스프링 공식 메뉴얼: https://mybatis.org/spring/ko/index.html 동적 SQL 마이바티스가 제공하는 최고의 기능이자 마이바티스를 사용하는 이유는 바로 동적 SQL 기능 때문이다. 동적 쿼리를 위해 제공되는 기능은 다음과 같다. ● if ● choose (when, otherwise) ● trim (where, set) ● foreach 공식 메뉴얼에서 제공하는 예제를 통해 동적 SQL을 알아보자 if SELECT * FROM BLOG WHERE sta..
MyBatis 적용3 - 분석
2022. 8. 16. 21:53
데이터 접근 기술/MyBatis
생각해보면 지금까지 진행한 내용중에 약간 이상한 부분이 있다. ItemMapper 매퍼 인터페이스의 구현체가 없는데 어떻게 동작한 것일까? ItemMapper 인터페이스 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; impo..
MyBatis 적용2 - 설정과 실행
2022. 8. 16. 21:03
데이터 접근 기술/MyBatis
MyBatisItemRepository 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..
MyBatis 적용1 - 기본
2022. 8. 16. 17:19
데이터 접근 기술/MyBatis
이제부터 본격적으로 MyBatis를 사용해서 데이터베이스에 데이터를 저장해보자. XML에 작성한다는 점을 제외하고는 JDBC 반복을 줄여준다는 점에서 기존 JdbcTemplate과 거의 유사하다. ItemMapper 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; i..
MyBatis 설정
2022. 8. 16. 14:35
데이터 접근 기술/MyBatis
mybatis-spring-boot-starter 라이브러리를 사용하면 MyBatis를 스프링과 통합하고, 설정도 아주 간단히 할 수 있다. mybatis-spring-boot-starter 라이브러리를 사용해서 간단히 설정하는 방법을 알아보자. build.gradle 에 다음 의존 관계를 추가한다. //MyBatis 추가 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' ● 참고로 뒤에 버전 정보가 붙는 이유는 스프링 부트가 버전을 관리해주는 공식 라이브러리가 아니기 때문이다. 스프링 부트가 버전을 관리해주는 경우 버전 정보를 붙이지 않아도 최적의 버전을 자동으로 찾아준다. 다음과 같은 라이브러리가 추가된다. ● myb..
MyBatis 소개
2022. 8. 15. 22:35
데이터 접근 기술/MyBatis
MyBatis는 앞서 설명한 JdbcTemplate보다 더 많은 기능을 제공하는 SQL Mapper 이다. 기본적으로 JdbcTemplate이 제공하는 대부분의 기능을 제공한다. JdbcTemplate과 비교해서 MyBatis의 가장 매력적인 점은 SQL을 XML에 편리하게 작성할 수 있고 또 동적 쿼리를 매우 편리하게 작성할 수 있다는 점이다. 먼저 SQL이 여러줄에 걸쳐 있을 때 둘을 비교해보자. JdbcTemplate - SQL 여러줄 String sql = "update item " + "set item_name=:itemName, price=:price, quantity=:quantity " + "where id=:id"; MyBatis - SQL 여러줄 update item set item_n..