[토비의 스프링 3.1] 1.1 초난감 DAO - 포포

2022. 5. 23. 14:12토비의 스터디

실습은
OS: Window 10

IDE: Intelli J
Java 11, MySQL 8.0.24
로 진행하였다.


1.1.1 User

사용자 정보를 저장할 때는 자바빈 규약(getter,setter 등)을 따르는 오브젝트를 이용하면 편리하다.
User 클래스를 만들고, id, name, password의 프로퍼티를 가진 User 클래스를 생성한다.

이후 User오브젝트에 담긴 정보가 실제로 보관될 DB의 테이블을 하나 생성한다.
테이블 명은 USER이며 프로퍼티는 User클래스와 동일하다.


1.1.2 UserDao

DAO(Data Access Object)는 DB를 사용해 데이터를 조회, 조작하는 기능을 전담하는 오브젝트이다. 

사용자 정보를 DB에 넣고 관리하는 UserDao 클래스를 생성한다. 사용자를 생성(add)하고 정보를 읽어오는(get) 메소드를 먼저 만들었다.

 public class UserDao { 
       public void add(User user) throws ClassNotFoundException, SQLException {
           Class.forName("com.mysql.jdbc.Driver");
           Connection c = DriverManager.getConnection(
                        "jdbc:mysql://localhost/springbook", "spring", "book");
                                       
           PreparedStatement ps = c.prepareStatement(
               "insert into usere(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 {
           Class.forName("com.mysql.jdbc.Driver");
           Connection c = DriverManager.getConnection(
                        "jdbc:mysql://localhost/springbook", "spring", "book");
           
           String sql = "select * from user where id=?";
           PreparedStatement ps = c.prepareStatement(sql);
           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;
       }
   }

이후 main 메소드에서 테스트 코드를 작성 후 원하는 결과를 얻을 수 있었다.

public static void main(String[] args) throws ClassNotFoundException, SQLException {
   UserDao dao = new Userdao();
   
   User user = new User();
   user.setId("whiteship");
   user.setName("백기선");
   user.setPassword("married");
   
   dao.add(user);
   
   System.out.println(user.getId() + "등록 성공");
   
   User user2 = dao.get(user.getId());
   System.out.println(user2.getName());
   System.out.println(user2.getPassword());
   
   System.out.println(user2.getId() + " 조회 성공");

하지만 현재 UserDao의 코드에는 문제점이 많다. 

다음 1.2장에서는 UserDao를 리팩토링하는 과정을 담고있다.