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}