Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions src/main/java/next/dao/JdbcTemplate.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
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;

class JdbcTemplate {

List<Object> query(String sql, PreparedStatementSetter setter, RowMapper rowMapper) throws SQLException {

ResultSet rs = null;
try (Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql);
) {
setter.values(pstmt);

rs = pstmt.executeQuery();

List<Object> list = new ArrayList<>();
while (rs.next()) {
list.add(rowMapper.mapRow(rs));
}

return list;

} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
}
}

return null;
}

Object queryForObject(String sql, PreparedStatementSetter setter, RowMapper rowMapper) throws SQLException {
ResultSet rs = null;
try (Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql);
){

setter.values(pstmt);

rs = pstmt.executeQuery();

if (rs.next()) {
return rowMapper.mapRow(rs);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
rs.close();
}
}

return null;
}

void update(String query, PreparedStatementSetter setter) throws SQLException {
try (
Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(query);){
setter.values(pstmt);
}
}
}
8 changes: 8 additions & 0 deletions src/main/java/next/dao/PreparedStatementSetter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package next.dao;

import java.sql.PreparedStatement;
import java.sql.SQLException;

public interface PreparedStatementSetter {
void values(PreparedStatement preparedStatement) throws SQLException;
}
8 changes: 8 additions & 0 deletions src/main/java/next/dao/RowMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package next.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

public interface RowMapper<T> {
T mapRow(ResultSet rs) throws SQLException;
}
105 changes: 52 additions & 53 deletions src/main/java/next/dao/UserDao.java
Original file line number Diff line number Diff line change
@@ -1,78 +1,77 @@
package next.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import next.model.User;

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 {
Connection con = null;
PreparedStatement pstmt = null;
try {
con = ConnectionManager.getConnection();
String sql = "INSERT INTO USERS VALUES (?, ?, ?, ?)";
pstmt = con.prepareStatement(sql);

String query = "INSERT INTO USERS VALUES (?, ?, ?, ?)";

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();
} finally {
if (pstmt != null) {
pstmt.close();
}

if (con != null) {
con.close();
}
}
};

insertJdbcTemplate.update(query, pss);
}

public void update(User user) throws SQLException {
// TODO 구현 필요함.

String query = "UPDATE USERS SET password = ?, name = ?, email = ? where userId = ?";

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, pss);
}

public List<User> findAll() throws SQLException {
// TODO 구현 필요함.
return new ArrayList<User>();

String sql = "SELECT userId, password, name, email FROM USERS";

JdbcTemplate sjt = new JdbcTemplate();

PreparedStatementSetter setter = preparedStatement -> {};

RowMapper rowMapper = this::getUser;

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 {
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();
}
if (con != null) {
con.close();
}
}

String sql = "SELECT userId, password, name, email FROM USERS WHERE userid=?";

JdbcTemplate sjt = new JdbcTemplate();

PreparedStatementSetter setter = pstmt -> pstmt.setString(1, userId);

RowMapper rowMapper = this::getUser;

return (User) sjt.queryForObject(sql, setter, rowMapper);
}
}