-
MyBatis 쿼리 (Oracle, MySQL)Back-End/SQL 2025. 2. 18. 23:17
쿼리 순서
-- 조회 <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);