스프링의 핵심 철학
자바 엔터프라이즈 기술의 혼란 속에서 잃어버렸던 객체지향 기술의 진정한 가치를 회복시키고, 그로부터 객체지향 프로그래밍이 제공하는 혜택을 누릴 수 있도록 기본으로 돌아가는 것
즉, 자연스럽게 스프링이 가장 관심을 많이 두는 대상은 오브젝트이다.
오브젝트의 기술적인 특징과 사용방법을 넘어서, 오브젝트의 설계에 대하여 관심을 가져야 한다.
스프링은 객체지향 기술과 설계, 구현에 관한 실용적인 전략과 사례를 평범한 개발자도 쉽게 적용할 수 있도록 프레임 워크 형태로 제공한다.
DAO
Data Access Object 는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.
User Object
package springbook.user.domain;
public class User {
String id;
String name;
String password;
}
Users Table
create table users (
id varchar(10) primary key,
name varchar(20) not null,
password varchar(10) not null
)
JDBC를 이용하는 작업의 일반적인 순서
public class UserDao {
/**
* User 데이터 추가
*/
public void add(User user) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
// Connection 을 가져온다.
Connection c = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/toby?useSSL=false", "root", "password"
);
// Statement 작성
PreparedStatement ps = c.prepareStatement(
"insert into users(id, name, password) values(?,?,?)"
);
// parameter 설정
ps.setString(1, user.getId());
ps.setString(2, user.getName());
ps.setString(3, user.getPassword());
// Statement 실행 후 DB 업데이트?
ps.executeUpdate();
// 작업 중에 생성된 Connection, Statement 같은 리소스는 역순으로 닫아준다.
ps.close();
c.close();
}
/**
* User 데이터 조회
*/
public User get(String id) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
// Connection 을 가져온다.
Connection c = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/toby?useSSL=false", "root", "password"
);
PreparedStatement ps = c.prepareStatement(
"select * from users where id = ?"
);
// parameter 설정
ps.setString(1, id);
// 쿼리 실행 후 결과값 받음
ResultSet rs = ps.executeQuery();
rs.next(); // pointer 이동?
// 결과값을 정보를 저장할 오브젝트에 옮겨준다.
User user = new User();
user.setId(rs.getString("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
// 작업 중에 생성된 Connection, Statement 같은 리소스는 역순으로 닫아준다.
rs.close();
ps.close();
c.close();
return user;
}
}
public class main {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
UserDao userDao = new UserDao();
// insert test
User user = new User();
user.setId("Id");
user.setName("test_name");
user.setPassword("Password");
userDao.add(user);
System.out.println(user.getId() + "등록 성공");
// select test
User searchedUser = userDao.get(user.getId());
System.out.println(searchedUser.getName());
System.out.println(searchedUser.getPassword());
System.out.println(searchedUser.getId() + "조회 성공");
}
}
만약, 실패했다면 DB 설정과 Connection 정보, Users 테이블 등록 여부 등을 확인해봐야 한다.
또는 해당 프로젝트의 클래스패스에 DB의 드라이버가 있는지 확인해야 한다.
MySQL 을 사용 시, MySQL 버전에 맞는 mysql-connector-java 가 있어야 한다.
UserDao 클래스의 문제점
소스코드 : github