
mybatis Dynamic SQL ๐
๊ณ์ ์ค์ ํ๋ ๋์ ์ฟผ๋ฆฌ์ด๋ค.
์ค๋ ๋๋ ์ด๊ฑธ ์ดํด ํ์ง๋ง ๋ฏธ๋์ ๋ ๋ ๊น๋จน์ ์ ์์ผ๋ ์ฌ๊ธฐ์ ๋ฉ๋ชจํด ๋๋ค.
๋์ WHERE
ํ์ ํ ์ด๋ธ์์ ํ์์ด๋ฆ๊ณผ ์ด๋ฉ์ผ์ ์กด์ฌ์ ๋ฐ๋ผ ๋์ ์ผ๋ก WHERE์ ๋ถ์ฌ์ ๊ฒ์ํ๋ ์์์ด๋ค.
๊ธฐ์กด์๋ mapper xml์์ ์๋์ฒ๋ผ ์์ฑํ์๋ค.
์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๋ ๋ฐ๋์ ๋จ์ ํ ์คํธ๋ฅผ ์ฌ๋ฌ๋ฒ ํด๋ด์ผ ํ๋ค๋ ๊ฑธ ๋ ๊นจ๋ฌ์๋ค.(๊ทธ๊ฑธ ์ด์ ์์๋? ๐ฅ)
<select id="findMembersByCondition" parameterType="com.example.devlsyservice1.domain.dto.MemberDto" resultMap="memberMap">
SELECT * FROM member
<if test="memberName != null and memberName != ''" >
WHERE member_name = #{memberName}
</if>
<if test="email != null and email != ''">
WHERE email = #{email}
</if>
์ญ์ ๊ฐ๋ฐํ๋ฉด์ JUnit์ผ๋ก ๋จ์ ํ ์คํธ๋ฅผ ๊ณ์ ํด์ผ ํ๋ค.
์ด๊ฑธ ๋ชจ๋ฅด๊ณ ๋์ค์ tomcat์ ๋์ ๋ค๋ฉด ์๋ฌ๋ฅผ ๋๋ฌด ๋ฆ๊ฒ ๋ฐ๊ฒฌ ํ๊ฒ ๋ ๊ฒ์ด๋ค.
๋จ์ ํ ์คํธ ๊ฒฐ๊ณผ memberName๊ณผ email์ parameter๋ก 1๊ฐ์ฉ๋ง ๋๊ธฐ๋ฉด ์๋์ฒ๋ผ ์ ์๋ํ๋ค.
๊ทธ๋์ ๋ ๊ทธ๋ฅ ์๋๋ค๊ณ ์๊ฐํ๊ณ ๋์ด ๊ฐ์๋ค.


ํ์ง๋ง ๊ฐ๋ฐ์๋ ๋ค์ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ผ๋ํด ๋๊ณ ๊ฐ๋ฐ์ ํด์ผ ํ๋ค.
์ฌ์ฉ์๋ ์ ๋ ๋ด๊ฐ ์ค๊ณํ ๋๋ก๋ง ์ฌ์ฉํ์ง ์๋๋ค.
๋ง์ผ ์ ์ฟผ๋ฆฌ์์ ์ด๋ค ์ฌ์ฉ์๊ฐ ํ์๊ณผ ์ด๋ฉ์ผ์ ๋์์ ์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ๋ฉด? ์ ๋ ๊น?

๊ฒฐ๊ณผ์ ์ผ๋ก WHERE์ ์ด 2๋ฒ ๋์ค๊ฒ ๋๋ ๋ฌธ๋ฒ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.(์๋ชป ์์ฑํ ๊ฒฝ์ฐ๋ค.)
์๋์ฒ๋ผ ์ฟผ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค.
SELECT * FROM member
<where>
<if test="memberName != null and memberName != ''" >member_name = #{memberName}</if>
<if test="email != null and email != ''">AND email = #{email}</if>
</where>
์ด์ ๋ค์ ํ ์คํธ ํด๋ณด๋ฉด ์ ๋๋ก ๋ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ค.

๋ฌผ๋ก ์กฐ๊ฑด์ ํ๋์ฉ๋ง ์ค๋ ์ ์๋ํ๋ค.


<where>ํ๊ทธ์์ ์กฐ๊ฑด ์ค ํ๊ฐ์ง๋ง ํด๋น๋๋ฉด WHERE์ ๋ง ๋ถ์ด๊ณ ํด๋น ์กฐ๊ฑด ์คํ,
๋ง์ผ ์ผ์นํ ์กฐ๊ฑด์ AND๋ OR๊ฐ ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ง์ด๋ค.(๊ทธ๋์ ์๋์ฒ๋ผ ์ฟผ๋ฆฌ๋ฅผ ๋ณ๊ฒฝํด๋ ์ ์๋ํ๋ค.)
SELECT * FROM member
<where>
<!-- ์กฐ๊ฑด์ด 1๊ฐ์ธ ๊ฒฝ์ฐ๋ฉด ์ผ์นํ ์กฐ๊ฑด์ AND๊ฐ ์ง์์ ธ์ ์ฟผ๋ฆฌ๊ฐ ์คํ๋จ -->
<if test="memberName != null and memberName != ''" >AND member_name = #{memberName}</if>
<if test="email != null and email != ''">AND email = #{email}</if>
</where>
๊ฒฐ๊ณผ๋ ์๋์ฒ๋ผ ์ฒซ๋ฒ ์งธ ์กฐ๊ฑด์ AND๊ฐ ์ง์์ ธ์ ์คํ๋๋ค.

์ ๋ฆฌ

์ฐธ์กฐ: https://mybatis.org/mybatis-3/ko/dynamic-sql.html
MyBatis – ๋ง์ด๋ฐํฐ์ค 3 | ๋์ SQL
๋์ SQL ๋ง์ด๋ฐํฐ์ค์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค ํ๋๋ ๋์ SQL์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. JDBC๋ ๋ค๋ฅธ ์ ์ฌํ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด๋ณธ ๊ฒฝํ์ด ์๋ค๋ฉด ๋์ ์ผ๋ก SQL ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ผ๋ง๋ ํ๋ ์์ ์ธ์ง
mybatis.org
๊ฐ์ธ ์คํฐ๋ ๊ธฐ๋ก์ ๋ฉ๋ชจํ๋ ๊ณต๊ฐ์ด๋ผ ํ๋ฆฐ์ ์ด ์์ ์ ์์ต๋๋ค.
ํ๋ฆฐ ์ ์์ ๊ฒฝ์ฐ ๋๊ธ ๋ถํ๋๋ฆฝ๋๋ค.
[mybatis] foreach parameterType hashmap ์์
๋ฏธ๋์ ๋๋ฅผ ์ํด ๊ธฐ๋กํ๋ค. ๐mybatis์์ foreach๋ฅผ ๋๋ฆด ๋ list๋ ์ด์ ์ข ์ต์ํด ์ก๋๋ฐ map์ ์์ง ์ข ์ํฐ ๋๋์ด ๋ค์ด ๊ธฐ๋กํ๋ค.์์ ๋ ๋์ ์ผ๋ก insert๋ฌธ์ ๋ด์ฉ๊ณผ SELECT๋ฌธ์ ๋ด์ฉ์ ์ฑ์ฐ๋ ์
yaga.tistory.com
[mybatis] mybatis ๋ฐฐ์ด ์ ์ฅ(feat. foreach)
๋ชฉ์ฐจ ์์ ๊ฐ์ด insert๋ฅผ 1๊ฐ ์ด์ ํ๋ ๋ก์ง์ ๋ง๋ค๊ฒ ๋์๊ณ ๋ฏธ๋์ ๋ด๊ฐ ๋ณด๊ธฐ ์ํด ๊ธฐ๋กํ๋ค. ๐ ํด๋ผ์ด์ธํธ์์ ๋ฐฐ์ด๋ก ๊ฐ์ ๋ฐ์์ DB์ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ด ํ์ํ๋ค. ์ฐธ๊ณ ๋ก mysql๊ณผ Oracle์ ๋ฌธ
yaga.tistory.com
'IT > development' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [jpa] querydsl ์ธํ (feat. ํ๊ฒฝ์ค์ ๋ง ๋ค๋ฃธ) (1) | 2022.11.21 |
|---|---|
| [mybatis] mybatis ๋ฐฐ์ด ์ ์ฅ(feat. foreach) (0) | 2022.11.21 |
| [mybatis] foreach parameterType hashmap ์์ (54) | 2022.11.20 |
| [jQuery]radio/checkbox ์ฒดํฌ ์ฌ๋ถ ํ์ธ (0) | 2022.11.19 |
| [IDE/SVN]eclipse svn branch ์์ฑ (0) | 2022.11.19 |
๋๊ธ