[์Šคํ”„๋ง DB 2ํŽธ] - 6. MyBatis

2023. 4. 9. 23:30ยทSpring/Spring DB

 

MyBatis

JdbcTemplate๊ณผ ๋น„๊ตํ•ด์„œ MyBatis์˜ ๊ฐ€์žฅ ๋งค๋ ฅ์ ์ธ ์ ์€

SQL์„ XML์— ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ๋˜ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ๋งค์šฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

 

JdbcTemplate

String sql = "update item " +
          "set item_name=:itemName, price=:price, quantity=:quantity " +
          "where id=:id";

 

์ฝ”๋“œ ๋ผ์ธ ๋ณ€๊ฒฝ์‹œ ๋„์–ด์“ฐ๊ธฐ๋ฅผ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค. 

 

MyBatis

 <update id="update">
      update item
      set item_name=#{itemName},
          price=#{price},
          quantity=#{quantity}
      where id = #{id}
</update>

 

MyBatis๋Š” XML์— ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ธ์ด ๊ธธ์–ด์ ธ๋„ ๋ฌธ์ž ๋”ํ•˜๊ธฐ์— ๋Œ€ํ•œ ๋ถˆํŽธํ•จ์ด ์—†๋‹ค.

 

 

Mapper Interface

@Mapper
public interface ItemMapper {

    void save(Item item);

    void update(@Param("id") Long id, @Param("updateParam") ItemUpdateDto updateParam);

    Optional<Item> findById(Long id);

    List<Item> findAll(ItemSearchCond itemSearch);
}

 

๋งˆ์ด๋ฐ”ํ‹ฐ์Šค ๋งคํ•‘ XML์„ ํ˜ธ์ถœํ•ด์ฃผ๋Š” ๋งคํผ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

@Mapper ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ MyBatis์—์„œ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋‹ค์Œ์— ๋ณด์ด๋Š” xml ์˜ ํ•ด๋‹น SQL์„ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ค€๋‹ค.

 

 

ItemMapper.xml

<?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="hello.itemservice.repository.mybatis.ItemMapper">

 

๊ฐ™์€ ์œ„์น˜์— ์‹คํ–‰ํ•  SQL์ด ์žˆ๋Š” XML ๋งคํ•‘ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค.

์ฐธ๊ณ ๋กœ ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— src/main/resources ํ•˜์œ„์— ๋งŒ๋“ค๋˜, ํŒจํ‚ค์ง€ ์œ„์น˜๋Š” ๋งž์ถ”์–ด ์ฃผ์–ด์•ผํ•œ๋‹ค. 

namespace : ์•ž์„œ ๋งŒ๋“  ๋งคํผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

 

 

insert - save

 void save(Item item);


<insert id="save" useGeneratedKeys="true" keyProperty="id">
    insert into item (item_name, price, quantity)
    values (#{itemName}, #{price}, #{quantity})
</insert>

 

id ์—๋Š” ๋งคํผ ์ธํ„ฐํŽ˜์ด์Šค์— ์„ค์ •ํ•œ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์ง€์ •

ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” #{} ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉ , ๋งคํผ์—์„œ ๋„˜๊ธด ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„

 

 

update - update

void update(@Param("id") Long id, @Param("updateParam") ItemUpdateDto
  updateParam);

<update id="update">
    update item
    set item_name=#{updateParam.itemName},
    price=#{updateParam.price},
    quantity=#{updateParam.quantity}
    where id = #{id}
</update>

 

์—ฌ๊ธฐ์„œ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ Long id , ItemUpdateDto updateParam ์œผ๋กœ 2๊ฐœ

ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 1๊ฐœ๋งŒ ์žˆ์œผ๋ฉด @Param ์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ,

ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ฉด @Param ์œผ๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค.

 

 

select - findById

Optional<Item> findById(Long id);

<select id="findById" resultType="Item">
    select id, item_name, price, quantity
    from item
    where id = #{id}
</select>

 

resultType ์€ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ๋ช…์‹œ

์•ž์„œ application.properties ์— ์†์„ฑ์„ ์ง€์ •ํ•œ ๋•๋ถ„์— ๋ชจ๋“  ํŒจํ‚ค์ง€ ๋ช…์„ ๋‹ค ์ ์ง€๋Š” ์•Š์•„๋„ ๋œ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ํŒจํ‚ค์ง€ ๋ช…์„ ๋‹ค ์ ์–ด์•ผ ํ•œ๋‹ค.

 

 

select - findAll

List<Item> findAll(ItemSearchCond itemSearch);

<select id="findAll" resultType="Item">
    select id, item_name, price, quantity
    from item
    <where>
        <if test="itemName != null and itemName != ''">
            and item_name like concat('%',#{itemName},'%')
        </if>
        <if test="maxPrice != null">
            and price &lt;= #{maxPrice}
        </if>
    </where>
</select>

 

<if> ๋Š” ํ•ด๋‹น ์กฐ๊ฑด์ด ๋งŒ์กฑํ•˜๋ฉด ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.
<where> ์€ ์ ์ ˆํ•˜๊ฒŒ where ๋ฌธ์žฅ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์˜ˆ์ œ์—์„œ <if> ๊ฐ€ ๋ชจ๋‘ ์‹คํŒจํ•˜๊ฒŒ ๋˜๋ฉด SQL where ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.
์˜ˆ์ œ์—์„œ <if> ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์„ฑ๊ณตํ•˜๋ฉด ์ฒ˜์Œ ๋‚˜ํƒ€๋‚˜๋Š” and ๋ฅผ where ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.

 

and price &lt;= #{maxPrice}

 

<=๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ   &lt;= ๋ฅผ ์‚ฌ์šฉ

XML์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ์— < , > ๊ฐ™์€ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ(ํƒœ๊ทธ ์‹œ์ž‘,์ข…๋ฃŒ)

 

XML ํŠน์ˆ˜๋ฌธ์ž

< : &lt;
> : &gt;
& : &amp;

 

XML CDATA 

<![CDATA[
and price <= #{maxPrice}
]]>

 

์ด ๊ตฌ๋ฌธ ์•ˆ์—์„œ๋Š” ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋Œ€์‹  ์ด ๊ตฌ๋ฌธ ์•ˆ์—์„œ๋Š” XML TAG๊ฐ€ ๋‹จ์ˆœ ๋ฌธ์ž๋กœ ์ธ์‹๋˜๊ธฐ ๋•Œ๋ฌธ์— <if>, <where> ๋“ฑ์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard

 

์Šคํ”„๋ง DB 2ํŽธ - ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ํ™œ์šฉ ๊ธฐ์ˆ  - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์— ํ•„์š”ํ•œ DB ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ ์˜ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธ

www.inflearn.com

 

 

 

์ €์ž‘์žํ‘œ์‹œ

'Spring > Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง DB 2ํŽธ] - 5. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ  - ํ…Œ์ŠคํŠธ  (0) 2023.04.08
[์Šคํ”„๋ง DB 2ํŽธ] - 4. JdbcTemplate - SimpleJdbcInsert  (0) 2023.04.08
[์Šคํ”„๋ง DB 2ํŽธ] - 3. JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ  (0) 2023.04.08
[์Šคํ”„๋ง DB 2ํŽธ] - 2. JdbcTemplate - ๋™์  ์ฟผ๋ฆฌ ๋ฌธ์ œ  (0) 2023.04.07
[์Šคํ”„๋ง DB 2ํŽธ] - 1. JdbcTemplate  (0) 2023.04.06
'Spring/Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [์Šคํ”„๋ง DB 2ํŽธ] - 5. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ  - ํ…Œ์ŠคํŠธ
  • [์Šคํ”„๋ง DB 2ํŽธ] - 4. JdbcTemplate - SimpleJdbcInsert
  • [์Šคํ”„๋ง DB 2ํŽธ] - 3. JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ
  • [์Šคํ”„๋ง DB 2ํŽธ] - 2. JdbcTemplate - ๋™์  ์ฟผ๋ฆฌ ๋ฌธ์ œ
hello_u
hello_u
  • hello_u
    ๐Ÿ˜œ
    hello_u
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๐Ÿ˜œ (345)
      • Hardware (2)
        • BMC (2)
      • Spring (109)
        • Spring ์ž…๋ฌธ (20)
        • Spring ๊ธฐ๋ณธ (27)
        • Spring MVC (18)
        • Spring DB (22)
        • Spring JPA ๊ธฐ๋ณธ (16)
        • Spring JPA ํ™œ์šฉ (6)
      • Develop (27)
        • DB (8)
        • JAVA (4)
        • Web (2)
        • Python (7)
        • OSS (2)
        • Git (2)
        • API (2)
      • Algorithm (155)
        • CodeUp ๊ธฐ์ดˆ (44)
        • ํŒŒ์ด์ฌ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ (64)
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (4)
        • SWEA (30)
        • Softeer (10)
        • BOJ (2)
      • CS (9)
        • ์ปดํ“จํ„ฐ์ผ๋ฐ˜ (3)
        • ์šด์˜์ฒด์ œ (3)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (0)
        • ์ •๋ณดํ†ต์‹  (1)
        • ์ž๋ฃŒ๊ตฌ์กฐ (1)
        • ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™ (1)
        • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (0)
        • ์ตœ์‹  ๋””์ง€ํ„ธ, ์ผ๋ฐ˜์ƒ์‹ (0)
      • ์ž๊ฒฉ์ฆ (41)
        • ์ •๋ณด๋ณด์•ˆ๊ธฐ์‚ฌ (9)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (22)
        • ๋ฆฌ๋ˆ…์Šค๋งˆ์Šคํ„ฐ 1๊ธ‰ (3)
        • SQLD (7)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
hello_u
[์Šคํ”„๋ง DB 2ํŽธ] - 6. MyBatis
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”