상세 컨텐츠

본문 제목

MyBatis

기술정리

by 승학이 2024. 2. 2. 22:09

본문

Application.properties

mybatis.type-aliases-package

마이바티스에서 타입 정보를 사용할 때는 패키지 이름을 적어주어야 하는데, 여기에 명시하면 패키지 이름을 생략할 수 있다. 지정한 패키지와 그 하위 패키지가 자동으로 인식된다. 여러 위치를 지정하려면 ,, ;로 구분하면 된다.

mybatis.type-aliases-package는

JdbcTemplate의 BeanPropertyRowMapper 에서 처럼 언더바를 카멜로 자동 변경해주는 기능을 활성화 한다. 바로 다음에 설명하는 관례의 불일치 내용을 참고하자.

logging.level.hello.itemservice.repository.mybatis=trace

MyBatis에서 실행되는 쿼리 로그를 확인할 수 있다.

관례의 불일치

자바 객체에는 주로 카멜( camelCase ) 표기법을 사용한다. itemName 처럼 중간에 낙타 봉이 올라와 있는 표기법이다. 반면에 관계형 데이터베이스에서는 주로 언더스코어를 사용하는 snake_case 표기법을 사용한다. item_name 처럼 중간에 언더스코어를 사용하는 표기법이다.

이렇게 관례로 많이 사용하다 보니 map-underscore-to-camel-case 기능을 활성화 하면 언더스코어 표기법을 카멜로 자동 변환해준다. 따라서 DB에서 select item_name 으로 조회해도 객체의 itemName ( setItemName() ) 속성에 값이 정상 입력된다. 정리하면 해당 옵션을 켜면 snake_case 는 자동으로 해결되니 그냥 두면 되고, 컬럼 이름과 객체 이름이 완전히 다른 경우에는 조회 SQL에서 별칭을 사용하면 된다.

예) DB select item_name 객체 name

별칭을 통한 해결방안

select item_name as name

마이바티스 매핑 XML(ItemMapper.xml)을 호출해주는 매퍼 인터페이스이다. 이 인터페이스에는 @Mapper 애노테이션을 붙여주어야 한다. 그래야 MyBatis에서 인식할 수 있다. 이 인터페이스의 메서드를 호출하면 다음에 보이는 xml 의 해당 SQL을 실행하고 결과를 돌려준다.

ItemMapper 인터페이스의 구현체에 대한 부분은 뒤에 별도로 설명한다.

ItemMapper.xml → MyBatis는 xml을 편리하게 쓰기 위함

  1. Insert SQL은 <insert> 를 사용하면 된다. id 에는 매퍼 인터페이스에 설정한 메서드 이름을 지정하면 된다. 여기서는 메서드 이름이 save() 이므로

save 로 지정하면 된다. 파라미터는 #{} 문법을 사용하면 된다. 그리고 매퍼에서 넘긴 객체의 프로퍼티 이름을 적어주면 된다.

#{} 문법을 사용하면 PreparedStatement 를 사용한다. JDBC의 ? 를 치환한다 생각하면 된다.

useGeneratedKeys 는 데이터베이스가 키를 생성해 주는 IDENTITY 전략일 때 사용한다. keyProperty 는 생성되는 키의 속성 이름을 지정한다. Insert가 끝나면 item 객체의 id 속성에 생성된 값이 입력된다.

Update SQL은 <update> 를 사용하면 된다. 여기서는 파라미터가 Long id , ItemUpdateDto updateParam 으로 2개이다. 파라미터가 1개만 있으면 @Param 을 지정하지 않아도 되지만, 파라미터가 2개 이상이면 @Param 으로 이름을 지정해서 파라미터를 구분해야 한다.

Select SQL은 <select> 를 사용하면 된다. resultType 은 반환 타입을 명시하면 된다. 여기서는 결과를 Item 객체에 매핑한다.

앞서 application.properties 에

속성을 지정한 덕분에 모든 패키지 명을 다 적지는 않아도 된다. 그렇지 않으면 모든 패키지 명을 다 적어야 한다.

JdbcTemplate의 BeanPropertyRowMapper 처럼 SELECT SQL의 결과를 편리하게 객체로 바로 변환해준다.

mybatis.configuration.map-underscore-to-camel-case=true 속성을 지정한 덕분에 언더스코어를 카멜 표기법으로 자동으로 처리해준다. ( item_name itemName )

package=hello.itemservice.domain

mybatis.type-aliases-

자바 코드에서 반환 객체가 하나이면 Item , Optional<Item> 과 같이 사용하면 되고, 반환 객체가 하나

이상이면 컬렉션을 사용하면 된다. 주로 List 를 사용한다. 다음을 참고하자.

동적 쿼리와 정적 쿼리의 개념과 차이점

 

정적sql 과 동적 sql 의 차이점..

제목그대로입니다.pro*c 상에서 정적 sql과 동적 sql이있습니다.이두 차이점을 이해가 잘 안됩니다. 동적 sql 은 자주 변하는 컬럼이나 문장을 사용할..

www.gurubee.net

 

'기술정리' 카테고리의 다른 글

냉집사 Query Dsl 정리  (1) 2024.02.09
NGINX  (0) 2024.02.09
데이터 접근 기술 - 테스트  (2) 2024.02.05
Jdbc Template  (0) 2024.02.02
Spring Security와 OAuth2를 이용한 소셜 로그인  (0) 2024.02.02

관련글 더보기