@Mapper Annotation

아몬드봉봉·2023년 12월 12일

Spring boot

목록 보기
1/1

MyBatis

Mybatis는 xml기반의 프래임워크였다.MyBatis3에서는 새로운 옵션을 사용할 수 있다. MyBatis3는 포괄적이고 강력한 Java기반 구성 API를 기반으로 한다. 이 구성 API는 새로운 Annotation기반 구성뿐만 아니라 xml 기반 MyBatis 구성의 기초이다. Annotation을 사용하면 많은 오버헤드를 발생시키지 않고 간단한 매핑된 문을 구현할 수 있다.

Mybatis String Boot Autoconfigure

Autoconfigure를 사용하게 되면 MyBatis 애플리케이션을 빠르게 Build할 수 있다.

장점

  • 독립 실행형 응용프로그램 구축
  • 상용구를 거의 0으로 줄인다.
  • xml구성 감소

단점

  • query를 수정하게 되면 재컴파일 하게 된다.
  • 제한적이다.
  • 복합 문장에 대해서는 더 복잡하다.

@Mapper

  • Database를 자동으로 감지해준다.
  • SqlSessionFactory를 전달하는 인스턴스를 자동 생성/등록한다.
  • DataSouce.SqlSessionFactoryBean의 인스턴스를 만들고 등록한다.
  • @Mapper Annotation이 표시된 Mapper를 자동으로 스캔하고 연결한다.
  • SqlSessionTemplatSpring 컨텍스트에 등록하여 Bean 주입 할 수 있도록 해준다.

설정

maven or gradle 설정을 해주고 Mapper Annotation을 사용해주면 문제없이 사용할 수 있다.

프로젝트 구조
src
 -main
   -java
     -com
       -example
         -user
           -UserController
           -UserService
           -UserDto
           -UserMapper

maven

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

gradle

implementation 'org.springframework.boot:spring-boot-starter-web'

Mapper

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Insert;
import com.example.user.UserDto;

@Mapper
public interface UserMapper {
 
    @Select("SELECT user_idx, user_name, uesr_age FROM user_table ")
    List<UserDto> userList(UserDto userDto);
 
    // insert 후 index값 가져오기
    @Insert(" INSERT INTO user_table(user_idx, user_name, user_age) "
            + " VALUES (0, #{user_name}, #{user_age}) ")
    @Options(useGeneratedKeys = true, keyProperty = "idx")
    int userInsert(UserDto userdto);
}

Dynamic SQL

동적 Sql을 사용하고 싶을 때 <script>를 사용하면 동적 Sql을 사용할 수 있다.

@Update({"<script>",
		"update Author",
		"  <set>",
		"    <if test='username != null'>username=#{username},</if>",
		"    <if test='password != null'>password=#{password},</if>",
		"    <if test='email != null'>email=#{email},</if>",
		"    <if test='bio != null'>bio=#{bio}</if>",
		"  </set>",
		"where id=#{id}",
		"</script>"})
void updateAuthorValues(Author author);

출처

https://kils-log-of-develop.tistory.com/576

profile
성장을 즐기는 백엔드 자바 개발자

0개의 댓글