Chapter 3 - KOO-YS/toby-spring GitHub Wiki
- ํ
ํ๋ฆฟ์ด๋
๋ณ๊ฒฝ์ด ๊ฑฐ์ ์ผ์ด๋์ง ์๊ณ ์ผ์ ํ ํจํด์ผ๋ก ์ ์ง๋๋ ํน์ฑ์ ๊ฐ์ง ๋ถ๋ถ๊ณผ์์ ๋กญ๊ฒ ๋ณ๊ฒฝ๋๋ ํน์ฑ์ ๊ฐ์ง ๋ถ๋ถ์ ๋ถ๋ฆฌ์ํค๋ ๋ฐฉ๋ฒ์ด๋ค - ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค๋ธ์ ํธ๊ฐ ์์ฑ๋๊ณ ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ๊ด๊ณ๋ฅผ ๋งบ๊ณ , ์ฌ์ฉ๋๊ณ , ์๋ฉธํ๊ธฐ๊น์ง์ ๊ณผ์
๐ฑ Branch chapter03/setting์ ์ค์ต์ ์ํ ๊ธฐ๋ณธ ์ธํ
public void deleteAll() throws SQLException, ClassNotFoundException {
Connection c = connectionMaker.makeNewConnection();
PreparedStatement ps = c.prepareStatement("DELETE FROM users");
ps.executeUpdate();
// ์ฌ์ฉํ ๋ฆฌ์์ค๋ฅผ ๋ฐ๋์ ๋ฐํํด์ผํ๋ค
ps.close();
c.close();
}์๋จ ์ฝ๋์๋ ์์ธ ์ํฉ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ์๋ค
PreparedStatement๋ฅผ ์ฒ๋ฆฌํ๋ ์ค์ ์์ธ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๋ฉ์๋๋ฅผ ๋๋ด์ง ๋ชปํ๊ณ ๋น ์ ธ๋๊ฐ๊ธฐ ๋๋ฌธ์, close() ๋ฉ์๋๊ฐ ์คํ๋์ง ์์ ๋ฆฌ์์ค๊ฐ ์ ์์ ์ผ๋ก ๋ฐํ๋์ง ์์ ์ ์๋ค.
๋ฆฌ์์ค ๋ฐํ๊ณผ close()
Connection์ด๋ PreparedStatement์๋ close() ๋ฉ์๋๊ฐ ์๋ค.
**close()**๋ ์ข ๋ฃ์ ์๋ฏธ๋ก๋ ๋ณผ ์ ์์ง๋ง, ๋ฆฌ์์ค ๋ฐํ์ ์๋ฏธ๊ฐ ๋ ์ ํฉํ๋ค
Connection์ด๋ PreparedStatement๋ ๋ณดํต ํ(pool) ๋ฐฉ์์ผ๋ก ์ด์์ด ๋๊ณ , ๋ฏธ๋ฆฌ ์ ํด์ง ํ ์์ ์ ํ๋ ์์ ๋ฆฌ์์ค๋ฅผ ๋ง๋ค์ด ๋๊ณ ํ์ํ ๋
ํ ๋น,๋ฐํํ๋ฉด ํ๋ก ๋ค์ ๋ฃ๋ ๋ฐฉ์์ผ๋ก ์ด์๋๋ค.์ฌ์ฉํ ๋ฆฌ์์ค๋ฅผ ๋น ๋ฅด๊ฒ ๋ฐํํ์ง ์์ผ๋ฉด ๋ฆฌ์์ค ๊ณ ๊ฐ๋ก ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค
public void deleteAll() throws SQLException, ClassNotFoundException {
Connection c = null;
PreparedStatement ps = null;
try {
c = connectionMaker.makeNewConnection();
ps = c.prepareStatement("DELETE FROM users");
ps.executeUpdate();
} catch (SQLException e){
throw e;
} finally {
if(ps != null){
try {
ps.close();
} catch (SQLException e){
throw e;
}
}
if(c != null){
try {
c.close();
} catch (SQLException e){
throw e;
}
}
}
}์ฝ๋์ ์ค๋ณต์์๊ฐ ๋ง์ผ๋ฉฐ, ์ค์๊ฐ ์ผ์ด๋๊ธฐ ์ฌ์ด ์ฝ๋
๐ฑ Branch chapter03/refactor3.2์ ์ค์ต ์ ์ฉ
๋งค ์ฝ๋์ ๋ฐ๋ณต๋๋ ๋ณต์กํ try/catch/finally ์ฝ๋๋ฅผ ์ฐ๊ธฐ์ ๋ฌด๋ฆฌ๊ฐ ์๋ค
-> ๋ณํ์ง ์๊ณ ์ค๋ณต๋๋ ์ฝ๋์ ์๊พธ ํ์ฅ๋๊ณ ๋ณํ๋ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํด์ฃผ๋ ์์ ์ด ํ์
public void deleteAll() throws SQLException, ClassNotFoundException {
Connection c = null;
PreparedStatement ps = null;
try {
// ์ฝ๋ ๋ณํ๋ ๋ถ๋ถ
// ๋ณํ๋ ์ฝ๋ ์ , ํ๊ฐ ๋ณํ์ง ์๋๋ค
} catch (SQLException e){
throw e;
} finally {
if(ps != null){
try {
ps.close();
} catch (SQLException e){
throw e;
}
}
if(c != null){
try {
c.close();
} catch (SQLException e){
throw e;
}
}
}
}c = connectionMaker.makeNewConnection();
ps = c.prepareStatement("DELETE FROM users");
ps.executeUpdate();-
- ์์ฃผ ๋ฐ๋๋ ๋ถ๋ถ์ ๋ฉ์๋๋ก ๋ ๋ฆฝ์์ผ๋ดค์ง๋ง, ์ด ๋ฉ์๋๊ฐ ์ฌ์ฌ์ฉ๋์ง์๊ณ DAO ๋ก์ง๋ง๋ค ๋งค๋ฒ ์๋กญ๊ฒ ๋ฉ์๋๋ฅผ ์์ฑํด ํ์ฅํด์ผํ๋ ๋จ์
-
- ์์์ ํตํด ๊ธฐ๋ฅ์ ํ์ฅ. ๋ณํ์ง ์๋ ๋ถ๋ถ์ ์ํผ ํด๋์ค์ ๋๊ณ , ๋ณํ๋ ๋ถ๋ถ์ ์ถ์ ๋ฉ์๋๋ก ์ ์
- DAO ๋ก์ง๋ง๋ค ๋งค๋ฒ ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํด ํ์ฅ๊ตฌ์กฐ๊ฐ ํด๋์ค ์ค๊ณ ์์ ์ ๊ณ ์ ๋์ด๋ฒ๋ฆฐ๋ค -> ์ค๊ณ ์์ ์ด ์๋ ์ปดํ์ผ ์์ ์์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํด์ผ ํ๋ค
- ๊ฐ๋ฐฉ ํ์ ์์น์ ์ ์งํค๋ ๊ตฌ์กฐ
- ํ ํ๋ฆฟ ๋ฉ์๋ ํจํด๋ณด๋ค ์ ์ฐํ๊ณ ํ์ฅ์ฑ์ด ๋ฐ์ด๋จ
- ์ค๋ธ์ ํธ๋ฅผ ์์ ๋๋ก ๋ถ๋ฆฌํ๊ณ ํด๋์ค ๋ ๋ฒจ์์๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง ์์กดํ๋๋ก ๋ง๋ฆ
๋งฅ๋ฝ context : ๋ณํ์ง ์๋ ๋ถ๋ถ
์ ๋ต strategy : ๋ณํ๋ ๋ถ๋ถ. ์ธํฐํ์ด์ค๋ก ์ ๊ทผํ๋ฉฐ ํ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ ๋ถ๋ถ
ํด๋ผ์ด์ธํธ๊ฐ,
๋งฅ๋ฝ Context์ ์ด๋ค ์ ๋ต Strategy๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง,
๊ฒฐ์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค
public void deleteAll() throws SQLException, ClassNotFoundException {
StatementStrategy st = new DeleteAllStatement(); // ์ ๋ต ์ค๋ธ์ ํธ ์์ฑ
jdbcContextWithStatementStrategy(st); // ์ปจํ
์คํธ๋ ์ ๋ต ์ค๋ธ์ ํธ ์ ๊ณต๋ฐ์
}StatementStrategy ํ์ ์ ์ ๋ต ์ค๋ธ์ ํธ๋ฅผ ์ ๊ณต๋ฐ๊ณ JDBC ์์ธ ์ฒ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด์ง ์ปจํ ์คํธ ์์์ ์์ ์ ์ํํ๋ค
๐ฑ Branch chapter03/refactor3.3์ ์ค์ต ์ ์ฉ
-
DAO ๋ฉ์๋๋ง๋ค ์๋ก์ด StatementStrategy ๊ตฌํ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผํ๋ค
-
์ ๋ฌํ ๋ถ๊ฐ์ ๋ณด๊ฐ ์์ ๊ฒฝ์ฐ, ์ด๋ฅผ ์ํด ์ค๋ธ์ ํธ๋ฅผ ์ ๋ฌ๋ฐ๋ ์์ฑ์์ ์ด๋ฅผ ์ ์ฅํด๋ ์ธ์คํด์ค ๋ณ์๋ฅผ ์ถ๊ฐ๋ก ๋ง๋ค์ด์ผํ๋ค
public void add(User user) throws ClassNotFoundException, SQLException { StatementStrategy st = new AddStatement(user); // ์ ๋ต ์ค๋ธ์ ํธ์ ์ถ๊ฐ์ ์ธ User ์ ๋ณด ์ ๋ฌ ! jdbcContextWithStatementStrategy(st); }
ํด๋์ค ํ์ผ์ด ๋ง์์ง๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ -> UserDao ํด๋์ค ์์ ๋ด๋ถ ํด๋์ค๋ก ์ ์
ํด๋์ค๊ฐ ๋ด๋ถ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ ์์ ์ด ์ ์ธ๋ ๊ณณ์ ์ ๋ณด์ ์ ๊ทผํ ์ ์๋ค
โ -> ์์ฑ์๋ฅผ ํตํด ์ ๋ฌํด์ค ํ์๊ฐ ์๋ค
โ -> ๋จ, ์ธ๋ถ์ ๋ณ์๋ฅผ ์ฌ์ฉํ ๋๋ ๋ฐ๋์ final๋ก ์ ์ธํด์ค์ผํ๋ค.
- ๋ค๋ฅธ ํด๋์ค ๋ด๋ถ์ ์ ์๋๋ ํด๋์ค
- ์ข ๋ฅ
- ์คํํฑ ํด๋์ค : ๋ ๋ฆฝ์ ์ผ๋ก ์ค๋ธ์ ํธ๋ก ๋ง๋ค์ด ์ง ์ ์์
- ๋ด๋ถ ํด๋์ค : ์์ ์ด ์ ์๋ ํด๋์ค์ ์ค๋ธ์ ํธ ์์์๋ง ๋ง๋ค์ด์ง ์ ์๋ ๋ด๋ถ ํด๋์ค
- ๋ด๋ถ ํด๋์ค์ ์ข ๋ฅ (๋ฒ์ ๊ธฐ์ค)
- ๋ฉค๋ฒ ๋ด๋ถ ํฌ๋์ค : ๋ฉค๋ฒ ํ๋์ฒ๋ผ ์ค๋ธ์ ํธ ๋ ๋ฒจ์์ ์ ์
- ๋ก์ปฌ ํด๋์ค : ๋ฉ์๋ ๋ ๋ฒจ์์ ์ ์
- ์ต๋ช ๋ด๋ถ ํด๋์ค : ์ด๋ฆ ๊ฐ์ง ์๋ ํด๋์ค. ์ ์ธ๋ ์์น์ ๋ฐ๋ผ ๋ฒ์๊ฐ ๋ฌ๋ผ์ง๋ค
- ์ด๋ฆ์ ๊ฐ์ง ์๋ ํด๋์ค
- ํด๋์ค ์ ์ธ๊ณผ ์ค๋ธ์ ํธ ์์ฑ์ด ๊ฒฐํฉ๋ ์ํ
- ์์ํ ํด๋์ค๋ ๊ตฌํํ ์ธํฐํ์ด์ค๋ฅผ ์์ฑ์ ๋์ ์ฌ์ฉํด ๋ฐ๋ก ์ ์ธ
- ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ ํ์๊ฐ ์๊ณ ๊ตฌํํ ์ธํฐํ์ด์ค ํ์ ์ผ๋ก๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ ์ ์ฉ
์ต๋ช ๋ด๋ถ ํด๋์ค๋ก ์ ํ
public void deleteAll() throws SQLException, ClassNotFoundException {
// StatementStrategy st = new DeleteAllStatement(); // ์ ๋ต ์ค๋ธ์ ํธ ์์ฑ
// ์ต๋ช
ํด๋์ค๋ฅผ ์ด์ฉํ ๋ฐ๋ก ๊ตฌํ
StatementStrategy st = new StatementStrategy() {
@Override
public PreparedStatement makePreparedStatement(Connection c) throws SQLException {
PreparedStatement ps = c.prepareStatement("DELETE FROM users");
return ps;
}
};
jdbcContextWithStatementStrategy(st); // ์ปจํ
์คํธ๋ ์ ๋ต ์ค๋ธ์ ํธ ์ ๊ณต๋ฐ์
}๐ฑ Branch chapter03/refactor3.4์ ์ค์ต ์ ์ฉ
JDBC์ ์ผ๋ฐ์ ์ธ ํ๋ฆ์ ๋ด๊ณ ์๋ jdbcContextWithStatementStrategy() ๋ฉ์๋๋ UserDao ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ DAO๋ค๋ ํ์ฉํ ์ ์๋ ์ฝ๋์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ฆฌ๊ฐ ํ์
JdbcContext ํด๋์ค๋ฅผ ์์ฑํด UserDao์ ์์กด๊ด๊ณ ์์ฑ
BUT, ์ธํฐํ์ด์ค๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์ฝ๋์์ ๋ฐ๋ก JdbcContext ํด๋์ค ์ฌ์ฉ
-> ํ์ฅ ๊ตฌ์กฐ๊ฐ ๋ฐํ์ ์์ ์ด ์๋ ํด๋์ค ์ค๊ณ ์์ !
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์์ ์จ์ ํ DI๋ผ๊ณ ๋ณผ ์ ์๋ค
๊ทธ๋ฌ๋ ์คํ๋ง์ DI๋ ๋๊ฒ ๋ณด์๋ฉด ๊ฐ์ฒด์ ์์ฑ๊ณผ ๊ด๊ณ ์ค์ ์ ๋ํ ์ ์ด ๊ถํ์ ์ค๋ธ์ ํธ์์ ์ ๊ฑฐํ๊ณ ์ธ๋ถ๋ก ์์ํ๋ค๋ IoC ๊ฐ๋ ์ ํฌ๊ดํ๊ธฐ ๋๋ฌธ์ JdbcContext๋ DI์ ๊ธฐ๋ณธ์ ๋ฐ๋ฅด๊ณ ์๋ค๊ณ ๋ณผ ์ ์๋ค
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ง๋ ์์ง๋ง, JdbcContext๋ฅผ UserDao์ DI ๊ตฌ์กฐ๋ก ๋ง๋ค์ด์ผ ํ๋ ์ด์ !
- JdbcContext๊ฐ ์คํ๋ง ์ปจํ ์ด๋์ ์ฑ๊ธํค ๋ ์ง์คํธ๋ฆฌ์์ ๊ด๋ฆฌ๋๋ ์ฑ๊ธํค ๋น์ด๊ธฐ ๋๋ฌธ
- JdbcContext๊ฐ DI๋ฅผ ํตํด ๋ค๋ฅธ ๋น์ ์์กดํ๊ณ ์๊ธฐ ๋๋ฌธ
๐ฑ Branch chapter03/refactor3.5์ ์ค์ต ์ ์ฉ
๋ฐ๋์ง ์๋ ์ผ์ ํ ํจํด์ ๊ฐ๋ ์์ ํ๋ฆ์ด ์กด์ฌํ๊ณ ๊ทธ ์ค ์ผ๋ถ๋ถ๋ง ์์ฃผ ๋ฐ๊ฟ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ ํฉํ ๊ตฌ์กฐ. ์ ๋ต ํจํด์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ์ต๋ช ๋ด๋ถ ํด๋์ค๋ฅผ ํ์ฉํ ๋ฐฉ์
ํ ํ๋ฆฟ
- ์ ๋ต ํจํด์ ์ปจํ ์คํธ
- ๊ณ ์ ๋ ํ ์์ ๋ฐ๊ฟ ์ ์๋ ๋ถ๋ถ์ ๋ฃ์ด์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์ฝ๋ฐฑ
- ์ต๋ช ๋ด๋ถ ํด๋์ค๋ก ๋ง๋ค์ด์ง๋ ์ค๋ธ์ ํธ
- ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ๋ฉ์๋์ ์ ๋ฌ๋๋ ์ค๋ธ์ ํธ
- ๊ฐ์ ์ฐธ์กฐํ๊ธฐ ์ํ ๊ฒ์ด ์๋ ํน์ ๋ก์ง์ ๋ด์ ๋ฉ์๋๋ฅผ ์คํ์ํค๊ธฐ ์ํจ
- ํด๋ผ์ด์ธํธ๊ฐ ํ ํ๋ฆฟ ์์์ ์คํ๋ ๋ก์ง์ ๋ด์ ์ฝ๋ฐฑ ์ค๋ธ์ ํธ ์์ฑ
- ํด๋ผ์ด์ธํธ๊ฐ ํ ํ๋ฆฟ์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ฝ๋ฐฑ ์ค๋ธ์ ํธ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ
- ํ ํ๋ฆฟ์ ์ฝ๋ฐฑ ์ค๋ธ์ ํธ์ ๋ฉ์๋๋ฅผ ํธ์ถ
- ์ฝ๋ฐฑ์ด ํด๋ผ์ด์ธํธ ๋ฉ์๋ ๋ด ์ ๋ณด์ ํ ํ๋ฆฟ์ด ์ ๊ณตํ ์ฐธ์กฐ ์ ๋ณด๋ฅผ ์ด์ฉํด ์์ ์ํ ํ ๋ฐํ
- ํ ํ๋ฆฟ์ ์ฝ๋ฐฑ์ด ๋ฐํํ ์ ๋ณด๋ฅผ ์ฌ์ฉํด ์์ ์ ๋ง์ ์ํ
- ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ค์ ๋ฐํ
-
์ผ๋ฐ์ ์ธ DI์ ํ ํ๋ฆฟ์ ์ธ์คํด์ค ๋ณ์๋ฅผ ๋ง๋ค์ด๋๊ณ ์ฌ์ฉํ ์์กด ์ค๋ธ์ ํธ๋ฅผ ์์ ์ ๋ฉ์๋๋ก ๋ฐ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋งค๋ฒ ๋ฉ์๋ ๋จ์๋ก ์ฌ์ฉํ ์ค๋ธ์ ํธ๋ฅผ ์๋กญ๊ฒ ์ ๋ฌ๋ฐ์ - ์ฝ๋ฐฑ ์ค๋ธ์ ํธ๊ฐ ๋ด๋ถ ํด๋์ค๋ก์ ์์ ์ ์์ฑํ ํด๋ผ์ด์ธํธ ๋ฉ์๋ ๋ด์ ์ ๋ณด๋ฅผ ์ง์ ์ฐธ์กฐ
๐ฑ Branch chapter03/refactor3.6์ ์ค์ต ์ ์ฉ
์คํ๋ง์์ ์ ๊ณตํ๋ ํ ํ๋ฆฟ/์ฝ๋ฐฑ ๊ธฐ์
- ์คํ๋ง์์ ์ ๊ณตํ๋ JDBC ์ฝ๋์ฉ ๊ธฐ๋ณธ ํ
ํ๋ฆฟ :
JdbcTemplate์ค์ต
PreparedStatementCreator ํ์
์ ์ฝ๋ฐฑ์ ๋ฐ์์ ์ฌ์ฉํ๋ JdbcTemplate ํ
ํ๋ฆฟ ๋ฉ์๋
public void deleteAll(){
// Spring์์ ์ง์ํด์ฃผ๋ Jdbc Template ์ฌ์ฉ
this.jdbcTemplate.update("DELETE FROM users");
}
// ์ฟผ๋ฆฌ์ ๋ฐ์ธ๋ฉํ๋ ๋ฐฉ๋ฒ
public void add(User user){
// Spring์์ ์ง์ํด์ฃผ๋ Jdbc Template ์ฌ์ฉ
this.jdbcTemplate.update("INSERT INTO users(id, name, password) VALUES(?,?,?)",
user.getId(), user.getName(), user.getPassword());
}PreparedStatementCreator ํ์
๊ณผ ResultSetExtractor ํ์
2๊ฐ์ ์ฝ๋ฐฑ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ๋ฉ์๋
But, ๋์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก queryForObject(String sql, Class requiredType) ๋ฐฉ์์ผ๋ก ๋์ฒด
// 1 -> ์ผ๋ฐ query ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ ๋
public int getCount(){
return this.jdbcTemplate.query(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
return con.prepareStatement("SELECT COUNT(*) FROM users");
}
}, new ResultSetExtractor<Integer>() {
@Override
public Integer extractData(ResultSet rs) throws SQLException, DataAccessException {
rs.next();
return rs.getInt(1);
}
});
}
// 2
public int getCount(){
return this.jdbcTemplate.queryForObject("SELECT COUNT(*) FROM users", Integer.TYPE);
}ResultSet์ ๋ก์ฐ ํ๋๋ฅผ ํธ์ถํ์ฌ ๋งคํํ ์ ์๋ RowMapper๋ฅผ ์ฌ์ฉํ๋ค
public User get(String id){
return this.jdbcTemplate.queryForObject("SELECT * FROM users WHERE id = ?",
new Object[]{id},
new RowMapper<User>() {
@Override
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;
}
}
);
}ResultSet์ ๋ก์ฐ ์ ์ฒด๋ฅผ ํธ์ถํ์ฌ ๋งคํํ ์ ์๋ RowMapper๋ฅผ ์ฌ์ฉํ๋ค
public List<User> getAll() {
return this.jdbcTemplate.query("SELECT * FROM users ORDER BY id",
new RowMapper<User>() {
@Override
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;
}
});
}