728x90
1. 초난감 DAO
DAO(Data Access Object)
DB를 사용하여 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트
1-1. User
package tobi01.conangam.user.domain;
public class User {
String id;
String name;
String password;
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
}
테이블 이름은 USER로 프로퍼티는 User 클래스의 프로퍼티와 동일하게 구성.
자바빈(Java Bean)
비주얼 컴포넌트라기보다는 다음 두 가지 관례를 따라 만들어진 오브젝트를 가르킨다.
- 디폴트 생성자 : 자바빈은 파라미터가 없는 디폴트 생성자를 갖고 있어야한다. 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문에 필요하다
- 프로퍼티 : 자바빈이 노출하는 이름을 가진 속성을 프로퍼티라고 한다. 프로퍼티는 set으로 시작하는 수정자 메소드(setter)와 get으로 시작하는 접근자 메소드(getter)를 이용해 수정 또는 조회할 수 있다.
1-2. UserDao
JDBC를 이용하는 작업의 일반적인 순서
- DB 연결을 위한 Connection
- SQL을 담은 Statement(또는 PreparedStatement)를 만든다.
- 만들어진 Statement를 실행
- 조회의 경우 SQL 쿼리의 실행 결과를 ResultSet으로 받아, 정보를 저장할 오브젝트에 옮긴다.
- 작업중에 생성된 Connection, Statement, ResultSet 같은 리소스는 작업을 마친 후 반드시 닫는다.
- JDBC API가 만들어내는 예외를 직접 잡아서 직접 처리하거나, 메소드에 throws를 선언해서 예외가 발생하면 메소드 밖으로 던지게 한다.
일단 예외는 모두 메소드 밖으로 던져버리는 편이 간단하다.
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/tobi", "root", "1234");
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("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook/tobi", "root", "1234");
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-2. main()을 이용한 DAO 테스트 코드
만들어진 코드의 기능을 검증하고자 할 때 사용할 수 있는 가장 간단한 방법은 오브젝트 스스로 자신을 검증하도록 만드는 것.
public class UserDao {
public void add(User user) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/tobi", "root", "1234");
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("com.mysql.cj.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/tobi", "root", "1234");
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;
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
UserDao userDao = new UserDao();
User user = new User();
user.setId("01");
user.setName("ChordPlaylist");
user.setPassword("playlist");
userDao.add(user);
System.out.println(user.getId() + " 등록 성공");
User user2 = userDao.get(user.getId());
System.out.println(user2.getName());
System.out.println(user2.getPassword());
System.out.println(user2.getId() + "조회 성공");
}
}
Run: UserDao
01 등록 성공
ChordPlaylist
playlist
01조회 성공
반응형
'Server > Spring&Spring Boot' 카테고리의 다른 글
[토비의 스프링] 오브젝트와 의존관계 - DAO의 확장 (0) | 2022.10.24 |
---|---|
[토비의 스프링] 오브젝트와 의존관계 - DAO의 분리 (0) | 2022.10.24 |
[토비의 스프링] 스프링이란? (0) | 2022.10.23 |
[Spring] @PathVariable로 불러온 값을 JSP에서 사용하기 (0) | 2022.07.07 |
[Spring] 스프링 셋팅 (국비지원 최종 Ver) (0) | 2022.07.06 |