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 item set item_name=#{itemName}, price=#{price}, quantity=#{quantity} where id = #{id} MyBatis๋ XML์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ผ์ธ์ด ๊ธธ์ด์ ธ๋ ๋ฌธ์ ๋ํ๊ธฐ์ ๋ํ ๋ถํธํจ์ด..
Spring/Spring DB
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๋์ง ํ์ธํ๋ ๊ฒ์ด ํ์ํ๋ค. ํ
์คํธ ์ผ์ด์ค์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ ์ ์๊ฒ 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
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
ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ 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
๋์ ์ฟผ๋ฆฌ ๋ฌธ์ ๋์ ์ฟผ๋ฆฌ๋, ์คํ ์์ ์ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ฐ๋ผ ์ฟผ๋ฆฌ๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ์ฟผ๋ฆฌ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฒ์ ์กฐ๊ฑด์ด ์ ๋์ ์ผ๋ก ๋ณํ๋ ๊ฒ์ ์ฟผ๋ฆฌ๋, ์กฐ๊ฑด์ ๋ฐ๋ผ ๋์ ์ผ๋ก 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
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
DTO(data transfer object) ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด(๋ฐ์ดํฐ ๊ตํ์ ์ํ ๊ฐ์ฒด) DTO๋ ๊ธฐ๋ฅ์ ์๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ง ํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ฅผ ๋ปํ๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ปจํธ๋กค๋ฌ ๊ณ์ธต๊ณผ ๋น์ฆ๋์ค ๋ก์ง ๊ณ์ธต ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด DTO๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ปจํธ๋กค๋ฌ์์๋ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ฐ์ดํฐ๋ฅผ DTO์ ๋ด์ ๋น์ฆ๋์ค ๋ก์ง ๊ณ์ธต์ผ๋ก ์ ๋ฌํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง ๊ณ์ธต์์๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ DTO์ ๋ด์ ์ปจํธ๋กค๋ฌ๋ก ์ ๋ฌํฉ๋๋ค. ์ด๋ ๊ฒ DTO๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณ์ธต ๊ฐ์ ๋ฐ์ดํฐ ์ ๋ฌ์ด ๊ฐ์ํ๋๋ฉฐ, ๊ฐ ๊ณ์ธต์์ ํ์ํ ๋ฐ์ดํฐ๋ง์ ์ถ์ถํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. DAO(data Access object) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ data์ ์ ๊ทผํ๊ธฐ ์ํ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ์ ์ธ..
Spring/Spring DB
์คํ๋ง ์์ธ ์ถ์ํ ์คํ๋ง์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ๋ํ ์์ญ ๊ฐ์ง ์์ธ๋ฅผ ์ ๋ฆฌํด์ ์ผ๊ด๋ ์์ธ ๊ณ์ธต์ ์ ๊ณตํ๋ค. ๊ฐ๊ฐ์ ์์ธ๋ ํน์ ๊ธฐ์ ์ ์ข
์์ ์ด์ง ์๊ฒ ์ค๊ณ๋์ด ์๋ค. ๋ฐ๋ผ์ ์๋น์ค ๊ณ์ธต์์๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด์ JDBC ๊ธฐ์ ์ ์ฌ์ฉํ๋ , JPA ๊ธฐ์ ์ ์ฌ์ฉํ๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ์์ธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. JDBC๋ JPA๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์คํ๋ง์ด ์ ๊ณตํ๋ ์์ธ๋ก ๋ณํํด์ฃผ๋ ์ญํ ๋ ์คํ๋ง์ด ์ ๊ณตํ๋ค. ์คํ๋ง ๋ฐ์ดํฐ ์ ๊ทผ ์์ธ ๊ณ์ธต DataAccessException ์ ํฌ๊ฒ 2๊ฐ์ง๋ก ๊ตฌ๋ถํ๋๋ฐ NonTransient ์์ธ์ Transient ์์ธ์ด๋ค. Transient Transient ๋ ์ผ์์ ์ด๋ผ๋ ๋ป์ด๋ค. Transient ํ์ ์์ธ๋ ๋์ผํ SQL์ ๋ค..