From b62183d6681d765bc609d272bbf7350981017e1a Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Mon, 20 Jul 2020 13:14:28 +0900 Subject: [PATCH 01/11] =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/UserDao.java | 56 ++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 9 deletions(-) diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index db270861f..c66a0ff13 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -16,14 +16,10 @@ public void insert(User user) throws SQLException { PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); - String sql = "INSERT INTO USERS VALUES (?, ?, ?, ?)"; + String sql = createQueryForInsert(); pstmt = con.prepareStatement(sql); - pstmt.setString(1, user.getUserId()); - pstmt.setString(2, user.getPassword()); - pstmt.setString(3, user.getName()); - pstmt.setString(4, user.getEmail()); - pstmt.executeUpdate(); + setValuesForInsert(user, pstmt); } finally { if (pstmt != null) { pstmt.close(); @@ -35,13 +31,55 @@ public void insert(User user) throws SQLException { } } - public void update(User user) throws SQLException { - // TODO 구현 필요함. + void setValuesForInsert(User user, PreparedStatement pstmt) throws SQLException { + pstmt.setString(1, user.getUserId()); + pstmt.setString(2, user.getPassword()); + pstmt.setString(3, user.getName()); + pstmt.setString(4, user.getEmail()); + + pstmt.executeUpdate(); + } + + void setValuesForUpdate(User user, PreparedStatement pstmt) throws SQLException { + pstmt.setString(1, user.getPassword()); + pstmt.setString(2, user.getName()); + pstmt.setString(3, user.getEmail()); + pstmt.setString(4, user.getUserId()); + + pstmt.executeUpdate(); + } + + String createQueryForInsert() { + return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; + } + + String createQueryForUpdate() { + return "UPDATE USERS SET password = ?, name = ?, email = ? where user_id = ?"; + } + + void update(User user) throws SQLException { + Connection con = null; + PreparedStatement pstmt = null; + try { + con = ConnectionManager.getConnection(); + String sql = createQueryForUpdate(); + pstmt = con.prepareStatement(sql); + + setValuesForUpdate(user, pstmt); + } finally { + if (pstmt != null) { + pstmt.close(); + } + + if (con != null) { + con.close(); + } + } } public List findAll() throws SQLException { // TODO 구현 필요함. - return new ArrayList(); + return new ArrayList<>(); } public User findByUserId(String userId) throws SQLException { From f56398f228fba54030adbb4fb51807da575743f0 Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Mon, 20 Jul 2020 13:14:33 +0900 Subject: [PATCH 02/11] =?UTF-8?q?=EB=B3=80=ED=99=94=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EB=8A=94=20=EB=B6=80=EB=B6=84=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EB=B6=84=EB=A6=AC=20=ED=9B=84=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/InsertJdbcTemplate.java | 11 +++++++++++ src/main/java/next/dao/UpdateJdbcTemplate.java | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 src/main/java/next/dao/InsertJdbcTemplate.java create mode 100644 src/main/java/next/dao/UpdateJdbcTemplate.java diff --git a/src/main/java/next/dao/InsertJdbcTemplate.java b/src/main/java/next/dao/InsertJdbcTemplate.java new file mode 100644 index 000000000..a634ac388 --- /dev/null +++ b/src/main/java/next/dao/InsertJdbcTemplate.java @@ -0,0 +1,11 @@ +package next.dao; + +import next.model.User; + +import java.sql.SQLException; + +public class InsertJdbcTemplate { + public void insert(User user, UserDao userDao) throws SQLException { + userDao.insert(user); + } +} diff --git a/src/main/java/next/dao/UpdateJdbcTemplate.java b/src/main/java/next/dao/UpdateJdbcTemplate.java new file mode 100644 index 000000000..b65125605 --- /dev/null +++ b/src/main/java/next/dao/UpdateJdbcTemplate.java @@ -0,0 +1,11 @@ +package next.dao; + +import next.model.User; + +import java.sql.SQLException; + +public class UpdateJdbcTemplate { + public void update(User user, UserDao userDao) throws SQLException { + userDao.update(user); + } +} From 092ca30a915b905be02c6139a06dfc01a9e3d3c7 Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Mon, 20 Jul 2020 13:32:31 +0900 Subject: [PATCH 03/11] =?UTF-8?q?=EC=B6=94=EC=83=81=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/next/dao/InsertJdbcTemplate.java | 29 ++++++- .../java/next/dao/UpdateJdbcTemplate.java | 29 ++++++- src/main/java/next/dao/UserDao.java | 80 +++++++------------ 3 files changed, 81 insertions(+), 57 deletions(-) diff --git a/src/main/java/next/dao/InsertJdbcTemplate.java b/src/main/java/next/dao/InsertJdbcTemplate.java index a634ac388..0654f2de8 100644 --- a/src/main/java/next/dao/InsertJdbcTemplate.java +++ b/src/main/java/next/dao/InsertJdbcTemplate.java @@ -1,11 +1,34 @@ package next.dao; +import core.jdbc.ConnectionManager; import next.model.User; +import java.sql.Connection; +import java.sql.PreparedStatement; import java.sql.SQLException; -public class InsertJdbcTemplate { - public void insert(User user, UserDao userDao) throws SQLException { - userDao.insert(user); +public abstract class InsertJdbcTemplate { + public void insert(User user) throws SQLException { + Connection con = null; + PreparedStatement pstmt = null; + try { + con = ConnectionManager.getConnection(); + String sql = createQueryForInsert(); + pstmt = con.prepareStatement(sql); + + setValuesForInsert(user, pstmt); + } finally { + if (pstmt != null) { + pstmt.close(); + } + + if (con != null) { + con.close(); + } + } } + + abstract void setValuesForInsert(User user, PreparedStatement pstmt) throws SQLException; + + abstract String createQueryForInsert(); } diff --git a/src/main/java/next/dao/UpdateJdbcTemplate.java b/src/main/java/next/dao/UpdateJdbcTemplate.java index b65125605..54e7eb212 100644 --- a/src/main/java/next/dao/UpdateJdbcTemplate.java +++ b/src/main/java/next/dao/UpdateJdbcTemplate.java @@ -1,11 +1,34 @@ package next.dao; +import core.jdbc.ConnectionManager; import next.model.User; +import java.sql.Connection; +import java.sql.PreparedStatement; import java.sql.SQLException; -public class UpdateJdbcTemplate { - public void update(User user, UserDao userDao) throws SQLException { - userDao.update(user); +public abstract class UpdateJdbcTemplate { + public void update(User user) throws SQLException { + Connection con = null; + PreparedStatement pstmt = null; + try { + con = ConnectionManager.getConnection(); + String sql = createQueryForUpdate(); + pstmt = con.prepareStatement(sql); + + setValuesForUpdate(user, pstmt); + } finally { + if (pstmt != null) { + pstmt.close(); + } + + if (con != null) { + con.close(); + } + } } + + abstract void setValuesForUpdate(User user, PreparedStatement pstmt) throws SQLException; + + abstract String createQueryForUpdate(); } diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index c66a0ff13..32dc6b052 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -12,69 +12,47 @@ public class UserDao { public void insert(User user) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - try { - con = ConnectionManager.getConnection(); - String sql = createQueryForInsert(); - pstmt = con.prepareStatement(sql); - setValuesForInsert(user, pstmt); - } finally { - if (pstmt != null) { - pstmt.close(); - } + InsertJdbcTemplate insertJdbcTemplate = new InsertJdbcTemplate() { + @Override + void setValuesForInsert(User user, PreparedStatement pstmt) throws SQLException { + pstmt.setString(1, user.getUserId()); + pstmt.setString(2, user.getPassword()); + pstmt.setString(3, user.getName()); + pstmt.setString(4, user.getEmail()); - if (con != null) { - con.close(); + pstmt.executeUpdate(); } - } - } - - void setValuesForInsert(User user, PreparedStatement pstmt) throws SQLException { - pstmt.setString(1, user.getUserId()); - pstmt.setString(2, user.getPassword()); - pstmt.setString(3, user.getName()); - pstmt.setString(4, user.getEmail()); - - pstmt.executeUpdate(); - } - - void setValuesForUpdate(User user, PreparedStatement pstmt) throws SQLException { - pstmt.setString(1, user.getPassword()); - pstmt.setString(2, user.getName()); - pstmt.setString(3, user.getEmail()); - pstmt.setString(4, user.getUserId()); - pstmt.executeUpdate(); - } - - String createQueryForInsert() { - return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; - } + @Override + String createQueryForInsert() { + return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; + } + }; - String createQueryForUpdate() { - return "UPDATE USERS SET password = ?, name = ?, email = ? where user_id = ?"; + insertJdbcTemplate.insert(user); } void update(User user) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - try { - con = ConnectionManager.getConnection(); - String sql = createQueryForUpdate(); - pstmt = con.prepareStatement(sql); - setValuesForUpdate(user, pstmt); - } finally { - if (pstmt != null) { - pstmt.close(); + UpdateJdbcTemplate updateJdbcTemplate = new UpdateJdbcTemplate() { + @Override + void setValuesForUpdate(User user, PreparedStatement pstmt) throws SQLException { + pstmt.setString(1, user.getPassword()); + pstmt.setString(2, user.getName()); + pstmt.setString(3, user.getEmail()); + pstmt.setString(4, user.getUserId()); + + pstmt.executeUpdate(); } - if (con != null) { - con.close(); + @Override + String createQueryForUpdate() { + return "UPDATE USERS SET password = ?, name = ?, email = ? where userId = ?"; } - } + }; + + updateJdbcTemplate.update(user); } public List findAll() throws SQLException { From 9999e1a7e956fe75bf90ee0df68b54f6c2bf5303 Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Mon, 20 Jul 2020 13:36:56 +0900 Subject: [PATCH 04/11] =?UTF-8?q?=EC=A4=91=EB=B3=B5=EB=90=9C=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ertJdbcTemplate.java => JdbcTemplate.java} | 12 +++---- .../java/next/dao/UpdateJdbcTemplate.java | 34 ------------------- src/main/java/next/dao/UserDao.java | 16 ++++----- 3 files changed, 14 insertions(+), 48 deletions(-) rename src/main/java/next/dao/{InsertJdbcTemplate.java => JdbcTemplate.java} (62%) delete mode 100644 src/main/java/next/dao/UpdateJdbcTemplate.java diff --git a/src/main/java/next/dao/InsertJdbcTemplate.java b/src/main/java/next/dao/JdbcTemplate.java similarity index 62% rename from src/main/java/next/dao/InsertJdbcTemplate.java rename to src/main/java/next/dao/JdbcTemplate.java index 0654f2de8..e4e23136c 100644 --- a/src/main/java/next/dao/InsertJdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -7,16 +7,16 @@ import java.sql.PreparedStatement; import java.sql.SQLException; -public abstract class InsertJdbcTemplate { - public void insert(User user) throws SQLException { +public abstract class JdbcTemplate { + public void execute(User user) throws SQLException { Connection con = null; PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); - String sql = createQueryForInsert(); + String sql = createQuery(); pstmt = con.prepareStatement(sql); - setValuesForInsert(user, pstmt); + setValues(user, pstmt); } finally { if (pstmt != null) { pstmt.close(); @@ -28,7 +28,7 @@ public void insert(User user) throws SQLException { } } - abstract void setValuesForInsert(User user, PreparedStatement pstmt) throws SQLException; + abstract void setValues(User user, PreparedStatement pstmt) throws SQLException; - abstract String createQueryForInsert(); + abstract String createQuery(); } diff --git a/src/main/java/next/dao/UpdateJdbcTemplate.java b/src/main/java/next/dao/UpdateJdbcTemplate.java deleted file mode 100644 index 54e7eb212..000000000 --- a/src/main/java/next/dao/UpdateJdbcTemplate.java +++ /dev/null @@ -1,34 +0,0 @@ -package next.dao; - -import core.jdbc.ConnectionManager; -import next.model.User; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; - -public abstract class UpdateJdbcTemplate { - public void update(User user) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - try { - con = ConnectionManager.getConnection(); - String sql = createQueryForUpdate(); - pstmt = con.prepareStatement(sql); - - setValuesForUpdate(user, pstmt); - } finally { - if (pstmt != null) { - pstmt.close(); - } - - if (con != null) { - con.close(); - } - } - } - - abstract void setValuesForUpdate(User user, PreparedStatement pstmt) throws SQLException; - - abstract String createQueryForUpdate(); -} diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index 32dc6b052..4107953ca 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -13,9 +13,9 @@ public class UserDao { public void insert(User user) throws SQLException { - InsertJdbcTemplate insertJdbcTemplate = new InsertJdbcTemplate() { + JdbcTemplate insertJdbcTemplate = new JdbcTemplate() { @Override - void setValuesForInsert(User user, PreparedStatement pstmt) throws SQLException { + void setValues(User user, PreparedStatement pstmt) throws SQLException { pstmt.setString(1, user.getUserId()); pstmt.setString(2, user.getPassword()); pstmt.setString(3, user.getName()); @@ -25,19 +25,19 @@ void setValuesForInsert(User user, PreparedStatement pstmt) throws SQLException } @Override - String createQueryForInsert() { + String createQuery() { return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; } }; - insertJdbcTemplate.insert(user); + insertJdbcTemplate.execute(user); } void update(User user) throws SQLException { - UpdateJdbcTemplate updateJdbcTemplate = new UpdateJdbcTemplate() { + JdbcTemplate updateJdbcTemplate = new JdbcTemplate() { @Override - void setValuesForUpdate(User user, PreparedStatement pstmt) throws SQLException { + void setValues(User user, PreparedStatement pstmt) throws SQLException { pstmt.setString(1, user.getPassword()); pstmt.setString(2, user.getName()); pstmt.setString(3, user.getEmail()); @@ -47,12 +47,12 @@ void setValuesForUpdate(User user, PreparedStatement pstmt) throws SQLException } @Override - String createQueryForUpdate() { + String createQuery() { return "UPDATE USERS SET password = ?, name = ?, email = ? where userId = ?"; } }; - updateJdbcTemplate.update(user); + updateJdbcTemplate.execute(user); } public List findAll() throws SQLException { From 37131b8fe758cd91c0b94dacda9fcc2b7c639781 Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Mon, 20 Jul 2020 15:13:35 +0900 Subject: [PATCH 05/11] =?UTF-8?q?JdbcTemplate=20User=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=EC=84=B1=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/JdbcTemplate.java | 12 ++++-------- src/main/java/next/dao/UserDao.java | 22 ++++++++-------------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/main/java/next/dao/JdbcTemplate.java b/src/main/java/next/dao/JdbcTemplate.java index e4e23136c..f1e70ed2d 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -1,22 +1,20 @@ package next.dao; import core.jdbc.ConnectionManager; -import next.model.User; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public abstract class JdbcTemplate { - public void execute(User user) throws SQLException { + public void execute(String query) throws SQLException { Connection con = null; PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); - String sql = createQuery(); - pstmt = con.prepareStatement(sql); + pstmt = con.prepareStatement(query); - setValues(user, pstmt); + setValues(pstmt); } finally { if (pstmt != null) { pstmt.close(); @@ -28,7 +26,5 @@ public void execute(User user) throws SQLException { } } - abstract void setValues(User user, PreparedStatement pstmt) throws SQLException; - - abstract String createQuery(); + abstract void setValues(PreparedStatement pstmt) throws SQLException; } diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index 4107953ca..f870e3466 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -13,9 +13,11 @@ public class UserDao { public void insert(User user) throws SQLException { + String query = "INSERT INTO USERS VALUES (?, ?, ?, ?)"; + JdbcTemplate insertJdbcTemplate = new JdbcTemplate() { @Override - void setValues(User user, PreparedStatement pstmt) throws SQLException { + void setValues(PreparedStatement pstmt) throws SQLException { pstmt.setString(1, user.getUserId()); pstmt.setString(2, user.getPassword()); pstmt.setString(3, user.getName()); @@ -23,21 +25,18 @@ void setValues(User user, PreparedStatement pstmt) throws SQLException { pstmt.executeUpdate(); } - - @Override - String createQuery() { - return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; - } }; - insertJdbcTemplate.execute(user); + insertJdbcTemplate.execute(query); } void update(User user) throws SQLException { + String query = "UPDATE USERS SET password = ?, name = ?, email = ? where userId = ?"; + JdbcTemplate updateJdbcTemplate = new JdbcTemplate() { @Override - void setValues(User user, PreparedStatement pstmt) throws SQLException { + void setValues(PreparedStatement pstmt) throws SQLException { pstmt.setString(1, user.getPassword()); pstmt.setString(2, user.getName()); pstmt.setString(3, user.getEmail()); @@ -45,14 +44,9 @@ void setValues(User user, PreparedStatement pstmt) throws SQLException { pstmt.executeUpdate(); } - - @Override - String createQuery() { - return "UPDATE USERS SET password = ?, name = ?, email = ? where userId = ?"; - } }; - updateJdbcTemplate.execute(user); + updateJdbcTemplate.execute(query); } public List findAll() throws SQLException { From d4e0e478b093fe8c1c21dbf0feccf2616fbe23b5 Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Mon, 20 Jul 2020 15:41:31 +0900 Subject: [PATCH 06/11] =?UTF-8?q?select=20=EB=AC=B8=20=EB=8B=A8=EC=9D=BC?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/next/dao/SelectJdbcTemplate.java | 46 +++++++++++++++ src/main/java/next/dao/UserDao.java | 58 ++++++++++--------- 2 files changed, 77 insertions(+), 27 deletions(-) create mode 100644 src/main/java/next/dao/SelectJdbcTemplate.java diff --git a/src/main/java/next/dao/SelectJdbcTemplate.java b/src/main/java/next/dao/SelectJdbcTemplate.java new file mode 100644 index 000000000..559f5c321 --- /dev/null +++ b/src/main/java/next/dao/SelectJdbcTemplate.java @@ -0,0 +1,46 @@ +package next.dao; + +import core.jdbc.ConnectionManager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.List; + +public abstract class SelectJdbcTemplate { + + public Object queryForObject(String sql) throws SQLException { + Connection con = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + con = ConnectionManager.getConnection(); + pstmt = con.prepareStatement(sql); + + setValues(pstmt); + + rs = pstmt.executeQuery(); + + return mapRow(rs); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (rs != null) { + rs.close(); + } + if (pstmt != null) { + pstmt.close(); + } + if (con != null) { + con.close(); + } + } + + return null; + } + + abstract void setValues(PreparedStatement preparedStatement) throws SQLException; + + abstract Object mapRow(ResultSet rs) throws SQLException; +} diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index f870e3466..5266b181c 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -50,39 +50,43 @@ void setValues(PreparedStatement pstmt) throws SQLException { } public List findAll() throws SQLException { - // TODO 구현 필요함. + SelectJdbcTemplate sjt = new SelectJdbcTemplate() { + @Override + void setValues(PreparedStatement preparedStatement) throws SQLException { + + } + + @Override + Object mapRow(ResultSet rs) throws SQLException { + return null; + } + }; + + // TODO 구현 필요함. return new ArrayList<>(); } public User findByUserId(String userId) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - con = ConnectionManager.getConnection(); - String sql = "SELECT userId, password, name, email FROM USERS WHERE userid=?"; - pstmt = con.prepareStatement(sql); - pstmt.setString(1, userId); - - rs = pstmt.executeQuery(); - - User user = null; - if (rs.next()) { - user = new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), - rs.getString("email")); - } - return user; - } finally { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); + String sql = "SELECT userId, password, name, email FROM USERS WHERE userid=?"; + + SelectJdbcTemplate sjt = new SelectJdbcTemplate() { + @Override + void setValues(PreparedStatement pstmt) throws SQLException { + pstmt.setString(1, userId); } - if (con != null) { - con.close(); + + @Override + Object mapRow(ResultSet rs) throws SQLException { + User user = null; + if (rs.next()) { + user = new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), + rs.getString("email")); + } + return user; } - } + }; + + return (User) sjt.queryForObject(sql); } } From 350ef0455e4fdf8efc2d2a718ee8c43830ecdb8f Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Mon, 20 Jul 2020 18:39:36 +0900 Subject: [PATCH 07/11] =?UTF-8?q?select=20=EB=AC=B8=20template=20=EB=B6=84?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/next/dao/SelectJdbcTemplate.java | 41 ++++++++++++++++++- src/main/java/next/dao/UserDao.java | 24 +++++------ 2 files changed, 52 insertions(+), 13 deletions(-) diff --git a/src/main/java/next/dao/SelectJdbcTemplate.java b/src/main/java/next/dao/SelectJdbcTemplate.java index 559f5c321..19e91c5c9 100644 --- a/src/main/java/next/dao/SelectJdbcTemplate.java +++ b/src/main/java/next/dao/SelectJdbcTemplate.java @@ -6,10 +6,47 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; import java.util.List; public abstract class SelectJdbcTemplate { + public List query(String sql) throws SQLException { + Connection con = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + con = ConnectionManager.getConnection(); + pstmt = con.prepareStatement(sql); + + setValues(pstmt); + + rs = pstmt.executeQuery(); + + List list = new ArrayList<>(); + while (rs.next()) { + list.add(mapRow(rs)); + } + + return list; + + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (rs != null) { + rs.close(); + } + if (pstmt != null) { + pstmt.close(); + } + if (con != null) { + con.close(); + } + } + + return null; + } + public Object queryForObject(String sql) throws SQLException { Connection con = null; PreparedStatement pstmt = null; @@ -22,7 +59,9 @@ public Object queryForObject(String sql) throws SQLException { rs = pstmt.executeQuery(); - return mapRow(rs); + if (rs.next()) { + return mapRow(rs); + } } catch (SQLException e) { e.printStackTrace(); } finally { diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index 5266b181c..c3ffa0c2c 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -1,14 +1,13 @@ package next.dao; -import java.sql.Connection; +import next.model.User; + import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; - -import core.jdbc.ConnectionManager; -import next.model.User; +import java.util.stream.Collectors; public class UserDao { public void insert(User user) throws SQLException { @@ -50,6 +49,9 @@ void setValues(PreparedStatement pstmt) throws SQLException { } public List findAll() throws SQLException { + + String sql = "SELECT userId, password, name, email FROM USERS"; + SelectJdbcTemplate sjt = new SelectJdbcTemplate() { @Override void setValues(PreparedStatement preparedStatement) throws SQLException { @@ -58,12 +60,14 @@ void setValues(PreparedStatement preparedStatement) throws SQLException { @Override Object mapRow(ResultSet rs) throws SQLException { - return null; + return new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), + rs.getString("email")); } }; - // TODO 구현 필요함. - return new ArrayList<>(); + return sjt.query(sql).stream() + .map(o -> (User) o) + .collect(Collectors.toList()); } public User findByUserId(String userId) throws SQLException { @@ -78,12 +82,8 @@ void setValues(PreparedStatement pstmt) throws SQLException { @Override Object mapRow(ResultSet rs) throws SQLException { - User user = null; - if (rs.next()) { - user = new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), + return new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), rs.getString("email")); - } - return user; } }; From 0a61517f1531919c8d9659b189d04da2b34cff43 Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Tue, 21 Jul 2020 09:33:33 +0900 Subject: [PATCH 08/11] =?UTF-8?q?template=20=ED=81=B4=EB=9E=98=EC=8A=A4=20?= =?UTF-8?q?=ED=95=98=EB=82=98=EB=A1=9C=20=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/JdbcTemplate.java | 76 ++++++++++++++++- .../java/next/dao/SelectJdbcTemplate.java | 85 ------------------- src/main/java/next/dao/UserDao.java | 19 +++-- 3 files changed, 89 insertions(+), 91 deletions(-) delete mode 100644 src/main/java/next/dao/SelectJdbcTemplate.java diff --git a/src/main/java/next/dao/JdbcTemplate.java b/src/main/java/next/dao/JdbcTemplate.java index f1e70ed2d..b7499c317 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -4,10 +4,82 @@ import java.sql.Connection; import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; public abstract class JdbcTemplate { - public void execute(String query) throws SQLException { + + public List query(String sql) throws SQLException { + Connection con = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + con = ConnectionManager.getConnection(); + pstmt = con.prepareStatement(sql); + + setValues(pstmt); + + rs = pstmt.executeQuery(); + + List list = new ArrayList<>(); + while (rs.next()) { + list.add(mapRow(rs)); + } + + return list; + + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (rs != null) { + rs.close(); + } + if (pstmt != null) { + pstmt.close(); + } + if (con != null) { + con.close(); + } + } + + return null; + } + + public Object queryForObject(String sql) throws SQLException { + Connection con = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + con = ConnectionManager.getConnection(); + pstmt = con.prepareStatement(sql); + + setValues(pstmt); + + rs = pstmt.executeQuery(); + + if (rs.next()) { + return mapRow(rs); + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (rs != null) { + rs.close(); + } + if (pstmt != null) { + pstmt.close(); + } + if (con != null) { + con.close(); + } + } + + return null; + } + + public void update(String query) throws SQLException { Connection con = null; PreparedStatement pstmt = null; try { @@ -27,4 +99,6 @@ public void execute(String query) throws SQLException { } abstract void setValues(PreparedStatement pstmt) throws SQLException; + + abstract Object mapRow(ResultSet rs) throws SQLException; } diff --git a/src/main/java/next/dao/SelectJdbcTemplate.java b/src/main/java/next/dao/SelectJdbcTemplate.java deleted file mode 100644 index 19e91c5c9..000000000 --- a/src/main/java/next/dao/SelectJdbcTemplate.java +++ /dev/null @@ -1,85 +0,0 @@ -package next.dao; - -import core.jdbc.ConnectionManager; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; - -public abstract class SelectJdbcTemplate { - - public List query(String sql) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - con = ConnectionManager.getConnection(); - pstmt = con.prepareStatement(sql); - - setValues(pstmt); - - rs = pstmt.executeQuery(); - - List list = new ArrayList<>(); - while (rs.next()) { - list.add(mapRow(rs)); - } - - return list; - - } catch (SQLException e) { - e.printStackTrace(); - } finally { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - if (con != null) { - con.close(); - } - } - - return null; - } - - public Object queryForObject(String sql) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - con = ConnectionManager.getConnection(); - pstmt = con.prepareStatement(sql); - - setValues(pstmt); - - rs = pstmt.executeQuery(); - - if (rs.next()) { - return mapRow(rs); - } - } catch (SQLException e) { - e.printStackTrace(); - } finally { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - if (con != null) { - con.close(); - } - } - - return null; - } - - abstract void setValues(PreparedStatement preparedStatement) throws SQLException; - - abstract Object mapRow(ResultSet rs) throws SQLException; -} diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index c3ffa0c2c..f26dc8a5f 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -5,7 +5,6 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -24,9 +23,14 @@ void setValues(PreparedStatement pstmt) throws SQLException { pstmt.executeUpdate(); } + + @Override + Object mapRow(ResultSet rs) throws SQLException { + return null; + } }; - insertJdbcTemplate.execute(query); + insertJdbcTemplate.update(query); } void update(User user) throws SQLException { @@ -43,16 +47,21 @@ void setValues(PreparedStatement pstmt) throws SQLException { pstmt.executeUpdate(); } + + @Override + Object mapRow(ResultSet rs) throws SQLException { + return null; + } }; - updateJdbcTemplate.execute(query); + updateJdbcTemplate.update(query); } public List findAll() throws SQLException { String sql = "SELECT userId, password, name, email FROM USERS"; - SelectJdbcTemplate sjt = new SelectJdbcTemplate() { + JdbcTemplate sjt = new JdbcTemplate() { @Override void setValues(PreparedStatement preparedStatement) throws SQLException { @@ -74,7 +83,7 @@ public User findByUserId(String userId) throws SQLException { String sql = "SELECT userId, password, name, email FROM USERS WHERE userid=?"; - SelectJdbcTemplate sjt = new SelectJdbcTemplate() { + JdbcTemplate sjt = new JdbcTemplate() { @Override void setValues(PreparedStatement pstmt) throws SQLException { pstmt.setString(1, userId); From 0bdc199698e02c4ab0e7ed6557509133d3a7c995 Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Tue, 21 Jul 2020 15:13:11 +0900 Subject: [PATCH 09/11] =?UTF-8?q?=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=8A=A4=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/JdbcTemplate.java | 22 ++--- .../next/dao/PreparedStatementSetter.java | 8 ++ src/main/java/next/dao/RowMapper.java | 8 ++ src/main/java/next/dao/UserDao.java | 92 +++++++------------ 4 files changed, 59 insertions(+), 71 deletions(-) create mode 100644 src/main/java/next/dao/PreparedStatementSetter.java create mode 100644 src/main/java/next/dao/RowMapper.java diff --git a/src/main/java/next/dao/JdbcTemplate.java b/src/main/java/next/dao/JdbcTemplate.java index b7499c317..b2fe8d547 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -9,9 +9,9 @@ import java.util.ArrayList; import java.util.List; -public abstract class JdbcTemplate { +class JdbcTemplate { - public List query(String sql) throws SQLException { + List query(String sql, PreparedStatementSetter setter, RowMapper rowMapper) throws SQLException { Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; @@ -19,13 +19,13 @@ public List query(String sql) throws SQLException { con = ConnectionManager.getConnection(); pstmt = con.prepareStatement(sql); - setValues(pstmt); + setter.values(pstmt); rs = pstmt.executeQuery(); List list = new ArrayList<>(); while (rs.next()) { - list.add(mapRow(rs)); + list.add(rowMapper.mapRow(rs)); } return list; @@ -47,7 +47,7 @@ public List query(String sql) throws SQLException { return null; } - public Object queryForObject(String sql) throws SQLException { + Object queryForObject(String sql, PreparedStatementSetter setter, RowMapper rowMapper) throws SQLException { Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; @@ -55,12 +55,12 @@ public Object queryForObject(String sql) throws SQLException { con = ConnectionManager.getConnection(); pstmt = con.prepareStatement(sql); - setValues(pstmt); + setter.values(pstmt); rs = pstmt.executeQuery(); if (rs.next()) { - return mapRow(rs); + return rowMapper.mapRow(rs); } } catch (SQLException e) { e.printStackTrace(); @@ -79,14 +79,14 @@ public Object queryForObject(String sql) throws SQLException { return null; } - public void update(String query) throws SQLException { + void update(String query, PreparedStatementSetter setter) throws SQLException { Connection con = null; PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); pstmt = con.prepareStatement(query); - setValues(pstmt); + setter.values(pstmt); } finally { if (pstmt != null) { pstmt.close(); @@ -97,8 +97,4 @@ public void update(String query) throws SQLException { } } } - - abstract void setValues(PreparedStatement pstmt) throws SQLException; - - abstract Object mapRow(ResultSet rs) throws SQLException; } diff --git a/src/main/java/next/dao/PreparedStatementSetter.java b/src/main/java/next/dao/PreparedStatementSetter.java new file mode 100644 index 000000000..167e91518 --- /dev/null +++ b/src/main/java/next/dao/PreparedStatementSetter.java @@ -0,0 +1,8 @@ +package next.dao; + +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public interface PreparedStatementSetter { + void values(PreparedStatement preparedStatement) throws SQLException; +} diff --git a/src/main/java/next/dao/RowMapper.java b/src/main/java/next/dao/RowMapper.java new file mode 100644 index 000000000..018c4708a --- /dev/null +++ b/src/main/java/next/dao/RowMapper.java @@ -0,0 +1,8 @@ +package next.dao; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public interface RowMapper { + Object mapRow(ResultSet rs) throws SQLException; +} diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index f26dc8a5f..494ce632f 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -2,7 +2,6 @@ import next.model.User; -import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; @@ -13,89 +12,66 @@ public void insert(User user) throws SQLException { String query = "INSERT INTO USERS VALUES (?, ?, ?, ?)"; - JdbcTemplate insertJdbcTemplate = new JdbcTemplate() { - @Override - void setValues(PreparedStatement pstmt) throws SQLException { - pstmt.setString(1, user.getUserId()); - pstmt.setString(2, user.getPassword()); - pstmt.setString(3, user.getName()); - pstmt.setString(4, user.getEmail()); - - pstmt.executeUpdate(); - } - - @Override - Object mapRow(ResultSet rs) throws SQLException { - return null; - } + JdbcTemplate insertJdbcTemplate = new JdbcTemplate(); + PreparedStatementSetter pss = pstmt -> { + pstmt.setString(1, user.getUserId()); + pstmt.setString(2, user.getPassword()); + pstmt.setString(3, user.getName()); + pstmt.setString(4, user.getEmail()); + + pstmt.executeUpdate(); }; - insertJdbcTemplate.update(query); + insertJdbcTemplate.update(query, pss); } - void update(User user) throws SQLException { + public void update(User user) throws SQLException { String query = "UPDATE USERS SET password = ?, name = ?, email = ? where userId = ?"; - JdbcTemplate updateJdbcTemplate = new JdbcTemplate() { - @Override - void setValues(PreparedStatement pstmt) throws SQLException { - pstmt.setString(1, user.getPassword()); - pstmt.setString(2, user.getName()); - pstmt.setString(3, user.getEmail()); - pstmt.setString(4, user.getUserId()); - - pstmt.executeUpdate(); - } - - @Override - Object mapRow(ResultSet rs) throws SQLException { - return null; - } + JdbcTemplate updateJdbcTemplate = new JdbcTemplate(); + PreparedStatementSetter pss = pstmt -> { + pstmt.setString(1, user.getPassword()); + pstmt.setString(2, user.getName()); + pstmt.setString(3, user.getEmail()); + pstmt.setString(4, user.getUserId()); + + pstmt.executeUpdate(); }; - updateJdbcTemplate.update(query); + updateJdbcTemplate.update(query, pss); } public List findAll() throws SQLException { String sql = "SELECT userId, password, name, email FROM USERS"; - JdbcTemplate sjt = new JdbcTemplate() { - @Override - void setValues(PreparedStatement preparedStatement) throws SQLException { + JdbcTemplate sjt = new JdbcTemplate(); - } + PreparedStatementSetter setter = preparedStatement -> {}; - @Override - Object mapRow(ResultSet rs) throws SQLException { - return new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), - rs.getString("email")); - } - }; + RowMapper rowMapper = this::getUser; - return sjt.query(sql).stream() + return sjt.query(sql, setter, rowMapper).stream() .map(o -> (User) o) .collect(Collectors.toList()); } + private User getUser(ResultSet rs) throws SQLException { + return new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), + rs.getString("email")); + } + public User findByUserId(String userId) throws SQLException { String sql = "SELECT userId, password, name, email FROM USERS WHERE userid=?"; - JdbcTemplate sjt = new JdbcTemplate() { - @Override - void setValues(PreparedStatement pstmt) throws SQLException { - pstmt.setString(1, userId); - } - - @Override - Object mapRow(ResultSet rs) throws SQLException { - return new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), - rs.getString("email")); - } - }; + JdbcTemplate sjt = new JdbcTemplate(); + + PreparedStatementSetter setter = pstmt -> pstmt.setString(1, userId); + + RowMapper rowMapper = this::getUser; - return (User) sjt.queryForObject(sql); + return (User) sjt.queryForObject(sql, setter, rowMapper); } } From b03d015f30d0aa627ae1b02af0f63dc3e38f745b Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Wed, 22 Jul 2020 14:34:15 +0900 Subject: [PATCH 10/11] =?UTF-8?q?try-with-resources=20=EA=B5=AC=EB=AC=B8?= =?UTF-8?q?=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/JdbcTemplate.java | 47 +++++------------------- 1 file changed, 10 insertions(+), 37 deletions(-) diff --git a/src/main/java/next/dao/JdbcTemplate.java b/src/main/java/next/dao/JdbcTemplate.java index b2fe8d547..8c5368454 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -12,13 +12,11 @@ class JdbcTemplate { List query(String sql, PreparedStatementSetter setter, RowMapper rowMapper) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - con = ConnectionManager.getConnection(); - pstmt = con.prepareStatement(sql); + ResultSet rs = null; + try (Connection con = ConnectionManager.getConnection(); + PreparedStatement pstmt = con.prepareStatement(sql); + ) { setter.values(pstmt); rs = pstmt.executeQuery(); @@ -36,24 +34,16 @@ List query(String sql, PreparedStatementSetter setter, RowMapper rowMapp if (rs != null) { rs.close(); } - if (pstmt != null) { - pstmt.close(); - } - if (con != null) { - con.close(); - } } return null; } Object queryForObject(String sql, PreparedStatementSetter setter, RowMapper rowMapper) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; ResultSet rs = null; - try { - con = ConnectionManager.getConnection(); - pstmt = con.prepareStatement(sql); + try (Connection con = ConnectionManager.getConnection(); + PreparedStatement pstmt = con.prepareStatement(sql); + ){ setter.values(pstmt); @@ -68,33 +58,16 @@ Object queryForObject(String sql, PreparedStatementSetter setter, RowMapper rowM if (rs != null) { rs.close(); } - if (pstmt != null) { - pstmt.close(); - } - if (con != null) { - con.close(); - } } return null; } void update(String query, PreparedStatementSetter setter) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - try { - con = ConnectionManager.getConnection(); - pstmt = con.prepareStatement(query); - + try ( + Connection con = ConnectionManager.getConnection(); + PreparedStatement pstmt = con.prepareStatement(query);){ setter.values(pstmt); - } finally { - if (pstmt != null) { - pstmt.close(); - } - - if (con != null) { - con.close(); - } } } } From 5826d7a22fa841fda49db0f3102a66f567c02dda Mon Sep 17 00:00:00 2001 From: yjs2952 Date: Thu, 23 Jul 2020 11:53:38 +0900 Subject: [PATCH 11/11] =?UTF-8?q?RowMapper=20=EC=A0=9C=EB=84=A4=EB=A6=AD?= =?UTF-8?q?=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/RowMapper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/next/dao/RowMapper.java b/src/main/java/next/dao/RowMapper.java index 018c4708a..88431d8d0 100644 --- a/src/main/java/next/dao/RowMapper.java +++ b/src/main/java/next/dao/RowMapper.java @@ -3,6 +3,6 @@ import java.sql.ResultSet; import java.sql.SQLException; -public interface RowMapper { - Object mapRow(ResultSet rs) throws SQLException; +public interface RowMapper { + T mapRow(ResultSet rs) throws SQLException; }