Spring
[Spring] @Param 어노테이션을 이용해 객체 파라미터로 넘기기
jane.dev
2021. 9. 27. 17:32
반응형
MyBatis Mapper에서 사용할 파라미터를 넘기는 방법
예제에 사용할 TestVO와 TestCriteria
public class TestVO{
private int num;
private String title;
private String content;
private String writer;
}
public class TestCriteria{
private int pageNum;
private int amount;
...
}
파라미터 값이 1개일 경우,
public interface TestMapper{
public String getTitle(int num);
// 혹은
public String getTitle(@Param("num") int num);
}
테이블의 컬럼명과 해당 변수명이 같다면 @Param 어노테이션을 작성하지 않아도 파라미터 값을 전달할 수 있음
매핑된 TestMapper.xml의 쿼리문
SELECT title FROM test_tbl WHERE num = #{num}
파라미터 값이 여러개일 경우,
public interface TestMapper{
public <TestVO> getTest(@Param("num") int num, @Param("writer") String writer);
}
@Param 어노테이션이 없으면 어떤 변수가 어떤 컬럼에 매칭되는지 알 수 없기 때문에 작성해야함
매핑된 TestMapper.xml의 쿼리문
SELECT * FROM test_tbl
WHERE num = #{num}
AND writer = #{writer}
파라미터가 객체일 경우,
public interface TestMapper{
public void insertTest(TestVO vo);
}
파라미터 내부에 작성한 객체의 변수명을 사용가능
매핑된 TestMapper.xml의 쿼리문
INSERT INTO test_tbl (num, title, content, writer)
VALUES (#{num}, #{title}, #{content}, #{writer})
파라미터에 객체를 다른 값과 함께 사용하는 경우,
public interface TestMapper{
public List<TestVO> getTestList(@Param("writer") String writer, @Param("cri") TestCriteria cri);
}
mapper에서는 객체에 작성된 '어노테이션명.변수명'으로 사용
매핑된 TestMapper.xml의 쿼리문
SELECT num, title, content, writer FROM
(SELECT
/*+ INDEX_DESC(test_tbl pk_test) */
rownum rn, test_tbl.* FROM test_tbl WHERE (writer LIKE #{writer})
AND rownum <= #{cri.pageNum} * #{cri.amount}) test
WHERE rn > (#{cri.pageNum} - 1) * #{cri.amount}