Mybatis BoardMapper

jooog·2022년 4월 26일
0

SQL

목록 보기
10/10

전체 게시글 수 확인

SELECT count(*) FROM board;

전체 게시글 삭제

DELETE FROM board;

bno가 1000번이고 writer가 Tom인 게시글만 삭제한다.

DELETE FROM board WHERE bno = 1000 and writer = "Tom"

//마이바티스
//bno와 writer를 parameter map으로 받는다.
<delete id="delete" parameterType="map">
      DELETE FROM board WHERE bno = #{bno} and writer = #{writer}
</delete>

게시물 추가

INSERT INTO board(title, content, writer) 
VALUES ("title2", "content2", "Jane");

//마이바티스
//parameter로 Board 객체를 받는다.
<insert id="insert" parameterType="BoardDto">
	INSERT INTO board(title, content, writer)
    VALUES(#{title}, #{content}, #{writer})
</insert>

게시물 업데이트

UPDATE board 
SET title="title_1" , content="content_1", up_date=now() 
where bno = 1091

//마이바티스
<update id="update" parameterType="BoardDto">
	UPDATE board 
    SET title = #{title}, 
        content = #{content}, 
        up_date = now() 
     WHERE bno = #{bno}
</update>

게시물 view count update

UPDATE board SET view_cnt = view_cnt + 1 where bno = 1087;

//마이바티스
<update>
	UPDATE board
    SET view_cnt = view_cnt +1
    WHERE bno = #{bno}
</update>

Mybatis 동적 SQL로 검색조건 설정하기

option유형에 따라 검색 조건을 다르게 설정해준다.

<sql id="searchCondition">
	<choose>
    	<when test='option="T"'>
        	AND title LIKE concat('%', #{keyword}, '%')
        </when>
        <when>
        	AND writer LIKE concat('%', #{keyword}, '$')
        </when>
        <otherwise>
        	AND(title LIKE concat('%', #{keyword}, '%')
            OR content LIKE concat('%', #{keyword}, '%'))
        </otherwise>
    </choose>
</sql>

🖍 LIKE 연산자
문자열의 내용을 검색하기 위해서는 LIKE 연산자를 사용할 수 있다.

SELECT name, height FROM usertbl WHERE name LIKE '김%'

위의 select문의 경우 LIKE 연산자에 %를 사용해서 성이 김인 이름 문자열 전체을 출력한다. 반대로 _는 한글자를 의미하는데 다음 쿼리문과 같이 사용한다.

SELECT name,height FROM usertbl WHERE name LIKE '_한주'

위의 select문의 경우 LIKE 연산자에 _를 사용해서 한주라는 이름을 가진 모든 성씨의 이름을 출력한다.

📌 %나 _가 검색하고자 하는 문자열의 맨 앞에 올때에는 MySQL 성능에 좋지 않기 때문에 이 부분을 잘 고려해서 사용할 필요가 있다.

검색조건으로 게시글 정렬

<select id="searchPage" parameterType="searchCondition" resultType="BoardDto">
	SELECT * FROM board
    WHERE true
    <include refid="searchCondition" />
    ORDER BY reg_date DESC, bno DESC
    LIMIT #{offset}, #{pageSize}
</select>
<choose>
	<when test="조건식1"> 쿼리문1 </when>
    	<when test="조건식2"> 쿼리문2 </when>
    	<when test="조건식3"> 쿼리문3 </when>
    	<when test="조건식4"> 쿼리문4 </when>
	<otherwise> 쿼리문5 </otherwise>
</choose>

0개의 댓글