Created
July 27, 2021 10:42
-
-
Save yooniversal/3c3a6f65b433f840ad80b5fbeca2511a to your computer and use it in GitHub Desktop.
순수 JDBC : repository/JdbcMemberRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package hello.hellospring.repository; | |
import hello.hellospring.domain.Member; | |
import org.springframework.jdbc.datasource.DataSourceUtils; | |
import javax.sql.DataSource; | |
import java.sql.*; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.Optional; | |
public class JdbcMemberRepository implements MemberRepository{ | |
private final DataSource dataSource; | |
public JdbcMemberRepository(DataSource dataSource) { | |
this.dataSource = dataSource; | |
} | |
@Override | |
public Member save(Member member) { | |
String sql = "insert into member(name) values(?)"; | |
Connection conn = null; | |
PreparedStatement pstmt = null; | |
ResultSet rs = null; | |
try { | |
conn = getConnection(); | |
pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); | |
pstmt.setString(1, member.getName()); | |
pstmt.executeUpdate(); | |
rs = pstmt.getGeneratedKeys(); | |
if(rs.next()) { | |
member.setId(rs.getLong(1)); | |
} else { | |
throw new IllegalStateException("id 조회 실패"); | |
} | |
return member; | |
} catch (Exception e) { | |
throw new IllegalStateException(e); | |
} finally { | |
close(conn, pstmt, rs); | |
} | |
} | |
private Connection getConnection() { | |
return DataSourceUtils.getConnection(dataSource); | |
} | |
private void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { | |
try { | |
if(rs != null) { | |
rs.close(); | |
} | |
} catch (SQLException e) { | |
e.printStackTrace(); | |
} | |
try { | |
if(pstmt != null) { | |
pstmt.close(); | |
} | |
} catch (SQLException e) { | |
e.printStackTrace(); | |
} | |
try { | |
if(conn != null) { | |
conn.close(); | |
} | |
} catch (SQLException e) { | |
e.printStackTrace(); | |
} | |
} | |
@Override | |
public Optional<Member> findById(Long id) { | |
String sql = "select * from member where id = ?"; | |
Connection conn = null; | |
PreparedStatement pstmt = null; | |
ResultSet rs = null; | |
try { | |
conn = getConnection(); | |
pstmt = conn.prepareStatement(sql); | |
pstmt.setLong(1, id); | |
rs = pstmt.executeQuery(); | |
if(rs.next()) { | |
Member member = new Member(); | |
member.setId(rs.getLong("id")); | |
member.setName(rs.getString("name")); | |
return Optional.of(member); | |
} else { | |
return Optional.empty(); | |
} | |
} catch (Exception e) { | |
throw new IllegalStateException(e); | |
} finally { | |
close(conn, pstmt, rs); | |
} | |
} | |
@Override | |
public Optional<Member> findByName(String name) { | |
String sql = "select * from member where name = ?"; | |
Connection conn = null; | |
PreparedStatement pstmt = null; | |
ResultSet rs = null; | |
try { | |
conn = getConnection(); | |
pstmt = conn.prepareStatement(sql); | |
pstmt.setString(1, name); | |
rs = pstmt.executeQuery(); | |
if(rs.next()) { | |
Member member = new Member(); | |
member.setId(rs.getLong("id")); | |
member.setName(rs.getString("name")); | |
return Optional.of(member); | |
} | |
return Optional.empty(); | |
} catch (Exception e) { | |
throw new IllegalStateException(e); | |
} finally { | |
close(conn, pstmt, rs); | |
} | |
} | |
@Override | |
public List<Member> findAll() { | |
String sql = "select * from member"; | |
Connection conn = null; | |
PreparedStatement pstmt = null; | |
ResultSet rs = null; | |
try { | |
conn = getConnection(); | |
pstmt = conn.prepareStatement(sql); | |
rs = pstmt.executeQuery(); | |
List<Member> members = new ArrayList<>(); | |
while(rs.next()) { | |
Member member = new Member(); | |
member.setId(rs.getLong("id")); | |
member.setName(rs.getString("name")); | |
members.add(member); | |
} | |
return members; | |
} catch (Exception e) { | |
throw new IllegalStateException(e); | |
} finally { | |
close(conn, pstmt, rs); | |
} | |
} | |
private void close(Connection conn) throws SQLException { | |
DataSourceUtils.releaseConnection(conn, dataSource); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment