1. resultType과 resultMap
- select의 결과로 다중행을 가져올 때, db의 컬럼명과 property가 동일하면 resultType을 사용하고, 다르게 설정해야하는 경우 resultMap을 사용한다.
# resultMap 예시 1
select empno no, ename name from emp
참조할 emp VO에 변수가 empno, ename으로 저장되어 setEmpno, setEname으로 property가 설정되어 있는데, db에서 컬럼명을 empno는 no로 ename을 name으로 가져오려고 한다면
<resultMap id="empRst" type="emp">
// id명은 적절하게 선언 type은 property를 가져올 vo
<result property="empno" column="no">
<result property="ename" column="name">
</resultMap>
<select id="getEmpList" resultMap="empRst">
// id는 dao 인터페이스에서 사용할 메서드명, resultMap에 위에 선언한 id 작성
select empno no, ename name from emp
</select>
# resultMap 예시 2
select empno, dname from emp e, dept d where e.deptno=d.deptno
참조할 VO를 아래와 같이 emp와 dept를 혼합하여 변수로 선언한 경우
public class EmpDept{
private Emp emp;
private Dept dept;
}
<reslutMap id="empdept" type="empdept">
<association property="emp" javaType="emp">
<result column="empno" property="empno">
<result column="deptno" property="deptno"/>
</association>
<association property="dept" javaType="dept">
<result column="deptno" property="deptno"/>
<resutl column="dname" property="dname"/>
</association>
<select id="getEmpDeptList" type="empdept">
select empno, dname from emp e, dept d where e.deptno=d.deptno
</select>
/*
1) association 에서 property는 EmpDept클래스에 선언한 변수명이고, javaType은 configuration으로 사용하는 공통 xml에서 alias로 선언한 클래스의 참조명을 적으면 된다. ( <typeAlias alias="emp" type="springweb.z01_vo.Emp"/> )
2) result에서 column은 sql문의 db 컬럼명을 적으면 되고, property는 association에 property로 적은 각 클래스에서 가져올 변수명을 적는다.
*/
main에서 데이터를 가져올 때는 EmpDept ed = dao.getEmpDeptList();
System.out.println(ed.getEmp().getEmpno()+", "+ed.getDept().getDname()) 으로 출력할 수 있다
2. mybatis parameter
- 단일 매개변수 입력하기 (ex: DB데이터 삭제)
# dao interface
public void delEmp(int empno);
# mapper
<delete id="delEmp" parameterType="int">
delete from emp100 where empno=#{empno}
</delete>
- parameter로 입력되는 값은 #{}로 표기한다
- 다중 매개변수 입력하기 (ex : DB데이터 등록)
# dao interface
public void insertEmp(Emp ins);
# mapper
<insert id="insertEmp" parameterType="emp">
insert into emp100 values(emp_seq.nextval, #{ename}, #{job},#{mgr}, sysdate, #{sal}, #{comm}, #{deptno})
</insert>