
SQL ์ฟผ๋ฆฌ๋ฅผ ๋์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์กฐ๊ฑด์ ๋ฐ๋ผ ์ถ๊ฐ ๋ฐ ์๋ต์ด ๊ฐ๋ฅํด์ง๋๋ค.
<if>, <choose>, <when>, <otherwise>, <trim>, <foreach> ๋ฑ์ XML ํ๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.<scrip> ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ SQL์ ์์ฑํด์ผ ํฉ๋๋ค.์กฐ๊ฑด๋ฌธ์ ์์ฑํ๊ณ test ์์ฑ์ ๊ฐ์ ๋ฐ๋ผ ๋์ ์ผ๋ก SQL์ ์ถ๊ฐํ๊ฑฐ๋ ์๋ตํฉ๋๋ค.
@Select("""
<script>
SELECT * FROM Employees
WHERE LastName = 'abc'
<if test="true">
OR FirstName = 'abc'
</if>
</script>
""")
List<MyBean258Employee> query1();
test="true"๋ผ๊ณ ์ค์ ํ์ฌ <if> ํ๊ทธ ๋ด๋ถ์ SQL ๋ฌธ์ฅ์ด ํ์ ์คํ๋๋ฏ๋ก SQL ๋ฌธ์ฅ์ด ์์ฑ๋ฉ๋๋ค.SELECT * FROM Employees WHERE LastName = 'abc'OR FirstName = 'abc'
prefix="WHERE" : trim ํ๊ทธ ์์ ์กฐ๊ฑด์ด ์๋ค๋ฉด WHERE๋ฅผ ์ถ๊ฐํ๊ณ ์๋ค๋ฉด ์ถ๊ฐํ์ง ์์ต๋๋ค.prefixOverrides="AND | OR" : trim ํ๊ทธ ์์ ์ฝ๋ ์ค ์์ AND๋ OR์ด ์์ ๊ฒฝ์ฐ ํด๋น AND๋ OR์ ์๋ผ๋
๋๋ค.@Select("""
<script>
SELECT * FROM my_table
<trim prefix="WHERE" prefixOverrides="OR">
<if test="lastName != null">
OR LastName = #{lastName}
</if>
<if test="firstName != null">
OR firstName = #{firstName}
</if>
</trim>
</script>
""")
Object query5(MyBean258Employee employee);
SELECT * FROM my_table WHERE LastName = ?
SELECT * FROM my_table WHERE FirstName = ?
SELECT * FROM my_table WHERE LastName = ? OR FirstName = ?
SELECT * FROM my_table
OGNL(Object Graph Navigation Language) ํํ์์ ์ฌ์ฉํ์ฌ ํ๋ผ๋ฏธํฐ๋ฅผ ์์ฑํ๊ณ , ์ด๋ฅผ ์ปจํ ์คํธ์ ๋ฐ์ธ๋ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
name : ์์ฑ๋ ๋ณ์์ ์ด๋ฆ์
๋๋ค.value : ํํ์์ ๋ง๋ค์ด ์ค๋๋ค.@Select("""
<script>
<bind name="patternKeyword" value="'%' + keyword + '%'" />
SELECT * FROM Employees
WHERE notes LIKE #{patternKeyword}
</script>
""")
List<MyBean258Employee> query6(String keyword);
SELECT * FROM Employees WHERE notes LIKE %{keyword}%;
์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋ <,>,& ๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ ์ด๋ xml์์ ํ๊ทธ๋ก ์ธ์ํฉ๋๋ค. ๊ทธ๋์ ์ด๋ฅผ ํ๊ทธ๊ฐ ์๋ ์ฟผ๋ฆฌ๋ก ์ธ์ํ๊ธฐ ์ํด <![CDATA[..์ฟผ๋ฆฌ.]]> ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
@Select("""
<script>
<![CDATA[
SELECT * FROM Products
WHERE Price < 5
]]>
</script>
""")
Object query7();