본문 바로가기

JAVA/JPA

[Spring] Mybatis와 JpaRepository 인터페이스 하나의 repository로 관리하기

TestSample(entity)객체 와 같은 디렉토리에 TestSampleRepository 생성
extends JpaRepository<TestSample, String>, TestSampleRepositoryCustom(네이밍 꼭 맞춰야함)  추가
@Repository public interface TestSampleRepository extends JpaRepository<TestSample, String>, TestSampleRepositoryCustom {
}
TestSampleRepositoryCustom 인터페이스 생성, 사용할 메소드명 및 파라미터 지정
public interface TestSampleRepositoryCustom {
TestSample test() { }
}
TestSampleRepositoryImpl 클래스 생성 후 implements TestSampleRepositoryCustom 추가
미구현된 메소드 구현하기
public class TestSampleRepositoryImpl implements TestSampleRepositoryCustom {
    SqlSessionTemplate sqlSessionTemplate;
    String namespace = "testsample.TestSample.";
 
    @Autowired
    public TestSampleRepositoryImpl(@Qualifier("SqlSessionTemplate") SqlSessionTemplate sqlSessionTemplate){
        this.sqlSessionTemplate = sqlSessionTemplate;
    }
 
    @Override
    public TestSample test() {
        return sqlSessionTemplate.selectOne(namespace+"read");
    }
}
xml 파일에서 지정한 id 값을 TestSampleRepositoryImpl에서 sqlSessionTemplate를 이용해서 .selectOne, selectList, .update 등등의 기능을 사용하여 xml 파일의 쿼리를 사용할 수 있도록 지정 
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="testsample.TestSample">
    <select id="read" parameterType="string" resultType="testsample.TestSample">
        SELECT * FROM test_sample limit 1;
    </select>
</mapper>
 
테스트하기
@Test
public void MybatisWithJpaRepositoryTest(){
    testSampleRepository.findAll(); // JpaRepository 기능 사용
    testSampleRepository.test();  // mybatis에서 구현한 맵퍼 사용
}