๐ก update()
JdbcTemplate๋ DAO๊ฐ์ฒด์์ DB์ ์ฐ๋ํ๊ธฐ ์ํด SQL ์ฐ์ฐ๋ค์ ์ํ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ์ ์ธ๋ฐ,
update()๋ SQL ์ฐ์ฐ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฐฑ์ ์์ผ์ค ๋(INSERT, DELETE, UPDATE) ์ฌ์ฉํ๋ ๋ฉ์๋์ด๋ค.
โ๏ธ INSERT
์นํ์(?)๋ฅผ ๊ฐ์ง SQL๋ก PreparedStatement๋ฅผ ๋ง๋ค๊ณ ํจ๊ป ์ ๊ณตํ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์์๋๋ก ๋ฐ์ธ๋ฉํด์ฃผ๋ ๊ธฐ๋ฅ์ ๊ฐ์ง
update() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
SQL๊ณผ ํจ๊ป ๊ฐ๋ณ์ธ์๋ก ์ ์ธ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๊ณตํด์ฃผ๋ฉด ๋๋ค.
this.jdbcTemplate.update("insert into users(id, name, password) values(?,?,?)",
user.getId(), user.getName(), user.getPassword());
โ๏ธ UPDATE
INSERT์ ๋ฐฉ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์นํ์๋ฅผ ๊ฐ์ง SQL์ ๋ง๋ ํ ํจ๊ป ์ ๊ณตํ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ํ์ฉํ๋ฉด ๋๋ค.
this.jdbcTemplate.update("update users set name=? where password=?",
user.getName() , user.getPassword());
โ๏ธ DELETE
์นํ์๊ฐ ํ์ํ๋ฉด ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ์ฃผ๋ฉด ๋๊ณ , ์นํ์๊ฐ ํ์์์ ๋๋ SQL๋ฌธ๋ง ์์ฑํด์ฃผ๋ฉด ๋๋ค.
this.jdbcTemplate.update("delete from users");
๐ก queryForInt()
SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ์ ์์ ๊ฒฐ๊ณผ ๊ฐ(Integer ํ์ )์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋์ด๋ค.
return this.jdbcTempalte.queryForInt("select count(*) from users");
๐ก qyeryForObject()
SQL์ DML ์ค SELECT๋ฅผ ์คํํ์ ๋ ํ๋์ ๊ฐ์ฒด(Object) ๊ฒฐ๊ณผ ๊ฐ์ด ๋์ฌ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋์ด๋ค.
์ด๋ฅผ ์ํด, getCount()์ ์ ์ฉํ๋ RowMapper ์ฝ๋ฐฑ์ ์ฌ์ฉํด์ค์ผ ํ๋ค.
๐ RowMapper๋?
ํ
ํ๋ฆฟ์ผ๋ก๋ถํฐ ResultSet์ ์ ๋ฌ๋ฐ๊ณ , ํ์ํ ์ ๋ณด๋ฅผ ์ถ์ถํด์ ๋ฆฌํดํ๋ ๋ฐฉ์์ผ๋ก ๋์
ResultSet์ ๋ก์ฐ ํ๋๋ง์ ๋งคํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
/* Deprecated
return this.jdbcTemplate.queryForObject(
"select * from users where id =?",
new Object[] {id},
new RowMapper<User>() {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
}
});*/
// =================================================
// Replaced
return this.jdbcTemplate.queryForObject(
"select * from users where id =?",
new RowMapper<User>() {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
},
@Nullable Object... args
});
์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ : PreparedStatement๋ฅผ ๋ง๋ค๊ธฐ ์ํ SQL๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ : SQL์ ์นํ์์ ๋ฐ์ธ๋ฉํ ๊ฐ, Object ํ์ ๋ฐฐ์ด์ ์ฌ์ฉํด์ผํ๋ค.์ธ๋ฒ์งธ (๋ง์ง๋ง) ํ๋ผ๋ฏธํฐ : RowMapper ์ฝ๋ฐฑ์ ๋ฃ์ด์ฃผ์
- ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ : PreparedStatement๋ฅผ ๋ง๋ค๊ธฐ ์ํ SQL
- ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ : RowMapper ์ฝ๋ฐฑ์ ๋ฃ์ด์ฃผ์
- ์ธ๋ฒ์งธ (๋ง์ง๋ง) ํ๋ผ๋ฏธํฐ : SQL์ ์นํ์์ ๋ฐ์ธ๋ฉํ ๊ฐ์ ์ฐจ๋ก๋๋ก ๋ฃ์ผ๋ฉด ๋๋ค.
Replaced ๋ ์ด์ ?
- Object[] ํ์ ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์ ๋ฐฐ์ด์ ๋ฃ๋ ๋ถํธํจ์ ํด์ํ๊ธฐ ์ํด ๊ฐ๋ณ์ธ์ (VarArg)๋ฅผ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ๋์ฒด
โป SQL ์คํ์ ๋ก์ฐ์ ๊ฐ์๊ฐ ํ๋๊ฐ ์๋๋ผ๋ฉด EmptyResultDataAccessException์ ์์ธ ์ฒ๋ฆฌํด์ฃผ์.
( "๋ฐ์นฉ์ญ์ ์ ๊ฐ๋ฐ์"๋์ ํผ๋๋ฐฑ์ ์ํด Deprecated๋ ์ฝ๋๋ฅผ Replaced ์ฝ๋๋ก ๋์ฒดํ์์ต๋๋ค. )
์ข์ ํผ๋๋ฐฑ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค!!
๐ก query()
queryForInt()๊ฐ ํ๋์ ๊ฒฐ๊ณผ ๊ฐ์ ์ํ ๋ฉ์๋์ธ ๋ฐ๋ฉด, ๋ง์ ๊ฒฐ๊ณผ ๊ฐ(๋ก์ฐ ๊ฐ)์ ์ฒ๋ฆฌ ํ ์ ์๋ ๋ฉ์๋์ด๋ค.
List ํ์์ ํ์ฉํด ์ฌ๋ฌ ๊ฐ์ ๋ก์ฐ ๊ฐ๋ค์ ์ ์ฅ์์ผ์ฃผ์
return this.jdbcTemplate.query("select * from users order by id" ,
new RowMapper<User>() {
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
return user;
}
}
- ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ : ์คํํ SQL ์ฟผ๋ฆฌ๋ฅผ ๋ฃ๋๋ค.
- ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ : ๋ฐ์ธ๋ฉํ ํ๋ผ๋ฏธํฐ๊ฐ ์์ผ๋ฉด ์ถ๊ฐํด์ฃผ์.
- ์ธ๋ฒ์งธ (๋ง์ง๋ง) ํ๋ผ๋ฏธํฐ : RowMapper ์ฝ๋ฐฑ์ ๋ฃ์ด์ฃผ์.
RowMapper์์ ๋ง๋ค์ด์ง User ์ค๋ธ์ ํธ๋ ํ ํ๋ฆฟ์ด ๋ฏธ๋ฆฌ ์ค๋นํ List ์ปฌ๋ ์ ์ ์ถ๊ฐ๋๋ฉฐ,
์์ ์ ๋ง์น๋ฉด ๋ชจ๋ ๋ก์ฐ์ ๋ํ User ์ค๋ธ์ ํธ๋ฅผ ๋ด๊ณ ์๋ List ์ค๋ธ์ ํธ๊ฐ ๋ฆฌํด๋๋ค.
๐์ ๋ฆฌ
๋ค๊ฑฐํฐ๋ธ ํ ์คํธ๋ฅผ ์์ง๋ง์!
์ฐธ๊ณ ๋ฌธ์ :
ํ ๋น์ ์คํ๋ง3 (์ด์ผ๋ฏผ)
'Back-end > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ํธ๋์ญ์ ๋ฌธ์ ์ฐพ๊ธฐ (feat. ํธ๋์ญ์ ๊ฒฝ๊ณ์ค์ ๊ตฌ์กฐ) (0) | 2020.08.27 |
---|---|
[Spring] ๋ฆฌํฉํ ๋ง ํด๋ณด๊ธฐ (feat. ๊ฐ์ฒด์งํฅ์ ์ธ ๊ด์ ) (0) | 2020.08.26 |
[Spring] JdbcTemplate์ด๋? (0) | 2020.08.19 |
[Spring] ํ ํ๋ฆฟ ์ฝ๋ฐฑ ํจํด (1) | 2020.08.17 |
[Spring] ์์ธ์ฒ๋ฆฌ ๊ธฐ๋ฅ ๊ฐ์ถ๊ธฐ (0) | 2020.08.17 |