쿼리 순서
-- 조회
<select id="selectBoardList" parameterType="java.lang.String" resultType="com.example.BoardVO">
SELECT id, title, contents, count(created_id), created_date
FROM board
WHERE created_date = #{createdDate}
-- created_id 를 기준으로 grouping 하는 나머지 컬럼들
GROUP
BY id, title, contents, created_date
-- grouping 하는것들의 조건
HAVING count(created_id) > 0
-- id로 내림차순, title 로 오름차순
ORDER
BY id DESC, title ASC
-- 0번째부터 10개 제한해서 보여줌 (한페이지에 게시글 열개인 첫번째 페이지)
LIMIT 10 OFFSET 0
</select>
-- 리스트 파라미터로 조회
<select id="selectBoardList" parameterType="map" resultType="com.example.BoardVO">
SELECT id, title, contents, count(created_id), created_date
FROM board
WHERE IN
<foreach collection="boardList" item="id" separator="," open="(" cloes=")">
#{id}
</foreach>
</select>
-- 단건 삽입
<insert id="insertUser" parameterType="com.example.Board">
<selectKey keyProperty="id" resultType="int" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT
INTO board (id, title, contents, created_id, created_date)
VALUES (#{id}, #{title}, #{contents}, #{createdId}, #{createdDate})
</insert>
-- 다건 삽입
<insert id="insertUser" parameterType="map">
INSERT
INTO board (id, title, contents, created_id, created_date)
VALUES
<foreach collection="boardList" item="board" separator="," open="(" cloes=")">
#{id}, #{title}, #{contents}, #{createdId}, #{createdDate}
</foreach>
</insert>
-- 수정
<update id="updateBoard" parameterType="com.example.UpdateBoard">
UPDATE board
SET title = #{title}
, contents = #{contents}
, update_date = NOW() -- MySQL
SYSTIMESTAMP AT TIME ZONE 'UTC' -- Oracle
</update>
문자열 연결
-- Oracle
-- LIKE 를 사용하여 '%' 를 붙이면 id 변수값으로 시작하는 모든 걸 검색 가능
SELECT * FROM board
WHERE id LIKE #{id}||'%'
-- MySQL
-- LIKE 를 사용하여 CONCAT 으로 '%' 를 붙이면 id 변수값으로 시작하는 모든 걸 검색 가능
SELECT * FROM board
WHERE id LIKE CONCAT(#{id}, '%')
if 문
-- MyBatis 는 if 문을 중첩해서 쓸 수 없으므로 choose 문 사용할 것.
SELECT * FROM board
<if test="abc != null and !''.equals(abc)">
<choose>
<when test="letter == '알파벳'">
WHERE abc = #{letter}
</when>
<when test="letter == '한글'">
WHERE ganada = #{letter}
</when>
<otherwise></otherwise>
</choose>
</if>
※ Oracle 에서는 NULL은 NULL 하나만을 의미하지만 MySQL 에서는 NULL 과 ''(Empty String)과 'null' 이 다르다. 자바단에서 null 을 넘겨주면 문자열 null 이 들어가기 때문에 반드시 ''(Empty String) 으로 초기화해주고 체크하는 것이 좋다.
Mapper.xml 파일
-- Mapper 에서 MyBatis 의 xml 을 매핑 시킬 때
<mapper namespace="[Mapper.xml 파일 경로부터 이름 및 확장자까지]">
. . .
</mapper>
Mapper.java 파일
// 조회
BoardVO selectBoardList(String createdDate);
// 리스트 파라미터로 조회
BoardVO selectBoardList(@Param("boardList") List<Long> boardList);
// 단건 삽입
Long insertUser(Board board);
// 다건 삽입
Long insertUser(@Param("boardList") List<Board> boardList);