728x90
반응형

 

JPA 를 사용하다보면 정말로 갈아 엎고 싶다는 생각이 많이 드네요.

 

연관관계가 복잡해지다 보면 간단하게 사용할 수 있는 JPA 가 꼭 필요한지 생각이 들곤 합니다.

 

그래서 조금 복잡한 쿼리를 진행하기 위해 MyBatis 를 적용해 보겠습니다.

 

 

 

 

build.gradle 에서 MyBatis 의존성을 추가 합니다.

 

버전은 조금씩 다를 수 있습니다.

dependencies {
    // MyBatis
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0'
    
}

 

 

 

 

application.yml 파일에서 datasource 설정을 해줍니다.

 

DB를 사용하신다면 무조건 해줘야 하는 부분입니다.

  # ===============================
  # = DATA SOURCE (MARIADB)
  # ===============================
  datasource:
    # 기본 DB
    url: jdbc:mariadb://gigas.synology.me:3306/xxx
    username: xxx
    password: xxx

 

 

 

 

기존에 DAO로 사용하던 부분입니다.

 

Interface에서 메서드를 생성한 후 Mapper를 호출해서 사용하던 방식은 아닙니다.

 

XML이 아닌 java코드로 간단하게 코드를 작성할 수 있습니다.

 

@Mapper 어노테이션으로 Mapper등록을 합니다.

 

@Select 어노테이션처럼 CRUD 를 선언해서 사용할 수 있습니다.

@Mapper
public interface UserMapper {

    /**
     * userNo 로 User 조회
     * @param userNo
     * @return
     */
    @Select("SELECT * FROM user WHERE user_no = #{user_no}")
    User getUser(@Param("user_no") Long userNo);
}

 

 

 

 

테스트 코드로 데이터를 찍어서 잘 돌아가는지 확인할 수 있습니다.

@RunWith(SpringRunner.class)
@SpringBootTest
public class PersistenceTests {


    @Autowired
    private UserMapper userMapper;
    
    @Test
    public void USER_MAPPER_TEST() {

        User user = userMapper.getUser(1L);

        System.err.println(user.toString());
    }
    
}

 

 

 

 

XML 을 사용하시는 분들은 application.yml 에 mybatis 속성을 추가 하여야 합니다.

 

type-aliases-package 는 result 도메인 패키지 경로를 작성합니다.

 

mapper-locations 는 mapper 파일 경로인데 resources 경로안에 mapper 폴더를 만들어 주겠습니다.

# ===============================
# = MYBATIS CONFIG
# ===============================
mybatis:
  type-aliases-package: com.xxx.xxxx
  mapper-locations: mapper/**/*.xml

 

 

 

UserMapper.xml 을 만들어 아래와 같이 select 문을 추가했습니다.

 

여기서 나오는 id 가 Mapper가 UserMapper 메서드와 매핑이 되어집니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTO Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.xxx.xxx.persistence.UserMapper">
    <!-- userNo로 User조회 -->
    <select id="findByUserNo" parameterType="Integer" resultType="UserVO">
        SELECT *
            FROM user
            WHERE user_no = #{userNo}
    </select>
</mapper>

 

 

 

 

@Select 어노테이션을 사용하지 않고 아래와 같이 사용합니다.

 

테스트는 동일합니다.

@Mapper
public interface UserMapper {

    /**
     * userNo 로 User 조회
     * @param userNo
     * @return
     */
    UserVO findByUserNo(Long userNo);
}

 

 

 

 

정말 간단하게 설정부분도 필요없이 의존성을 추가하고 Mapper 를 만들어 보았습니다.

 

복잡한 코드는 XML로 따로 분리를 해서 사용하는게 좋고 간단한 쿼리는 어노테이션으로 진행하는걸 추천드립니다.

 

 

 

728x90
반응형

'프로그래밍 > Spring' 카테고리의 다른 글

[Lombok] Mac OS X Lombok Install  (2) 2019.07.18
[Lombok] Windows OS Lombok Install  (0) 2019.07.17
[STS] SpringToolSuite SVN 연결  (0) 2019.07.14
[Spring] Session Time Out Check  (2) 2019.05.31
[Spring] Thymeleaf Fragment Layout  (0) 2019.05.24

+ Recent posts