토비의 스프링-DAO(2)

Song_MinGyu·2021년 7월 21일
0

Spring 정리

목록 보기
2/10
post-thumbnail

DAO 확장

  • 앞선 추상 클래스를 이용 한 것은 여러 모듈을 다양하게 사용하기 위함
  • 하지만 상속이라는 큰 단점을 안고 있다.

클래스의 분리

  • 상속 문제를 해결하기 위해 완전히 독립된 클래스로 만든다.
public class UserDao {
    private SimpleConnectionMaker simpleConnectionMaker;
    public UserDao() {
        simpleConnectionMaker = new SImpleConnectionMaker();
    }
    public void add(user user) throws ClassNotFoundException, SQLException {
        Connection c = simpleConnectionMaker.makeNewConnection();
        PreparedStatement ps = c.prepareStatement("insert into users(id,name,password)values(?,?,?)");
        ps.setString(1,user.getId());
        ps.setString(2,user.getName());
        ps.setString(3,user.getPassword());

        ps.executeUpdate();

        ps.close();
        c.close();
    }
    public User get(String id) throws ClassNotFoundException,SQLException {
        Connection c = simpleConnectionMaker.makeNewConnection();
        PreparedStatement ps = c.prepareStatment("select * from users where id = ?");
        ps.setString(1,id);

        ResultSet rs = ps.executeQuery();
        rs.next();
        User user = new User();
        user.setId(rs.getString("id"));
        user.setName(rs.getString("name"));
        user.setPassword(rs.getString("password"));

        rs.close();
        ps.close();
        c.close();

        return user;
    }
}
public class SimpleConnectionMaker {
    public Connection makeNewConnection() throws ClassNotFoundException,SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection c = DriverManager.getConnection("jdbc:mysql://localhost/DBname","ID","PW");
        return c;
    }
}
  • 문제점
    • 분리는 성공했지만, UserDao의 코드가 SimpleConnectionMaker라는 특정 클래스에 종속되어있기 때문에 상속을 사용했을 때 처럼 UserDao 코드의 수정 없이 DB커넥션 생성 기능 변경할 방법이 없다.
    • DB 커넥션을 제공하는 클래스가 어떤 것인지를 UserDao가 구체적으로 알고 있어야 한다.
profile
Always try to Change and Keep this mind

0개의 댓글