IT/development

[mybatis] mybatis ๋™์ ์ฟผ๋ฆฌ(feat. <where></where>)

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2022. 11. 20.

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

 

๋Œ“๊ธ€