MySQL2018. 4. 24. 00:37

MySQL에서도 if나 case 같은 조건문을 사용할 수 있는데 XML에서의 if문 사용한 것을 복습해본다.

기본적인 테이블 데이터 선택 방법은 아래와 같이 간단하다.

<select id="list" parameterType="Member" resultMap="MemberMap" >
  SELECT * FROM MEMBER
</select>

여기에서 조건을 추가해본다. 

만약에 타입이라는 조건이 있고 이 조건을 넣었을 때, 안 넣었을 때의 데이터를 뽑아야 한다고 가정하면 아래와 같다.

<select id="list" parameterType="Member" resultMap="MemberMap" >
  SELECT * FROM MEMBER
  <choose>
    <when test="type.equals('')">
      WHERE type LIKE "%"
    </when>
    <otherwise>
      WHERE type=#{type}
    </otherwise>
  </choose>
</select>

조건을 넣지 않았을 때는 모든 데이터를 가져오는 WHERE 절을 넣으면 된다.

보통 조건을 넣지 않을 때는 검색을 안 하면 되는데 나의 경우 조건이 4가지였다.


조건1, 조건2, 조건3, 조건4


그래서 기준이 되는 조건을 type으로 정해두기 위해서 저렇게 짠 거다. 

이게 내가 생각해낸 한계치...


이제 조건2, 3, 4에 대한 중복 조건인데 다음과 같이 짜면 된다. 

어차피 몇 개가 되든 if문이 똑같이 들어가기 때문에 상관없다.

<select id="list" parameterType="Member" resultMap="MemberMap" >
  SELECT * FROM MEMBER
  <choose>
    <when test="type.equals('')">
      WHERE type LIKE "%"
    </when>
    <otherwise>
      WHERE type=#{type}
    </otherwise>
  </choose>
  <if test="!createDate.equals('')">
    AND cre_dt=#{createDate}
  </if>
  <if test="!createDate.equals('')">
    <!-- 조건 3.. -->
  </if>
  <if test="!createDate.equals('')">
    <!-- 조건 4.. -->
  </if>
</select>

이렇게 하면 4가지 조건에 대한 16가지 경우의 데이터를 쿼리문 하나로 추출할 수 있다.

처음엔 무식하게 16가지 경우의 수에 대한 쿼리문을 다 작성하려고 했었는데

MySQL 같은 걸 만든 사람이 이런 기능을 안 만들었을리가 없다고 생각해서 공부했다.


까먹지 말자 ..

'MySQL' 카테고리의 다른 글

MySQL + MyBatis INSERT 성공 후 Primary Key 값 받아오기  (0) 2017.12.13
Posted by 홍규홍규
MySQL2017. 12. 13. 17:50

테이블에 특정 값들을 Insert하고 성공 시 Insert된 데이터의 Primary Key가 필요한 경우가 있다.

이때는 <selectKey>를 사용하면 된다.

<insert id="insert" parameterType="Member">
    INSERT INTO MEMBER(name, age) VALUES(#{name}, #{age})
    <selectKey resultType="int" keyProperty="no" order="AFTER">
        SELECT LAST_INSERT_ID()
    </selectKey>
</insert>

keyProperty는 VO에 정의한 테이블에 들어가는 컬럼 ID를 넣으면 된다.

따라서 Primary Key 뿐만 아니라 다른 데이터도 가져올 수 있다는 뜻.


order는 순서다. 

특정 값을 이용해 INSERT하려면 당연하게도 INSERT 앞에 위치시키고 BEFORE 명령어를 쓰면 된다.


그러면 insert가 성공하면 MEMBER 객체의 no 변수에 Auto Increment된 값이 저장된다.


member.getNo()로 가져오면 끝.



'MySQL' 카테고리의 다른 글

동적 쿼리문 작성해보기  (0) 2018.04.24
Posted by 홍규홍규