반응형

Mybatis 쿼리 구문에 #{param} 값이 null 일 때,

다른 값을 넣어야 될 상황이 벌어질 수 있습니다.

아래 예제와 함께 <choose>, <when>, <otherwise>를 사용하면

조건을 걸어 null일 때 또는 다른 값일 때 동적으로 쿼리를 조작할 수 있습니다.

 

예제

 

설명

 

<choose>

   <when test=" board_desc != null and board_desc != '' ">

      ,#{board_desc}

   </when>

   <otherwise>

      ,'빈칸'

   </otherwise>

</choose>


<choose> 태그 안에

  <when test = " 파라미터 이름 != null " >

    test 조건이 true 일 경우 안에 쿼리문 작동

  </when>

  <otherwise>

    otherwise 는 when 조건중 모두 아닐 경우 ( 스위치에서 defualt 역할을 함) 작동

  </otherwise>

</choose>

 

 

쿼리 문을 실행하다 <choose> 태그가 존재하고,

<when> 조건문이 참일 경우 when 조건문 안에 쿼리 실행(+)

<when> 조건문이 모두 아닐 경우 <otherwise> 태그가 있으면 <otherwise> 안에 구문 실행한다.

반응형
반응형

반복되는 쿼리 ex) pageCount 계산해주는 limit 등..

또는 일부를 사용할 때 아래와 같이 사용해주면 유용하다.


예제1

 

<sql id="Page">

    select count(*) from pageInfo

</sql>

 

<select id="getList"  resultType="hashmap">

    <include refid="Page"/>

    where red_id = #{value}

</select>

 

반응형
반응형

문법 예시

<select id="getMember" resultType="string">

  SELECT * FROM member

</select>

 

<select id="getDept" resultType="hashmap">

  SELECT name, Dept FROM dept

</select>


사용 가능 타입

 

별칭(Alias) 데이터 타입(Data Type)
string String
date Date
map Map
hashmap HashMap
list List
arraylist ArrayList
decimal BigDecimal
bigdecimal BigDecimal
biginteger BigInteger
_byte byte
_long long
_short _short
_int int
_integer int
_double double
_float float
_boolean boolean
_byte[] byte[]
_long[] long[]
_short[] short[]
_int[] int[]
_integer[] int[]
_double[] double[]
_float[] float[]
_boolean[] boolean[]
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
byte[] Byte[]
long[] Long[]
short[] Short[]
int[] Integer[]
integer[] Integer[]
double[] Double[]
float[] Float[]
boolean[] Boolean[]
object Object
date[] Date[]
decimal[] BigDecimal[]
bigdecimal[] BigDecimal[]
biginteger[] BigInteger[]
object[] Object[]
collection Collection
iterator Iterator
ResultSet ResultSet

※ 주의 : 원시형의 경우 (_)를 앞에 붙인다. 붙이지 않는 경우 *래퍼(Wrapper) 클래스로 변환된다.

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

TimeMapper 인터페이스

package org.zerock.mapper;

 

public interface TimeMapper {     

      public String selectMethod();

}


TimeMapper XML 파일

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper

  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace = "org.zerock.mapper.TimeMapper">

 

      <select id = "selectMethod" resultType="string">

      SELECT sysdate FROM dual

      </select>

 

</mapper>

 


설명

빨간색 코드 : TimeMapper 인터페이스의 경로 + TimeMapper 인터페이스의 이름 (TimeMapper)

                  <mapper namespace = "인터페이스의 경로 + 인터페이스 이름">

더보기

 

예시) test.son.code 경로 아래 TimeMapper (인터페이스)가 있으면 

     <mapper namespace = "test.son.code.TimeMapper"> 로 작성

초록색 코드 : 인터페이스에 작성한 메소드 이름은 XML mapper 파일의

                  CRUD 태그 안에 id 값이랑 동일해야 한다.

더보기

 

예시 1) 인터페이스에 selectMemberName() 이라는 메소드가 있으면, mapper XML 파일에는

          <select id = "selectMemberName" ... > 이라고 인터페이스의 메소드명과 일치해야 된다.

 

예시 2) updateMemberName() 메소드가 있으면, mapper XML 파일에는

          <update id = "updateMemberName" ... > 이라고 인터페이스의 메소드명과 일치해야 된다.

파란색 코드 : 인터페이스 안에 해당 메소드의 리턴 타입(int, String.. 등)

                  mapper 파일의 resultType 이 같아야 한다.

더보기

 

예시 1) public MemberDTO getMemberName(); / MemberDTO 객체를 리턴하는 하는 메소드가 존재

          <select id = "getMemberName" resultType = "MemberDTO"> - (mapper xml 파일이다.)

 

예시 2) public int getMemberAge();

          <select id = "getMemberAge" resultType = "int">

 


 

인터페이스 파일의 경로 + 인터페이스 이름 -> namespace 명과 같아야 함. 

메소드 이름 -> id 값과 같아야 함.

메소드 리턴 타입 -> resultType 과 같아야 함.

 

 

 

 

 

 

 

 

 

 

반응형

+ Recent posts