Mybatis 문법
1. <select>, <insert>, <update>, <delete>
<select id="queryId" parameterType="parameter" resultType="result">
</select>
- select : 쿼리에 맞게 select, insert, update, delete를 사용할 수 있다
- id : 쿼리를 불러오기 위한 쿼리명이라고 보면 된다
(최대한 쿼리의 목적에 적합하게 명명하기 - 회원리스트(SelectUserList))
- parameterType : 쿼리의 where 조건에 들어갈 변수의 타입을 기록하면 된다
(모델일 경우 모델의 경로를, java 타입일 경우 타입을 기록하면 된다)
- resultType : 쿼리의 결과를 담을 타입의 경로
(모델일 경우 모델의 경로를, list일 경우 java.util.list)
* insert, update, delete는 resultType이 int로 반환된다.
insert, update, delete는 데이터가 변경된 갯수가 반환되거나 혹은 1, 0로 성공, 실패 여부를
확인할 수 있다
2. <if>문
<if test="P_COMPANY_CD != null and !P_COMPANY_CD.equals('')"></if>
- if로 감싼 쿼리문은 if의 조건이 참일 때만 실행이 된다.
- 주로 파라미터가 null인지 체크할 때 사용된다
- test 안에 필요한 조건을 입력한다.
1. null값 체크 시 != null을 먼저 체크하면 좋다
(mybatis 뿐만 아니라 어떤 상황이라도 !=null을 먼저 체크하는게 효율적이다)
> 스캔한 빈 상자를 확인하는 방법이라고 생각하면 된다
!= null 은 스캔 후 빈 상자를 열지 않고 분류하는 방법이고
.equals('')는 스캔 후 빈 상자를 열어서 확인 후에 분류하는 방법이다.
* 빈 상자라는게 확인이 되면 굳이 상자를 열어볼 필요가 없지 않은가?
그렇기 때문에 !=null을 먼저 체크를 해주면 좀 더 효율적인 소스가 될 수 있다.
2. where 조건 오류
두 가지 오류를 볼 수 있다.
① if절이 모두 false여서 where 뒤에 조건이 없어서 생기는 오류
< 2 가지 해결방법 >
- where 1 = 1 뒤에 <if> and ~ </if> 와 같이 작성한다 -> 조건이 없을 경우 전체 출력이 된다
- <where>
<if test="id != null">AND id = #{id} </if>
<if test="subject != null">AND subject = #{subject} </if>
</where>where 대신 if절을 <where>로 감싸면 자동으로 첫번째 조건의 and를 where로 변경해서 출력해준다
② test 조건 오류
< 에러 > NumberFormatException
< 해결방법 >
- test안에 조건을 입력할 때 test = "test.equals(' ')" 와 같이 "와 '에 주의를 기울여야 한다.
보통은 전체 조건을 " "로 감싸고 그 안에 각 조건에 값을 ' '로 감싸준다
3. <foreach>문
COMPANY_CD IN
<foreach collection="P_COMPANY_CD" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
- 다중 파라미터를 넣어야 하는 COMPANY_CD IN (A, B)와 같은 경우 사용할 수 있다
- foreach : list 형식의 파라미터를 하나씩 꺼내서 나열해주는 함수이다
- collection : list 형식의 파라미터명
- index : 인덱스
- item : list에서 꺼낼 값의 변수 명
- open : 나열의 시작 점
- separator : 값을 분리해주는 문자 (콤마(,)를 써주는 편이 좋다)
- close : 나열의 마무리
※ 위 foreach문을 복사해서 collection의 파라미터명만 변경해서 사용하면 편할 것이다.
※ IN 은 LIKE와 비슷하지만 많은 값을 한번에 조회함으로 더 많은 결과를 불러올 수 있다.
-> 그만큼 시간은 소요됨
COMPANY_CD LIKE '%A%' > 회사코드에 A가 있는 회사 모두
COMPANY_CD IN (A, B) > 회사코드가 A와 B인 회사 모두
'Programing > DB' 카테고리의 다른 글
SQL - CASE WHEN (0) | 2022.12.20 |
---|---|
SQL 문법을 알아보자 (0) | 2022.12.02 |
DBeaver auto-commit 설정 해제하기 (0) | 2022.12.02 |
다중 테이블에서 데이터를 한번 출력하는 방법 (0) | 2022.11.30 |
쿼리 - null 체크하기 (0) | 2022.11.30 |