You are using an outdated browser. Please upgrade your browser to improve your experience.

11/11 - mybatis패키지

<properties resource="com/eomcs/mybatis/ex01/jdbc.properties"></properties>

클래스가 아니기 때문에 . 을 쓰면 안됀다. /로 구분해준다.(file path)

// mybatis 설정 파일에서 fully-qualified class name 을 사용하는 대신에
// 짧은 이름으로 대체할 수 있다.
// <typeAliases>
// <typeAlias type="com.eomcs.mybatis.ex01.Board" alias="abc"/>
// </typeAliases>


mybatis에서 사용하는 별명
별칭 매핑된 타입
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

Method클래스 : 거울처럼 그 클래스에 무슨 메소드가 있는지 비춰준다 = reflaction

특정 번호 미만의 레코드만 출력하고싶을땐 CDATA로 묶어서 실행한다.

  <select id="selectBoard1" 
          resultMap="BoardMap" 
          parameterType="int">
  <![CDATA[
    select 
      board_id,
      title, 
      contents, 
      created_date,
      view_count 
    from x_board
    where board_id < #{ohora}
  </select>
  ]]>
  </select>
  
  
  또는 아래처럼 한다.
   <select id="selectBoard1" 
          resultMap="BoardMap" 
          parameterType="int">
    select 
      board_id,
      title, 
      contents, 
      created_date,
      view_count 
    from x_board
    where board_id &lt; #{ohora}
  </select>

하지만 &lt;처럼 하면 무슨 뜻인지 알아보기 힘드므로 CDATA로 묶어주는게 좋다.

<이것만 있으면 xml parcer가 태그 시작인줄 알고 컴파일에러 띄움..

xml은 태그 안에 주석을 넣을 수 없다!

mariadb orderby할 때

MariaDB [studydb]> select * from x_board order by 'haha' desc; 이 문구에서 ‘haha’는 무시된다. 에러띄우는게 아니고 그냥 무시함

  <select id="selectBoard2" 
          resultMap="BoardMap" 
          parameterType="string">
    select 
      board_id,
      title, 
      contents, 
      created_date,
      view_count 
    from x_board
    order by ${colname} asc
  </select>
  
  <!-- SQL 문에 SQL을 삽입하기
       => ${파라미터명}
       => 외부의 값을 이용하여 SQL 문장을 만들  있다.
       => 하지만 SQL 삽입 공격에 취약하다!
   -->

위 코드는 SI쪽에선 절대 쓰면 안됀다.

dynamic sql? => 조건에 따라 SQL을 달리 생성하는 것 => mybatis는 이를 위해 조건에 따라 SQL을 변경하거나, 동일한 SQL을 반복적으로 생성할 수 있는 문법을 제공한다.

실행 예: => 사용자로부터 게시글의 번호를 입력 받아 조회한다. => 만약 오류가 발생하면 전체 게시글을 출력한다.

검색할때

  <select id="select5" resultMap="BoardMap" parameterType="map">
    select 
      board_id,
      title, 
      contents, 
      created_date,
      view_count 
    from x_board
    where 1=0
    <if test="no != null">
      or board_id = #{no}
    </if>
    <if test="title != null">
      or title like concat('%', #{title}, '%')
    </if>
    <if test="content != null">
      or contents like concat('%', #{content}, '%')
    </if>
  </select>

1=0은 꼼수긴 하지만 if문을 자유롭게 탈착할수있다.