Spring/Spring DB

Spring/Spring DB

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

MyBatis JdbcTemplate๊ณผ ๋น„๊ตํ•ด์„œ MyBatis์˜ ๊ฐ€์žฅ ๋งค๋ ฅ์ ์ธ ์ ์€ SQL์„ XML์— ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ๋˜ ๋™์  ์ฟผ๋ฆฌ๋ฅผ ๋งค์šฐ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. JdbcTemplate String sql = "update item " + "set item_name=:itemName, price=:price, quantity=:quantity " + "where id=:id"; ์ฝ”๋“œ ๋ผ์ธ ๋ณ€๊ฒฝ์‹œ ๋„์–ด์“ฐ๊ธฐ๋ฅผ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค. MyBatis update item set item_name=#{itemName}, price=#{price}, quantity=#{quantity} where id = #{id} MyBatis๋Š” XML์— ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ธ์ด ๊ธธ์–ด์ ธ๋„ ๋ฌธ์ž ๋”ํ•˜๊ธฐ์— ๋Œ€ํ•œ ๋ถˆํŽธํ•จ์ด..

Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 5. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ธฐ์ˆ  - ํ…Œ์ŠคํŠธ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์—์„œ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ test์˜ application.properties ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•˜์ž. spring.profiles.active=test spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.username=sa logging.level.org.springframework.jdbc=debug ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๊ณผ๊ฑฐ์— ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๋ฉด์„œ ์ €์žฅํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด๊ด€๋˜์–ด ์žˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜„์žฌ ํ…Œ์ŠคํŠธ์— ์˜ํ–ฅ์„ ์ค€๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ„๋ฆฌ ๋กœ์ปฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์™€ ํ…Œ์ŠคํŠธ์—์„œ ..

Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 4. JdbcTemplate - SimpleJdbcInsert

SimpleJdbcInsert INSERT SQL๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. private final NamedParameterJdbcTemplate template; private final SimpleJdbcInsert jdbcInsert; public JdbcTemplateItemRepositoryV3(DataSource dataSource) { this.template = new NamedParameterJdbcTemplate(dataSource); this.jdbcInsert = new SimpleJdbcInsert(dataSource) .withTableName("item") .usingGeneratedKeyColumns("id"); // .usingColumns(..

Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 3. JdbcTemplate - ์ด๋ฆ„ ์ง€์ • ํŒŒ๋ผ๋ฏธํ„ฐ

ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ String sql = "update item set item_name=?, price=?, quantity=? where id=?"; template.update(sql, itemName, price, quantity, itemId); JdbcTemplate์€ ๊ธฐ๋ณธ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ”์ธ๋”ฉ ํ•œ๋‹ค. ์ˆœ์„œ๋งŒ ์ž˜ ์ง€ํ‚ค๋ฉด ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์€ ์—†๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ๋ณ€๊ฒฝ์‹œ์ ์— ๋ฐœ์ƒํ•œ๋‹ค. ์ˆœ์„œ๊ฐ€ ๋งž์ง€ ์•Š์•„์„œ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฆ„ ์ง€์ • ๋ฐ”์ธ๋”ฉ(NamedParameterJdbcTemplate) private final NamedParameterJdbcTemplate template; JdbcTemplate์€ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด NamedParameterJd..

Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 2. JdbcTemplate - ๋™์  ์ฟผ๋ฆฌ ๋ฌธ์ œ

๋™์  ์ฟผ๋ฆฌ ๋ฌธ์ œ ๋™์  ์ฟผ๋ฆฌ๋ž€, ์‹คํ–‰ ์‹œ์ ์— ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์— ๋”ฐ๋ผ ์ฟผ๋ฆฌ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ์œ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๋Š” ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋‚˜, ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ JOIN์ด ์ถ”๊ฐ€๋˜๋Š” ์ฟผ๋ฆฌ ๋“ฑ์ด ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. // ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ์—†์Œ select id, item_name, price, quantity from item //์ƒํ’ˆ๋ช…( itemName )์œผ๋กœ ๊ฒ€์ƒ‰ select id, item_name, price, quantity from item where item_name like concat('%',?,'%') //์ตœ๋Œ€ ๊ฐ€๊ฒฉ( maxPrice )์œผ๋กœ ๊ฒ€์ƒ‰ select id, item_name, price, quantity from item where price

Spring/Spring DB

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

Jdbc ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ์  JDBC ๋ฐ˜๋ณต ๋ฌธ์ œ ์ปค๋„ฅ์…˜ ์กฐํšŒ, ์ปค๋„ฅ์…˜ ๋™๊ธฐํ™” PreparedStatement ์ƒ์„ฑ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ”์ธ๋”ฉ ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ์Šคํ”„๋ง ์˜ˆ์™ธ ๋ณ€ํ™˜๊ธฐ ์‹คํ–‰ ๋ฆฌ์†Œ์Šค ์ข…๋ฃŒ try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1, member.getMemberId()); pstmt.setInt(2, member.getMoney()); pstmt.executeUpdate(); return member; } catch (SQLException e) { throw exTranslator.translate("save", sql, e); } finally { close(con, pstmt..

Spring/Spring DB

[์Šคํ”„๋ง DB 2ํŽธ] - 0. DTO / DAO

DTO(data transfer object) ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด(๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ๊ฐ์ฒด) DTO๋Š” ๊ธฐ๋Šฅ์€ ์—†๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋งŒ ํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋œปํ•œ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ๊ณ„์ธต๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด DTO๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋ฅผ DTO์— ๋‹ด์•„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต์—์„œ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ฒ˜๋ฆฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ DTO์— ๋‹ด์•„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ DTO๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณ„์ธต ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์ด ๊ฐ„์†Œํ™”๋˜๋ฉฐ, ๊ฐ ๊ณ„์ธต์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ์„ ์ถ”์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DAO(data Access object) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ data์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ง์ ‘์ ์ธ..

Spring/Spring DB

[์Šคํ”„๋ง DB 1ํŽธ] - 15. ์Šคํ”„๋ง ์˜ˆ์™ธ ์ถ”์ƒํ™” ์ดํ•ด

์Šคํ”„๋ง ์˜ˆ์™ธ ์ถ”์ƒํ™” ์Šคํ”„๋ง์€ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์— ๋Œ€ํ•œ ์ˆ˜์‹ญ ๊ฐ€์ง€ ์˜ˆ์™ธ๋ฅผ ์ •๋ฆฌํ•ด์„œ ์ผ๊ด€๋œ ์˜ˆ์™ธ ๊ณ„์ธต์„ ์ œ๊ณตํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์˜ˆ์™ธ๋Š” ํŠน์ • ๊ธฐ์ˆ ์— ์ข…์†์ ์ด์ง€ ์•Š๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ๋„ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ JDBC ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋“ , JPA ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋“  ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. JDBC๋‚˜ JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—ญํ• ๋„ ์Šคํ”„๋ง์ด ์ œ๊ณตํ•œ๋‹ค. ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์˜ˆ์™ธ ๊ณ„์ธต DataAccessException ์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ NonTransient ์˜ˆ์™ธ์™€ Transient ์˜ˆ์™ธ์ด๋‹ค. Transient Transient ๋Š” ์ผ์‹œ์ ์ด๋ผ๋Š” ๋œป์ด๋‹ค. Transient ํ•˜์œ„ ์˜ˆ์™ธ๋Š” ๋™์ผํ•œ SQL์„ ๋‹ค..

hello_u
'Spring/Spring DB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก