본문 바로가기

Spring/토비의 스프링 3.1

1.1 초난감 DAO


목차

1.1.1 User

사용자 정보를 JDBC API를 통해 DB에 저장하고 조회할 수 있는 간단한 DAO 만들기


DAO(Data Access Object)
DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트

자바빈 규약을 따르는 오브젝트 User를 생성


자바빈(Java Bean)
다음 두 가지 관례를 따르는 오브젝트를 가리키며, 간단히 빈이라고 부르기도 한다.

  • 디폴트 생성자 : 파라미터가 없는 디폴트 생성자
  • 프로퍼티 : 수정자 메소드(setter) + 접근자 메소드(getter)
public class User {
    String id;
    String name;
    String password;  

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

DB 테이블은 User 클래스의 프로퍼티와 동일하게 구성한다.

필드명 타입 설정
id VARCHAR2(10) Primary Key
name VARCHAR(20) Not Null
password VARCHAR2(20) Not Null
CREATE TABLE users (
    id VARCHAR2(10) PRIMARY KEY,
    name VARCHAR2(20) NOT NULL,
    password VARCHAR2(20) NOT NULL
)

1.1.2 UserDao

사용자 정보를 DB에 넣고 관리할 수 있는 DAO 클래스

JDBC를 이용한 작업의 일반적 순서

  1. DB 연결을 위한 Connection 가져오기
  2. SQL을 담은 Statement(또는 PreparedStatement) 작성
  3. Statement 실행
  4. 조회 : 실행 결과를 ResultSet으로 받아서 오브젝트에 저장
  5. 작업 후 만들어진 리소스(Connection, Statement, ResultSet) 닫아서 반환
  6. 예외 처리
public class UserDao {
    public void add(User user) throws ClassNotFoundException, SQLException {
        // MySql
        // Class.forName("com.mysql.jdbc.Driver");
        // Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book");

        // Oracle
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "spring", "book");

        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 {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection c = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "spring", "book");

        PreparedStatement ps = c.prepareStatement("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;
    }
}

1.1.3 main()을 이용한 DAO 테스트 코드

add() 메소드를 이용한 신규 사용자 추가 및 get() 메소드를 통해 가져온 결과 확인

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() + "조회 성공");
}

main()을 UserDao 클래스에 붙이고 테스트를 해보자.

해당 jdbc 라이브러리를 Classpath에 추가해주어야 한다.

whiteship 등록 성공
백기선
married
whiteship 조회 성공


' Spring > 토비의 스프링 3.1' 카테고리의 다른 글

1.6 싱글톤 레지스트리와 오브젝트 스코프  (0) 2019.01.09
1.5 스프링의 IoC  (0) 2019.01.07
1.4 제어의 역전(IoC)  (0) 2019.01.07
1.3 DAO의 확장  (0) 2019.01.07
1.2 DAO의 분리  (0) 2019.01.03