Spring Boot
동적 쿼리 Dynamic_SQL
<?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="kr.co.gudi.dao.MemberDAO">
<insert id="join" parameterType="member">
INSERT INTO member(id,pw,name,email)
<choose>
<when test="email.equals('')">
VALUES(#{id},#{pw},#{name},'이메일 없음')
</when>
<otherwise>
VALUES(#{id},#{pw},#{name},#{email})
</otherwise>
</choose>
</insert>
<select id="list" parameterType="hashmap" resultType="member">
SELECT id,pw,name,email FROM member
<if test="keyword != null and !keyword.equals('') ">
WHERE ${opt} LIKE CONCAT('%',#{keyword},'%')
</if>
</select>
<select id="detail" resultType="member">
SELECT * FROM member WHERE id = #{param1}
</select>
<update id="update" parameterType="hashmap">
UPDATE member
<set>
<if test="!pw.equals('')"> pw=#{pw}, </if>
<if test="!name.equals('')"> name=#{name}, </if>
<if test="!email.equals('')"> email=#{email} </if>
</set>
WHERE id=#{id};
</update>
<select id="multi" parameterType="list" resultType="member">
SELECT * FROM member
<where>
name IN
<foreach collection="list" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</where>
</select>
</mapper>
Transaction
- @Transactional 을 사용하면 특정 클래스나 메서드, 인터페이스 에서 commit, rollback 등을 수행 한다.
- Spring 에서는 관련 라이브러리들을 추가 하고 설정도 해야 하지만 boot 에서는 기본으로 제공 한다
- rollbackFor :모든 예외에 대해서 롤백을 한다. (기본)
isolation
- Isolation.DEFAULT (기본) : 다른 트랜잭션에서 커밋된 데이터만 읽을 수 있다.
- Isolation.READ_UNCOMMITTED (가장 개방적) : 다른 트랜잭션에서 커밋되지 않은 데이터도 읽을 수 있다.
- Isolation.REPEATABLE_READ : 조회 중인 데이터를 다른 트랜잭션에서 UPDATE 불가
- Isolation.SERIALIZABLE (가장 폐쇄적): 한 트랜잭션이 commit 될때 까지 다른 트랜잭션은 CRUD 불가