[Spring] Mapper XML Files ( select / insert, update, delete / parameters )
1. Parameters
쿼리의 파리미터 ( PreparedStatement 의 " ? " 는 Spring 에서는 #{ 멤버변수명 } 을 사용한다.
만약 VO를 가져와서 VO의 파라미터를 넣고 싶다면 #{ } 괄호 안에 VO의 변수를 그대로 넣는다.
그려면 VO의 getter가 소환되어 변수의 값으로 들어간다.
Parameter를 전달하는 방법은 DAO에서 쿼리문을 수행할 때 전달해 줄 수 있다.
이때 parameter를 쓰는 자리에는 무조건 하나만 쓸 수 있다.
그러므로 여러개의 parameter를 보낼 경우 Map을 사용해야 한다.
첫번째, 가장 기본적인 방법은 하나의 값을 parameter로 전달하는 것이다.
1
2 |
String lastName = "King";
return getSqlSession().selectList("ArticleDAO.getAllEmployeeInfo", lastName ); |
cs |
기존에는 selectOne을 썼었는데 selectOne은 쿼리의 결과가 한개일 경우에 사용하는 것이고,
selectList는 쿼리의 결과가 여러개일 경우에 사용한다.
두번째로 여러개의 parameter를 보내고 싶을 때 Map을 사용한다.
Map은 <key, value> 로 구성되며 key는 무조건 String을 써야하고, value는 모든 타입을 대표하는 Object를 쓴다.
1
2
3
4 |
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("firstName", "Steven");
parameters.put("lastName", "King");
return getSqlSession().selectList("ArticleDAO.getAllEmployeeInfo", parameters ); |
cs |
세번째는 VO를 이용하여 객체로 보낼 수 있다.
1
2
3
4 |
EmployeesVO employee = new EmployeesVO();
employee.setFirstName("Steven");
employee.setLastName("King");
return getSqlSession().selectList("ArticleDAO.getAllEmployeeInfo", employee); |
cs |
2. SELECT
MyBatis에서 가장 흔히 사용된다.
1
2
3
4 |
<select id="getNowSystemDate" resultType="string">
SELECT SYSDATE
FROM DUAL
</select> |
cs |
쿼리의 이름은 getNowSystemDate 이고, 리턴 타입은 String 이다.
이때, resultType은 꼭 써야한다.
SELECT query에서 파라미터를 이용한다면
1
2
3
4
5
6
7
8
9
10
11
12 |
<select id="getAllEmployeeInfo" parameterType="EmployeesVO" resultType="EmployeesVO">
SELECT EMPLOYEE_ID employeeId
, FIRST_NAME firstName
, LAST_NAME lastName
, EMAIL email
, SALARY salary
, COMMISSION_PCT commissionPct
, HIRE_DATE hireDate
FROM EMPLOYEES
WHERE LAST_NAME = #{lastName}
AND FIRST_NAME = #{firstName}
</select> |
cs |
이때 parameterType 은 EmployeesVO 타입 이므로
Employees에 있는 lastName이라는 이름을 가진 변수와 firstName이라는 이름을 가진 변수가 들어간다.
3. insert, update and delete
- insert
1
2
3
4
5
6
7
8
9
10
11
12 |
<insert id="insertAuthor">
INSERT INTO AUTHOR (
ID
, USERNAME
, PASSWORD
)
VALUES (
#{id}
, #{username}
, #{password}
)
</insert> |
cs |
- update
1
2
3
4
5
6 |
<update id="updateAuthor">
UPDATE AUTHOR
SET USERNAME = #{username}
, PASSWORD = #{password}
WEHRE ID = #{id}
</update> |
cs |
- delete
1
2
3
4 |
<delete id="deleteAuthor">
DELETE AUTHOR
WEHRE ID = #{id}
</delete> |
cs |