MyBatis (3) SQL Mapper와 Bean 간의 property 전달
2012. 11. 9. 17:45
목차.
- MyBatis 기본 설정
- CRUD 예제 만들기
- SQL mapper 파라메터 전달
MyBatis는 SQL Mapping XML 구문을 Java 코드로 변환시 디폴트로 PreparedStatement 구문으로 바꾸고 전달되는 파라메터 들을 PreparedStatement 구문의 파라메터 '?'로 대응시킨다.
<select id="user" parameterType="int" resultType="User"> SELECT * FROM user WHERE id = #{id} </select>
'#{id}'는 int 타입의 파라메터이며 결과는 User 객체에 저장된다. 이 SQL Mapping XML 구문은 다음과 같은 내용의 Java 구문으로 변환된다.
String user = "SELECT * FROM user WHERE id = ?"; PreparedStatement ps = conn.preparedStatement(user); ps.setInt(1, id);
빈과 SQL 매퍼간의 파라메터 전달시 MyBatis는 Java 원시타입(Primitive type)의 경우 프로퍼티 getter/setter를 가지지 않고 파라메터 전체가 값을 대신한다.
만일 여러 개의 파라메터를 전달해야 할 경우는 2 가지 방법 중 선택하여 사용할 수 있다. Map을 사용하는 방법과 Mapper Interface Class에 @Param 어노테이션을 사용하는 방법이 있다.
Map을 사용
SQL Mapping XML
<insert id="user" parameterType="map" resultType="User"> INSERT INTO user (username, password) VALUES (#{username}, #{password}) </insert>
Mapper Interface Class
public int addParamMap(Map<string, string> map);
Running Java Code
... Map<string, string> param = new HashMap<string, string>(); param.put("username", "user1"); param.put("password", "1234"); mapper.addParamMap(param);
@Param 어노테이션을 사용
SQL Mapping XML
<intert id="user"> INSERT INTO user (username, password) VALUES (#{username}, #{password}) </insert>
Mapper Interface Class
public int addParamAnnotation( @Param("username") String username, @Param("password") String password);
Running Java Code
mapper.addParamAnnotation("user1", "1234");