From 47d6b629a77cc5d01aa531673151e70354bbc1a0 Mon Sep 17 00:00:00 2001 From: siyoon Date: Mon, 27 Jul 2020 09:03:15 +0900 Subject: [PATCH 01/17] =?UTF-8?q?CreateUserController=EA=B0=80=20UserDao?= =?UTF-8?q?=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/controller/CreateUserController.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/next/controller/CreateUserController.java b/src/main/java/next/controller/CreateUserController.java index d0be7723a..a5fac2bb2 100644 --- a/src/main/java/next/controller/CreateUserController.java +++ b/src/main/java/next/controller/CreateUserController.java @@ -3,6 +3,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import next.dao.UserDao; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -19,7 +20,9 @@ public String execute(HttpServletRequest req, HttpServletResponse resp) throws E req.getParameter("email")); log.debug("User : {}", user); - DataBase.addUser(user); +// DataBase.addUser(user); + UserDao userDao = new UserDao(); + userDao.insert(user); return "redirect:/"; } } From 73d1102fef7a00d316fff2a8ca2b87cc1bf08be9 Mon Sep 17 00:00:00 2001 From: siyoon Date: Mon, 27 Jul 2020 09:03:25 +0900 Subject: [PATCH 02/17] =?UTF-8?q?UserDao=EC=9D=98=20findAll()=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/UserDao.java | 30 +++++++++++++++++++++++-- src/main/resources/jwp.sql | 3 ++- src/test/java/next/dao/UserDaoTest.java | 2 +- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index db270861f..90388edbb 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -40,8 +40,34 @@ public void update(User user) throws SQLException { } public List findAll() throws SQLException { - // TODO 구현 필요함. - return new ArrayList(); + List users = new ArrayList<>(); + Connection con = null; + PreparedStatement pstmt = null; + ResultSet rs = null; + try { + con = ConnectionManager.getConnection(); + String sql = "SELECT userId, password, name, email FROM USERS"; + pstmt = con.prepareStatement(sql); + rs = pstmt.executeQuery(); + + while (rs.next()) { + User user = new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), + rs.getString("email")); + users.add(user); + } + + } finally { + if (rs != null) { + rs.close(); + } + if (pstmt != null) { + pstmt.close(); + } + if (con != null) { + con.close(); + } + } + return users; } public User findByUserId(String userId) throws SQLException { diff --git a/src/main/resources/jwp.sql b/src/main/resources/jwp.sql index 85a9d3885..59d18a8b8 100644 --- a/src/main/resources/jwp.sql +++ b/src/main/resources/jwp.sql @@ -9,4 +9,5 @@ CREATE TABLE USERS ( PRIMARY KEY (userId) ); -INSERT INTO USERS VALUES('admin', 'password', '자바지기', 'admin@slipp.net'); \ No newline at end of file +INSERT INTO USERS VALUES('admin', 'password', '자바지기', 'admin@slipp.net'); +INSERT INTO USERS VALUES('siyoon', '12334', '푸루', 'jung_210@naver.com'); \ No newline at end of file diff --git a/src/test/java/next/dao/UserDaoTest.java b/src/test/java/next/dao/UserDaoTest.java index a68f75a8c..73993d322 100644 --- a/src/test/java/next/dao/UserDaoTest.java +++ b/src/test/java/next/dao/UserDaoTest.java @@ -39,6 +39,6 @@ public void crud() throws Exception { public void findAll() throws Exception { UserDao userDao = new UserDao(); List users = userDao.findAll(); - assertEquals(1, users.size()); + assertEquals(2, users.size()); } } \ No newline at end of file From f95a9c46fe2c45c8f01f6d72b1190b63fa95d09e Mon Sep 17 00:00:00 2001 From: siyoon Date: Mon, 27 Jul 2020 09:23:44 +0900 Subject: [PATCH 03/17] =?UTF-8?q?UserDao=EC=9D=98=20update()=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/UserDao.java | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index 90388edbb..a8a551fff 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -36,7 +36,26 @@ public void insert(User user) throws SQLException { } public void update(User user) throws SQLException { - // TODO 구현 필요함. + Connection con = null; + PreparedStatement pstmt = null; + try { + con = ConnectionManager.getConnection(); + String sql = "UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"; + pstmt = con.prepareStatement(sql); + pstmt.setString(1, user.getPassword()); + pstmt.setString(2, user.getName()); + pstmt.setString(3, user.getEmail()); + pstmt.setString(4, user.getUserId()); + + pstmt.executeUpdate(); + } finally { + if (pstmt != null) { + pstmt.close(); + } + if (con != null) { + con.close(); + } + } } public List findAll() throws SQLException { From 7a321e1331bb659dfeaa1a03f6695129a82a5eac Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 04:56:11 +0900 Subject: [PATCH 04/17] =?UTF-8?q?INSERT=EC=99=80=20UPDATE=EC=BF=BC?= =?UTF-8?q?=EB=A6=AC=20=EC=A4=91=EB=B3=B5=20=EC=A0=9C=EA=B1=B0=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20(p237=201=EB=B2=88=EC=A7=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/UserDao.java | 37 ++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index a8a551fff..1363a8017 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -16,13 +16,9 @@ public void insert(User user) throws SQLException { PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); - String sql = "INSERT INTO USERS VALUES (?, ?, ?, ?)"; + final 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()); - + setValuesForInsert(user, pstmt); pstmt.executeUpdate(); } finally { if (pstmt != null) { @@ -35,17 +31,25 @@ public void insert(User user) throws SQLException { } } + private 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()); + } + + private String createQueryForInsert() { + return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; + } + public void update(User user) throws SQLException { Connection con = null; PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); - String sql = "UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"; + String sql = createQueryForUpdate(); pstmt = con.prepareStatement(sql); - pstmt.setString(1, user.getPassword()); - pstmt.setString(2, user.getName()); - pstmt.setString(3, user.getEmail()); - pstmt.setString(4, user.getUserId()); + setValuesForUpdate(user, pstmt); pstmt.executeUpdate(); } finally { @@ -58,6 +62,17 @@ public void update(User user) throws SQLException { } } + private 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()); + } + + private String createQueryForUpdate() { + return "UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"; + } + public List findAll() throws SQLException { List users = new ArrayList<>(); Connection con = null; From 3831ba3fdb44c2fdea26e97c625b95d29347ba4c Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 05:02:58 +0900 Subject: [PATCH 05/17] =?UTF-8?q?=EA=B3=B5=ED=86=B5=20=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EA=B5=AC=ED=98=84=20InsertJdbcTe?= =?UTF-8?q?mplate,=20UpdateJdbcTemplate=20(p237=202=EB=B2=88=EC=A7=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/next/dao/InsertJdbcTemplate.java | 30 ++++++++++++ .../java/next/dao/UpdateJdbcTemplate.java | 30 ++++++++++++ src/main/java/next/dao/UserDao.java | 46 ++++--------------- 3 files changed, 68 insertions(+), 38 deletions(-) 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..4531da1b6 --- /dev/null +++ b/src/main/java/next/dao/InsertJdbcTemplate.java @@ -0,0 +1,30 @@ +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 { + Connection con = null; + PreparedStatement pstmt = null; + try { + con = ConnectionManager.getConnection(); + String sql = userDao.createQueryForUpdate(); + pstmt = con.prepareStatement(sql); + userDao.setValuesForUpdate(user, pstmt); + + pstmt.executeUpdate(); + } finally { + if (pstmt != null) { + pstmt.close(); + } + if (con != null) { + con.close(); + } + } + } +} diff --git a/src/main/java/next/dao/UpdateJdbcTemplate.java b/src/main/java/next/dao/UpdateJdbcTemplate.java new file mode 100644 index 000000000..b142714ce --- /dev/null +++ b/src/main/java/next/dao/UpdateJdbcTemplate.java @@ -0,0 +1,30 @@ +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 { + Connection con = null; + PreparedStatement pstmt = null; + try { + con = ConnectionManager.getConnection(); + final String sql = userDao.createQueryForInsert(); + pstmt = con.prepareStatement(sql); + userDao.setValuesForInsert(user, pstmt); + pstmt.executeUpdate(); + } finally { + if (pstmt != null) { + pstmt.close(); + } + + if (con != null) { + con.close(); + } + } + } +} diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index 1363a8017..40dc40a3c 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -12,64 +12,34 @@ public class UserDao { public void insert(User user) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - try { - con = ConnectionManager.getConnection(); - final String sql = createQueryForInsert(); - pstmt = con.prepareStatement(sql); - setValuesForInsert(user, pstmt); - pstmt.executeUpdate(); - } finally { - if (pstmt != null) { - pstmt.close(); - } - - if (con != null) { - con.close(); - } - } + final InsertJdbcTemplate insertJdbcTemplate = new InsertJdbcTemplate(); + insertJdbcTemplate.insert(user, this); } - private void setValuesForInsert(User user, PreparedStatement pstmt) throws SQLException { + 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()); } - private String createQueryForInsert() { + String createQueryForInsert() { return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; } 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); - - pstmt.executeUpdate(); - } finally { - if (pstmt != null) { - pstmt.close(); - } - if (con != null) { - con.close(); - } - } + final UpdateJdbcTemplate updateJdbcTemplate = new UpdateJdbcTemplate(); + updateJdbcTemplate.update(user, this); } - private void setValuesForUpdate(User user, PreparedStatement pstmt) throws SQLException { + 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()); } - private String createQueryForUpdate() { + String createQueryForUpdate() { return "UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"; } From 4d481abe9764d2b377fdc0dd3013b70e7addb4f3 Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 05:15:58 +0900 Subject: [PATCH 06/17] =?UTF-8?q?=EB=B9=84=EA=B3=B5=ED=86=B5=EB=B6=80?= =?UTF-8?q?=EB=B6=84=EC=9D=84=20=EC=B6=94=EC=83=81=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=A1=9C=20=EB=A7=8C=EB=93=A4=EC=96=B4=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EA=B4=80=EA=B3=84=EB=A5=BC=20=EB=81=8A=EA=B3=A0,=20?= =?UTF-8?q?=EC=9D=B5=EB=AA=85=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20?= =?UTF-8?q?=EB=B9=84=EA=B3=B5=ED=86=B5=20=EA=B5=AC=ED=98=84=EC=B2=B4?= =?UTF-8?q?=EB=A5=BC=20=EC=84=A0=EC=96=B8=20(p238=201=EB=B2=88=EC=A8=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/next/dao/InsertJdbcTemplate.java | 11 ++-- .../java/next/dao/UpdateJdbcTemplate.java | 11 ++-- src/main/java/next/dao/UserDao.java | 50 +++++++++++-------- 3 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/main/java/next/dao/InsertJdbcTemplate.java b/src/main/java/next/dao/InsertJdbcTemplate.java index 4531da1b6..be5ea874f 100644 --- a/src/main/java/next/dao/InsertJdbcTemplate.java +++ b/src/main/java/next/dao/InsertJdbcTemplate.java @@ -7,15 +7,15 @@ import java.sql.PreparedStatement; import java.sql.SQLException; -public class InsertJdbcTemplate { - public void insert(User user, UserDao userDao) throws SQLException { +public abstract class InsertJdbcTemplate { + public void insert(User user) throws SQLException { Connection con = null; PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); - String sql = userDao.createQueryForUpdate(); + String sql = this.createQueryForInsert(); pstmt = con.prepareStatement(sql); - userDao.setValuesForUpdate(user, pstmt); + this.setValuesForInsert(user, pstmt); pstmt.executeUpdate(); } finally { @@ -27,4 +27,7 @@ public void insert(User user, UserDao userDao) throws SQLException { } } } + + 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 b142714ce..113044c48 100644 --- a/src/main/java/next/dao/UpdateJdbcTemplate.java +++ b/src/main/java/next/dao/UpdateJdbcTemplate.java @@ -7,15 +7,15 @@ import java.sql.PreparedStatement; import java.sql.SQLException; -public class UpdateJdbcTemplate { - public void update(User user, UserDao userDao) throws SQLException { +public abstract class UpdateJdbcTemplate { + public void update(User user) throws SQLException { Connection con = null; PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); - final String sql = userDao.createQueryForInsert(); + final String sql = this.createQueryForUpdate(); pstmt = con.prepareStatement(sql); - userDao.setValuesForInsert(user, pstmt); + this.setValuesForUpdate(user, pstmt); pstmt.executeUpdate(); } finally { if (pstmt != null) { @@ -27,4 +27,7 @@ public void update(User user, UserDao userDao) throws SQLException { } } } + + 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 40dc40a3c..d697f3a07 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -12,35 +12,41 @@ public class UserDao { public void insert(User user) throws SQLException { - final InsertJdbcTemplate insertJdbcTemplate = new InsertJdbcTemplate(); - insertJdbcTemplate.insert(user, this); - } + final 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()); + } - 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()); - } + @Override + String createQueryForInsert() { + return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; + } + }; - String createQueryForInsert() { - return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; + insertJdbcTemplate.insert(user); } public void update(User user) throws SQLException { - final UpdateJdbcTemplate updateJdbcTemplate = new UpdateJdbcTemplate(); - updateJdbcTemplate.update(user, this); - } + final 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()); + } - 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()); - } + @Override + String createQueryForUpdate() { + return "UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"; + } + }; - String createQueryForUpdate() { - return "UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"; + updateJdbcTemplate.update(user); } public List findAll() throws SQLException { From f0168170034f5dbc3a9eca6837d3fa9c9c2852d6 Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 05:17:48 +0900 Subject: [PATCH 07/17] =?UTF-8?q?=EB=91=90=EA=B0=9C=EC=9D=98=20=EA=B3=B5?= =?UTF-8?q?=ED=86=B5=20=ED=81=B4=EB=9E=98=EC=8A=A4=EC=9D=98=20=EC=97=AD?= =?UTF-8?q?=ED=95=A0=EA=B3=BC=20=EB=A1=9C=EC=A7=81=EC=9D=B4=20=EA=B0=99?= =?UTF-8?q?=EC=95=84=20=ED=95=98=EB=82=98=EC=9D=98=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20=ED=86=B5=ED=95=A9=20(p238=202=EB=B2=88?= =?UTF-8?q?=EC=A7=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/next/dao/InsertJdbcTemplate.java | 33 ------------------- ...ateJdbcTemplate.java => JdbcTemplate.java} | 10 +++--- src/main/java/next/dao/UserDao.java | 16 ++++----- 3 files changed, 13 insertions(+), 46 deletions(-) delete mode 100644 src/main/java/next/dao/InsertJdbcTemplate.java rename src/main/java/next/dao/{UpdateJdbcTemplate.java => JdbcTemplate.java} (68%) diff --git a/src/main/java/next/dao/InsertJdbcTemplate.java b/src/main/java/next/dao/InsertJdbcTemplate.java deleted file mode 100644 index be5ea874f..000000000 --- a/src/main/java/next/dao/InsertJdbcTemplate.java +++ /dev/null @@ -1,33 +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 InsertJdbcTemplate { - public void insert(User user) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - try { - con = ConnectionManager.getConnection(); - String sql = this.createQueryForInsert(); - pstmt = con.prepareStatement(sql); - this.setValuesForInsert(user, pstmt); - - pstmt.executeUpdate(); - } 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/JdbcTemplate.java similarity index 68% rename from src/main/java/next/dao/UpdateJdbcTemplate.java rename to src/main/java/next/dao/JdbcTemplate.java index 113044c48..928be24a0 100644 --- a/src/main/java/next/dao/UpdateJdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -7,15 +7,15 @@ import java.sql.PreparedStatement; import java.sql.SQLException; -public abstract class UpdateJdbcTemplate { +public abstract class JdbcTemplate { public void update(User user) throws SQLException { Connection con = null; PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); - final String sql = this.createQueryForUpdate(); + final String sql = this.createQuery(); pstmt = con.prepareStatement(sql); - this.setValuesForUpdate(user, pstmt); + this.setValues(user, pstmt); pstmt.executeUpdate(); } finally { if (pstmt != null) { @@ -28,6 +28,6 @@ public void update(User user) throws SQLException { } } - abstract void setValuesForUpdate(User user, PreparedStatement pstmt) throws SQLException; - abstract String createQueryForUpdate(); + abstract void setValues(User user, PreparedStatement pstmt) throws SQLException; + abstract String createQuery(); } diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index d697f3a07..88ce25a19 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -12,9 +12,9 @@ public class UserDao { public void insert(User user) throws SQLException { - final InsertJdbcTemplate insertJdbcTemplate = new InsertJdbcTemplate() { + final 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()); @@ -22,18 +22,18 @@ void setValuesForInsert(User user, PreparedStatement pstmt) throws SQLException } @Override - String createQueryForInsert() { + String createQuery() { return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; } }; - insertJdbcTemplate.insert(user); + insertJdbcTemplate.update(user); } public void update(User user) throws SQLException { - final UpdateJdbcTemplate updateJdbcTemplate = new UpdateJdbcTemplate() { + final JdbcTemplate jdbcTemplate = 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()); @@ -41,12 +41,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); + jdbcTemplate.update(user); } public List findAll() throws SQLException { From 22df26be0aca2b21789809a6b13e1b10f070db0f Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 05:24:29 +0900 Subject: [PATCH 08/17] =?UTF-8?q?JdbcTemplate=EC=9D=98=20User=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EC=A0=9C=EA=B1=B0=20(p239=201=EB=B2=88?= =?UTF-8?q?=EC=A7=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JdbcTemplate은 더 구체적인 (더 낮은 단계의 추상화) 객체이므로 User의 의존성 갖는것은 바람직하지 않다. --- src/main/java/next/dao/JdbcTemplate.java | 23 +++++------------------ src/main/java/next/dao/UserDao.java | 18 ++++-------------- 2 files changed, 9 insertions(+), 32 deletions(-) diff --git a/src/main/java/next/dao/JdbcTemplate.java b/src/main/java/next/dao/JdbcTemplate.java index 928be24a0..a23ed16b4 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -8,26 +8,13 @@ import java.sql.SQLException; public abstract class JdbcTemplate { - public void update(User user) throws SQLException { - Connection con = null; - PreparedStatement pstmt = null; - try { - con = ConnectionManager.getConnection(); - final String sql = this.createQuery(); - pstmt = con.prepareStatement(sql); - this.setValues(user, pstmt); + public void update(String sql) throws SQLException { + try (Connection con = ConnectionManager.getConnection(); + PreparedStatement pstmt = con.prepareStatement(sql)) { + this.setValues(pstmt); pstmt.executeUpdate(); - } finally { - if (pstmt != null) { - pstmt.close(); - } - - if (con != null) { - con.close(); - } } } - 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 88ce25a19..f5e74a4f4 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -14,39 +14,29 @@ public class UserDao { public void insert(User user) throws SQLException { final 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()); pstmt.setString(4, user.getEmail()); } - - @Override - String createQuery() { - return "INSERT INTO USERS VALUES (?, ?, ?, ?)"; - } }; - insertJdbcTemplate.update(user); + insertJdbcTemplate.update("INSERT INTO USERS VALUES (?, ?, ?, ?)"); } public void update(User user) throws SQLException { final JdbcTemplate jdbcTemplate = 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()); pstmt.setString(4, user.getUserId()); } - - @Override - String createQuery() { - return "UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"; - } }; - jdbcTemplate.update(user); + jdbcTemplate.update("UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"); } public List findAll() throws SQLException { From 3936c52b38b8e7739a57adc06ffc7eed8dbc8a2a Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 05:34:09 +0900 Subject: [PATCH 09/17] =?UTF-8?q?SQLException=EC=9D=84=20RuntimeException?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/JdbcTemplate.java | 6 +++++- src/main/java/next/dao/UserDao.java | 4 ++-- src/main/java/next/exception/JdbcTemplateException.java | 7 +++++++ 3 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 src/main/java/next/exception/JdbcTemplateException.java diff --git a/src/main/java/next/dao/JdbcTemplate.java b/src/main/java/next/dao/JdbcTemplate.java index a23ed16b4..c2b647e5f 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -1,18 +1,22 @@ package next.dao; import core.jdbc.ConnectionManager; +import next.exception.JdbcTemplateException; import next.model.User; +import org.h2.jdbc.JdbcSQLException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public abstract class JdbcTemplate { - public void update(String sql) throws SQLException { + public void update(String sql) { try (Connection con = ConnectionManager.getConnection(); PreparedStatement pstmt = con.prepareStatement(sql)) { this.setValues(pstmt); pstmt.executeUpdate(); + } catch (SQLException e) { + throw new JdbcTemplateException(); } } diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index f5e74a4f4..9a7ad26b0 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -11,7 +11,7 @@ import next.model.User; public class UserDao { - public void insert(User user) throws SQLException { + public void insert(User user) { final JdbcTemplate insertJdbcTemplate = new JdbcTemplate() { @Override void setValues(PreparedStatement pstmt) throws SQLException { @@ -25,7 +25,7 @@ void setValues(PreparedStatement pstmt) throws SQLException { insertJdbcTemplate.update("INSERT INTO USERS VALUES (?, ?, ?, ?)"); } - public void update(User user) throws SQLException { + public void update(User user) { final JdbcTemplate jdbcTemplate = new JdbcTemplate() { @Override void setValues(PreparedStatement pstmt) throws SQLException { diff --git a/src/main/java/next/exception/JdbcTemplateException.java b/src/main/java/next/exception/JdbcTemplateException.java new file mode 100644 index 000000000..ee3705b68 --- /dev/null +++ b/src/main/java/next/exception/JdbcTemplateException.java @@ -0,0 +1,7 @@ +package next.exception; + +public class JdbcTemplateException extends RuntimeException { + public JdbcTemplateException() { + super(); + } +} From 3d8a48ab6a67eb52a6c7c29a05e2637364f3c9bf Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 05:36:28 +0900 Subject: [PATCH 10/17] =?UTF-8?q?SQLException=20catch=EC=8B=9C=EC=97=90=20?= =?UTF-8?q?log=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/JdbcTemplate.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/next/dao/JdbcTemplate.java b/src/main/java/next/dao/JdbcTemplate.java index c2b647e5f..b88db555b 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -4,18 +4,23 @@ import next.exception.JdbcTemplateException; import next.model.User; import org.h2.jdbc.JdbcSQLException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public abstract class JdbcTemplate { + private static final Logger log = LoggerFactory.getLogger(JdbcTemplate.class); + public void update(String sql) { try (Connection con = ConnectionManager.getConnection(); PreparedStatement pstmt = con.prepareStatement(sql)) { this.setValues(pstmt); pstmt.executeUpdate(); } catch (SQLException e) { + log.error("SQLException!! {}", e.getMessage()); throw new JdbcTemplateException(); } } From 7f0d0415250ad0f06aa7760eab961fc4854d55ee Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 05:47:35 +0900 Subject: [PATCH 11/17] =?UTF-8?q?SelectJdbcTemplate=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20(p239=202=EB=B2=88=EC=A7=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/JdbcTemplate.java | 2 - .../java/next/dao/SelectJdbcTemplate.java | 54 +++++++++++++ src/main/java/next/dao/UserDao.java | 81 ++++++------------- 3 files changed, 79 insertions(+), 58 deletions(-) create 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 b88db555b..9099c498b 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -2,8 +2,6 @@ import core.jdbc.ConnectionManager; import next.exception.JdbcTemplateException; -import next.model.User; -import org.h2.jdbc.JdbcSQLException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/next/dao/SelectJdbcTemplate.java b/src/main/java/next/dao/SelectJdbcTemplate.java new file mode 100644 index 000000000..b3abdae9d --- /dev/null +++ b/src/main/java/next/dao/SelectJdbcTemplate.java @@ -0,0 +1,54 @@ +package next.dao; + +import core.jdbc.ConnectionManager; +import next.controller.CreateUserController; +import next.exception.JdbcTemplateException; +import next.model.User; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +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 { + private static final Logger log = LoggerFactory.getLogger(SelectJdbcTemplate.class); + + public List query(String sql) { + try (Connection con = ConnectionManager.getConnection(); + PreparedStatement pstmt = con.prepareStatement(sql)) { + this.setValues(pstmt); + final ResultSet rs = pstmt.executeQuery(); + List results = new ArrayList<>(); + while (rs.next()) { + final T o = mapRow(rs); + results.add(o); + } + return results; + } catch (SQLException e) { + log.error("SQLException!! {}", e.getMessage()); + throw new JdbcTemplateException(); + } + } + + public T queryForObject(String sql) { + try (Connection con = ConnectionManager.getConnection(); + PreparedStatement pstmt = con.prepareStatement(sql)) { + this.setValues(pstmt); + final ResultSet rs = pstmt.executeQuery(); + if (rs.next()) { + return mapRow(rs); + } + return null; + } catch (SQLException e) { + log.error("SQLException!! {}", e.getMessage()); + throw new JdbcTemplateException(); + } + } + + abstract void setValues(PreparedStatement pstmt) throws SQLException; + abstract T mapRow(ResultSet rs) throws SQLException; +} diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index 9a7ad26b0..fc054488b 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -1,15 +1,12 @@ 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; - public class UserDao { public void insert(User user) { final JdbcTemplate insertJdbcTemplate = new JdbcTemplate() { @@ -39,66 +36,38 @@ void setValues(PreparedStatement pstmt) throws SQLException { jdbcTemplate.update("UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"); } - public List findAll() throws SQLException { - List users = new ArrayList<>(); - Connection con = null; - PreparedStatement pstmt = null; - ResultSet rs = null; - try { - con = ConnectionManager.getConnection(); - String sql = "SELECT userId, password, name, email FROM USERS"; - pstmt = con.prepareStatement(sql); - rs = pstmt.executeQuery(); + public List findAll() { + final SelectJdbcTemplate selectJdbcTemplate = new SelectJdbcTemplate() { + @Override + void setValues(PreparedStatement pstmt) { + } - while (rs.next()) { - User user = new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), + @Override + User mapRow(ResultSet rs) throws SQLException { + return new User(rs.getString("userId"), + rs.getString("password"), + rs.getString("name"), rs.getString("email")); - users.add(user); } + }; - } finally { - if (rs != null) { - rs.close(); - } - if (pstmt != null) { - pstmt.close(); - } - if (con != null) { - con.close(); - } - } - return users; + return selectJdbcTemplate.query("SELECT userId, password, name, email FROM USERS"); } - 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(); + public User findByUserId(String userId) { + final SelectJdbcTemplate selectJdbcTemplate = new SelectJdbcTemplate() { + @Override + void setValues(PreparedStatement pstmt) throws SQLException { + pstmt.setString(1, userId); + } - User user = null; - if (rs.next()) { - user = new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), + @Override + User mapRow(ResultSet rs) throws SQLException { + return 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(); - } - if (con != null) { - con.close(); - } - } + return selectJdbcTemplate.queryForObject("SELECT userId, password, name, email FROM USERS WHERE userid=?"); } } From 63b786e929097445cf02dcf18a11641df8208312 Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 06:11:58 +0900 Subject: [PATCH 12/17] =?UTF-8?q?SelectJdbcTemplate=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=ED=95=98=EA=B3=A0=20JdbcTemplate=EC=99=80=20=ED=86=B5=ED=95=A9?= =?UTF-8?q?=20(p240=201=EB=B2=88=EC=A7=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/JdbcTemplate.java | 38 ++++++++++++- .../java/next/dao/SelectJdbcTemplate.java | 54 ------------------- src/main/java/next/dao/UserDao.java | 22 +++++--- 3 files changed, 53 insertions(+), 61 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 9099c498b..7befe064f 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -7,9 +7,12 @@ 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 abstract class JdbcTemplate { private static final Logger log = LoggerFactory.getLogger(JdbcTemplate.class); public void update(String sql) { @@ -23,5 +26,38 @@ public void update(String sql) { } } + public List query(String sql) { + try (Connection con = ConnectionManager.getConnection(); + PreparedStatement pstmt = con.prepareStatement(sql)) { + this.setValues(pstmt); + final ResultSet rs = pstmt.executeQuery(); + List results = new ArrayList<>(); + while (rs.next()) { + final T o = mapRow(rs); + results.add(o); + } + return results; + } catch (SQLException e) { + log.error("SQLException!! {}", e.getMessage()); + throw new JdbcTemplateException(); + } + } + + public T queryForObject(String sql) { + try (Connection con = ConnectionManager.getConnection(); + PreparedStatement pstmt = con.prepareStatement(sql)) { + this.setValues(pstmt); + final ResultSet rs = pstmt.executeQuery(); + if (rs.next()) { + return mapRow(rs); + } + return null; + } catch (SQLException e) { + log.error("SQLException!! {}", e.getMessage()); + throw new JdbcTemplateException(); + } + } + abstract void setValues(PreparedStatement pstmt) throws SQLException; + abstract T 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 b3abdae9d..000000000 --- a/src/main/java/next/dao/SelectJdbcTemplate.java +++ /dev/null @@ -1,54 +0,0 @@ -package next.dao; - -import core.jdbc.ConnectionManager; -import next.controller.CreateUserController; -import next.exception.JdbcTemplateException; -import next.model.User; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -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 { - private static final Logger log = LoggerFactory.getLogger(SelectJdbcTemplate.class); - - public List query(String sql) { - try (Connection con = ConnectionManager.getConnection(); - PreparedStatement pstmt = con.prepareStatement(sql)) { - this.setValues(pstmt); - final ResultSet rs = pstmt.executeQuery(); - List results = new ArrayList<>(); - while (rs.next()) { - final T o = mapRow(rs); - results.add(o); - } - return results; - } catch (SQLException e) { - log.error("SQLException!! {}", e.getMessage()); - throw new JdbcTemplateException(); - } - } - - public T queryForObject(String sql) { - try (Connection con = ConnectionManager.getConnection(); - PreparedStatement pstmt = con.prepareStatement(sql)) { - this.setValues(pstmt); - final ResultSet rs = pstmt.executeQuery(); - if (rs.next()) { - return mapRow(rs); - } - return null; - } catch (SQLException e) { - log.error("SQLException!! {}", e.getMessage()); - throw new JdbcTemplateException(); - } - } - - abstract void setValues(PreparedStatement pstmt) throws SQLException; - abstract T mapRow(ResultSet rs) throws SQLException; -} diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index fc054488b..5b3fe87d1 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -9,7 +9,7 @@ public class UserDao { public void insert(User user) { - final JdbcTemplate insertJdbcTemplate = new JdbcTemplate() { + final JdbcTemplate insertJdbcTemplate = new JdbcTemplate() { @Override void setValues(PreparedStatement pstmt) throws SQLException { pstmt.setString(1, user.getUserId()); @@ -17,13 +17,18 @@ void setValues(PreparedStatement pstmt) throws SQLException { pstmt.setString(3, user.getName()); pstmt.setString(4, user.getEmail()); } + + @Override + User mapRow(ResultSet rs) { + return null; + } }; insertJdbcTemplate.update("INSERT INTO USERS VALUES (?, ?, ?, ?)"); } public void update(User user) { - final JdbcTemplate jdbcTemplate = new JdbcTemplate() { + final JdbcTemplate jdbcTemplate = new JdbcTemplate() { @Override void setValues(PreparedStatement pstmt) throws SQLException { pstmt.setString(1, user.getPassword()); @@ -31,13 +36,18 @@ void setValues(PreparedStatement pstmt) throws SQLException { pstmt.setString(3, user.getEmail()); pstmt.setString(4, user.getUserId()); } + + @Override + User mapRow(ResultSet rs) { + return null; + } }; jdbcTemplate.update("UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"); } public List findAll() { - final SelectJdbcTemplate selectJdbcTemplate = new SelectJdbcTemplate() { + final JdbcTemplate jdbcTemplate = new JdbcTemplate() { @Override void setValues(PreparedStatement pstmt) { } @@ -51,11 +61,11 @@ User mapRow(ResultSet rs) throws SQLException { } }; - return selectJdbcTemplate.query("SELECT userId, password, name, email FROM USERS"); + return jdbcTemplate.query("SELECT userId, password, name, email FROM USERS"); } public User findByUserId(String userId) { - final SelectJdbcTemplate selectJdbcTemplate = new SelectJdbcTemplate() { + final JdbcTemplate jdbcTemplate = new JdbcTemplate() { @Override void setValues(PreparedStatement pstmt) throws SQLException { pstmt.setString(1, userId); @@ -68,6 +78,6 @@ User mapRow(ResultSet rs) throws SQLException { } }; - return selectJdbcTemplate.queryForObject("SELECT userId, password, name, email FROM USERS WHERE userid=?"); + return jdbcTemplate.queryForObject("SELECT userId, password, name, email FROM USERS WHERE userid=?"); } } From aa26cf23de9308a25de46595f026a0569b385a0d Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 06:37:14 +0900 Subject: [PATCH 13/17] =?UTF-8?q?=ED=86=B5=ED=95=A9=EA=B3=BC=EC=A0=95?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EA=B0=95=EC=9A=94=EB=90=98=EB=8A=94=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=EB=A5=BC=20=EC=9D=B8=ED=84=B0=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=EB=A1=9C=20=EB=B6=84=EB=A6=AC=ED=95=98?= =?UTF-8?q?=EC=97=AC=EC=84=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81=20(p2?= =?UTF-8?q?40=202=EB=B2=88=EC=A8=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이전에 미리 (p242 1번째까지 함) --- src/main/java/next/dao/JdbcTemplate.java | 21 ++--- .../next/dao/PreparedStatementSetter.java | 8 ++ src/main/java/next/dao/RowMapper.java | 8 ++ src/main/java/next/dao/UserDao.java | 88 +++++++------------ 4 files changed, 57 insertions(+), 68 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 7befe064f..7b3a9af7c 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -12,13 +12,13 @@ import java.util.ArrayList; import java.util.List; -public abstract class JdbcTemplate { +public class JdbcTemplate { private static final Logger log = LoggerFactory.getLogger(JdbcTemplate.class); - public void update(String sql) { + public void update(String sql, PreparedStatementSetter pstmtSetter) { try (Connection con = ConnectionManager.getConnection(); PreparedStatement pstmt = con.prepareStatement(sql)) { - this.setValues(pstmt); + pstmtSetter.setValues(pstmt); pstmt.executeUpdate(); } catch (SQLException e) { log.error("SQLException!! {}", e.getMessage()); @@ -26,14 +26,14 @@ public void update(String sql) { } } - public List query(String sql) { + public List query(String sql, PreparedStatementSetter pstmtSetter, RowMapper rowMapper) { try (Connection con = ConnectionManager.getConnection(); PreparedStatement pstmt = con.prepareStatement(sql)) { - this.setValues(pstmt); + pstmtSetter.setValues(pstmt); final ResultSet rs = pstmt.executeQuery(); List results = new ArrayList<>(); while (rs.next()) { - final T o = mapRow(rs); + final T o = rowMapper.mapRow(rs); results.add(o); } return results; @@ -43,13 +43,13 @@ public List query(String sql) { } } - public T queryForObject(String sql) { + public T queryForObject(String sql, PreparedStatementSetter pstmtSetter, RowMapper rowMapper) { try (Connection con = ConnectionManager.getConnection(); PreparedStatement pstmt = con.prepareStatement(sql)) { - this.setValues(pstmt); + pstmtSetter.setValues(pstmt); final ResultSet rs = pstmt.executeQuery(); if (rs.next()) { - return mapRow(rs); + return rowMapper.mapRow(rs); } return null; } catch (SQLException e) { @@ -57,7 +57,4 @@ public T queryForObject(String sql) { throw new JdbcTemplateException(); } } - - abstract void setValues(PreparedStatement pstmt) throws SQLException; - abstract T 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..1d1040bc9 --- /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 setValues(PreparedStatement pstmt) 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..88431d8d0 --- /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 { + T mapRow(ResultSet rs) throws SQLException; +} diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index 5b3fe87d1..fe6f708db 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -4,80 +4,56 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; -import java.sql.SQLException; import java.util.List; public class UserDao { public void insert(User user) { - final 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()); - } - - @Override - User mapRow(ResultSet rs) { - return null; - } + final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); + + PreparedStatementSetter pstmtSetter = (PreparedStatement pstmt) -> { + pstmt.setString(1, user.getUserId()); + pstmt.setString(2, user.getPassword()); + pstmt.setString(3, user.getName()); + pstmt.setString(4, user.getEmail()); }; - insertJdbcTemplate.update("INSERT INTO USERS VALUES (?, ?, ?, ?)"); + jdbcTemplate.update("INSERT INTO USERS VALUES (?, ?, ?, ?)", pstmtSetter); } public void update(User user) { - final JdbcTemplate jdbcTemplate = 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()); - } - - @Override - User mapRow(ResultSet rs) { - return null; - } + final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); + + PreparedStatementSetter pstmtSetter = (PreparedStatement pstmt) -> { + pstmt.setString(1, user.getPassword()); + pstmt.setString(2, user.getName()); + pstmt.setString(3, user.getEmail()); + pstmt.setString(4, user.getUserId()); }; - jdbcTemplate.update("UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?"); + jdbcTemplate.update("UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?", pstmtSetter); } public List findAll() { - final JdbcTemplate jdbcTemplate = new JdbcTemplate() { - @Override - void setValues(PreparedStatement pstmt) { - } - - @Override - User mapRow(ResultSet rs) throws SQLException { - return new User(rs.getString("userId"), - rs.getString("password"), - rs.getString("name"), - rs.getString("email")); - } - }; + final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); + + PreparedStatementSetter pstmtSetter = (PreparedStatement pstmt) -> {}; - return jdbcTemplate.query("SELECT userId, password, name, email FROM USERS"); + RowMapper rowMapper = (ResultSet rs) -> new User(rs.getString("userId"), + rs.getString("password"), + rs.getString("name"), + rs.getString("email")); + + return jdbcTemplate.query("SELECT userId, password, name, email FROM USERS", pstmtSetter, rowMapper); } public User findByUserId(String userId) { - final JdbcTemplate jdbcTemplate = new JdbcTemplate() { - @Override - void setValues(PreparedStatement pstmt) throws SQLException { - pstmt.setString(1, userId); - } - - @Override - User mapRow(ResultSet rs) throws SQLException { - return new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), - rs.getString("email")); - } - }; + final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); + + PreparedStatementSetter pstmtSetter = (PreparedStatement pstmt) -> pstmt.setString(1, userId); + + RowMapper rowMapper = (ResultSet rs) -> new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), + rs.getString("email")); - return jdbcTemplate.queryForObject("SELECT userId, password, name, email FROM USERS WHERE userid=?"); + return jdbcTemplate.queryForObject("SELECT userId, password, name, email FROM USERS WHERE userid=?", pstmtSetter, rowMapper); } } From 8da9b9cd782a3174d1e6a612c46f7bdb36ab73b1 Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 06:49:23 +0900 Subject: [PATCH 14/17] =?UTF-8?q?PreparedStatementSetter=EB=A5=BC=20?= =?UTF-8?q?=EC=A7=81=EC=A0=91=EC=83=9D=EC=84=B1=ED=95=98=EC=A7=80=20?= =?UTF-8?q?=EC=95=8A=EA=B3=A0=20Objects=20=EA=B0=80=EB=B3=80=EC=9D=B8?= =?UTF-8?q?=EC=9E=90=EB=A1=9C=EB=A7=8C=20=EC=A0=84=EB=8B=AC=ED=95=98?= =?UTF-8?q?=EC=97=AC=EB=8F=84=20=EB=82=B4=EB=B6=80=EC=A0=81=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=A7=8C=EB=93=A4=EC=96=B4=EC=A3=BC=EB=8A=94=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=83=9D=EC=84=B1=20(p242=202?= =?UTF-8?q?=EB=B2=88=EC=A7=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/JdbcTemplate.java | 24 ++++++++++++++++++-- src/main/java/next/dao/UserDao.java | 28 +++++------------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/main/java/next/dao/JdbcTemplate.java b/src/main/java/next/dao/JdbcTemplate.java index 7b3a9af7c..76903b2be 100644 --- a/src/main/java/next/dao/JdbcTemplate.java +++ b/src/main/java/next/dao/JdbcTemplate.java @@ -26,7 +26,19 @@ public void update(String sql, PreparedStatementSetter pstmtSetter) { } } - public List query(String sql, PreparedStatementSetter pstmtSetter, RowMapper rowMapper) { + public void update(String sql, Object... objects) { + update(sql, createPreparedStatementSetter(objects)); + } + + public PreparedStatementSetter createPreparedStatementSetter(Object... objects) { + return (PreparedStatement pstmt) -> { + for (int i = 1; i <= objects.length; i++) { + pstmt.setObject(i, objects[i - 1]); + } + }; + } + + public List query(String sql, RowMapper rowMapper, PreparedStatementSetter pstmtSetter) { try (Connection con = ConnectionManager.getConnection(); PreparedStatement pstmt = con.prepareStatement(sql)) { pstmtSetter.setValues(pstmt); @@ -43,7 +55,11 @@ public List query(String sql, PreparedStatementSetter pstmtSetter, RowMapper< } } - public T queryForObject(String sql, PreparedStatementSetter pstmtSetter, RowMapper rowMapper) { + public List query(String sql, RowMapper rowMapper, Object... objects) { + return query(sql, rowMapper, createPreparedStatementSetter(objects)); + } + + public T queryForObject(String sql, RowMapper rowMapper, PreparedStatementSetter pstmtSetter) { try (Connection con = ConnectionManager.getConnection(); PreparedStatement pstmt = con.prepareStatement(sql)) { pstmtSetter.setValues(pstmt); @@ -57,4 +73,8 @@ public T queryForObject(String sql, PreparedStatementSetter pstmtSetter, RowMapp throw new JdbcTemplateException(); } } + + public T queryForObject(String sql, RowMapper rowMapper, Object... objects) { + return queryForObject(sql, rowMapper, createPreparedStatementSetter(objects)); + } } diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index fe6f708db..b4459c408 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -10,50 +10,34 @@ public class UserDao { public void insert(User user) { final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); - PreparedStatementSetter pstmtSetter = (PreparedStatement pstmt) -> { - pstmt.setString(1, user.getUserId()); - pstmt.setString(2, user.getPassword()); - pstmt.setString(3, user.getName()); - pstmt.setString(4, user.getEmail()); - }; - - jdbcTemplate.update("INSERT INTO USERS VALUES (?, ?, ?, ?)", pstmtSetter); + jdbcTemplate.update("INSERT INTO USERS VALUES (?, ?, ?, ?)", + user.getUserId(), user.getPassword(), user.getName(), user.getEmail()); } public void update(User user) { final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); - PreparedStatementSetter pstmtSetter = (PreparedStatement pstmt) -> { - pstmt.setString(1, user.getPassword()); - pstmt.setString(2, user.getName()); - pstmt.setString(3, user.getEmail()); - pstmt.setString(4, user.getUserId()); - }; - - jdbcTemplate.update("UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?", pstmtSetter); + jdbcTemplate.update("UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?", + user.getPassword(), user.getName(), user.getEmail(), user.getUserId()); } public List findAll() { final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); - PreparedStatementSetter pstmtSetter = (PreparedStatement pstmt) -> {}; - RowMapper rowMapper = (ResultSet rs) -> new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), rs.getString("email")); - return jdbcTemplate.query("SELECT userId, password, name, email FROM USERS", pstmtSetter, rowMapper); + return jdbcTemplate.query("SELECT userId, password, name, email FROM USERS", rowMapper); } public User findByUserId(String userId) { final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); - PreparedStatementSetter pstmtSetter = (PreparedStatement pstmt) -> pstmt.setString(1, userId); - RowMapper rowMapper = (ResultSet rs) -> new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), rs.getString("email")); - return jdbcTemplate.queryForObject("SELECT userId, password, name, email FROM USERS WHERE userid=?", pstmtSetter, rowMapper); + return jdbcTemplate.queryForObject("SELECT userId, password, name, email FROM USERS WHERE userid=?", rowMapper, userId); } } From 2307b83617f680ac55f2c2884ce48e906db8c838 Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 06:50:00 +0900 Subject: [PATCH 15/17] =?UTF-8?q?@FunctionalInterface=20=EC=95=A0=EB=85=B8?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80=20(p243)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/PreparedStatementSetter.java | 1 + src/main/java/next/dao/RowMapper.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/next/dao/PreparedStatementSetter.java b/src/main/java/next/dao/PreparedStatementSetter.java index 1d1040bc9..f8c4881b0 100644 --- a/src/main/java/next/dao/PreparedStatementSetter.java +++ b/src/main/java/next/dao/PreparedStatementSetter.java @@ -3,6 +3,7 @@ import java.sql.PreparedStatement; import java.sql.SQLException; +@FunctionalInterface public interface PreparedStatementSetter { void setValues(PreparedStatement pstmt) throws SQLException; } diff --git a/src/main/java/next/dao/RowMapper.java b/src/main/java/next/dao/RowMapper.java index 88431d8d0..6551c86b3 100644 --- a/src/main/java/next/dao/RowMapper.java +++ b/src/main/java/next/dao/RowMapper.java @@ -3,6 +3,7 @@ import java.sql.ResultSet; import java.sql.SQLException; +@FunctionalInterface public interface RowMapper { T mapRow(ResultSet rs) throws SQLException; } From c045d98665382655352f06382ded045611ca78b4 Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 06:51:59 +0900 Subject: [PATCH 16/17] =?UTF-8?q?JdbcTemplate=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=ED=95=84=EB=93=9C=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/UserDao.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index b4459c408..2cfcd3b85 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -7,23 +7,19 @@ import java.util.List; public class UserDao { - public void insert(User user) { - final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); + private final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); + public void insert(User user) { jdbcTemplate.update("INSERT INTO USERS VALUES (?, ?, ?, ?)", user.getUserId(), user.getPassword(), user.getName(), user.getEmail()); } public void update(User user) { - final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); - jdbcTemplate.update("UPDATE USERS SET password = ?, name = ?, email = ? WHERE userId = ?", user.getPassword(), user.getName(), user.getEmail(), user.getUserId()); } public List findAll() { - final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); - RowMapper rowMapper = (ResultSet rs) -> new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), @@ -33,8 +29,6 @@ public List findAll() { } public User findByUserId(String userId) { - final JdbcTemplate jdbcTemplate = new JdbcTemplate<>(); - RowMapper rowMapper = (ResultSet rs) -> new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), rs.getString("email")); From a675850faeb66a255137fe53a33ad31c10d6cf38 Mon Sep 17 00:00:00 2001 From: siyoon Date: Tue, 28 Jul 2020 06:55:56 +0900 Subject: [PATCH 17/17] =?UTF-8?q?User=EB=A5=BC=20ResultSet=EC=9D=84=20?= =?UTF-8?q?=EB=8B=B4=EB=8A=94=20=EC=83=9D=EC=84=B1=EC=9E=90=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/next/dao/UserDao.java | 14 ++++---------- src/main/java/next/model/User.java | 24 +++++++++++++++++++++++- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/main/java/next/dao/UserDao.java b/src/main/java/next/dao/UserDao.java index 2cfcd3b85..6679f3cf5 100644 --- a/src/main/java/next/dao/UserDao.java +++ b/src/main/java/next/dao/UserDao.java @@ -20,18 +20,12 @@ public void update(User user) { } public List findAll() { - RowMapper rowMapper = (ResultSet rs) -> new User(rs.getString("userId"), - rs.getString("password"), - rs.getString("name"), - rs.getString("email")); - - return jdbcTemplate.query("SELECT userId, password, name, email FROM USERS", rowMapper); + return jdbcTemplate.query("SELECT userId, password, name, email FROM USERS", + User::new); } public User findByUserId(String userId) { - RowMapper rowMapper = (ResultSet rs) -> new User(rs.getString("userId"), rs.getString("password"), rs.getString("name"), - rs.getString("email")); - - return jdbcTemplate.queryForObject("SELECT userId, password, name, email FROM USERS WHERE userid=?", rowMapper, userId); + return jdbcTemplate.queryForObject("SELECT userId, password, name, email FROM USERS WHERE userid=?", + User::new, userId); } } diff --git a/src/main/java/next/model/User.java b/src/main/java/next/model/User.java index b0bfef294..0316acb44 100644 --- a/src/main/java/next/model/User.java +++ b/src/main/java/next/model/User.java @@ -1,7 +1,17 @@ package next.model; +import next.dao.JdbcTemplate; +import next.exception.JdbcTemplateException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.sql.ResultSet; +import java.sql.SQLException; + public class User { - private String userId; + private static final Logger log = LoggerFactory.getLogger(JdbcTemplate.class); + + private final String userId; private String password; private String name; private String email; @@ -13,6 +23,18 @@ public User(String userId, String password, String name, String email) { this.email = email; } + public User(ResultSet rs) { + try { + this.userId = rs.getString("userId"); + this.password = rs.getString("password"); + this.name = rs.getString("name"); + this.email = rs.getString("email"); + } catch (SQLException e) { + log.error("SQLException!! {}", e.getMessage()); + throw new JdbcTemplateException(); + } + } + public String getUserId() { return userId; }