개발/Spring

[Spring] DAO 개선하기 - 1

hojak99 2017. 7. 5. 15:10


DAO

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




아래와 같은 User 클래스를 만들어 사용자 정보를 저장할 클래스를 만든다. 해당 클래스는 id, name, password 세 개의 프로퍼티를 가지고 있다.

/* 사용자 정보 저장용 User 클래스 */

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 테이블을 만들어보자. 필자는 오라클을 사용했다.

CREATE TABLE users (
  id VARCHAR(10) PRIMARY KEY,
  name varchar(20) NOT NULL,
  password VARCHAR(20) NOT NULL
);



이제 사용자 정보를 DB에 넣고 관리할 수 있는 DAO 클래스를 만들어보겠다. 클래스의 이름은 UserDao 이며 새로운 사용자를 생성하고, 아이디를 가지고 사용자 정보를 읽어오는 두 개의 메소드를 만든다.


JDBC 를 이용하는 작업 순서는 다음과 같다.

  • DB 연결을 위한 Connection 을 가져옴
  • SQL 을 담은 Statement 또는 PreparedStatement 를 만든다.
  • 만들어진 Statement 를 실행한다.
  • 조회할 경우 SQL 쿼리의 실행 결과를 ResultSet 으로 받아서 정보를 저장할 Object 에 옮겨준다.
  • 작업 중에 생성된 Connection, Statement, ResultSet 같은 리소스는 작업을 마친 후 반드시 닫아준다.


/* JDBC 를 이용한 등록과 조회 기능이 있는 UserDao 클래스 */

public class UserDao {
	public void add(User user) throws ClassNotFoundException, SQLException {
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection connection = DriverManager.getConnection("jdbc::oracle:thin:@localhost:1521:orcl", "아이디", "비번");
		
		PreparedStatement ps = connection.prepareStatement(
				"INSERT INTO users(id, name, password) values(?, ?, ?)");
		ps.setString(1, user.getId());
		ps.setString(2, user.getName());
		ps.setString(3, user.getPassword());
		
		ps.executeQuery();
		ps.close();
		connection.close();
	}
	
	public User get(String id) throws ClassNotFoundException, SQLException {
		Class.forName("oracle.jdbc.driver.OracleDriver");
		Connection connection = DriverManager.getConnection("jdbc::oracle:thin:@localhost:1521:orcl", "아이디", "비번");
		
		PreparedStatement ps = connection.prepareStatement(
				"SELECT * FROM users WHERE id = ?"
		);
		ps.setString(1, id);
	
		ResultSet resultSet = ps.executeQuery();
		resultSet.next();
		
		User user = new User();
		user.setId(resultSet.getString("id"));
		user.setName(resultSet.getString("name"));
		user.setPassword(resultSet.getString("password"));
		
		resultSet.close();
		ps.close();
		connection.close();
		
		return user;
	}
}



다음 장에서는 UserDao 클래스를 이용해 DB 에 연결해 데이터를 넣고 조회할 수 있는 테스트 코드를 작성하도록 해보겠다.

반응형