[Spring] JDBC 설정
DataSource 설정
JdbcTemplate 생성
JdbcTemplate 를 사용한다.
JdbcTemplate template;
UserRowMapper
클래스 생성
RowMapper 를 구현한다.
class UserRowMapper implements RowMapper<UserVO>{
@Override
public UserVO mapRow(ResultSet arg0, int arg1) throws SQLException {
// TODO Auto-generated method stub
return null;
}
}
컬럼데이터를 바이딩해 준다.
class UserRowMapper implements RowMapper<UserVO> {
@Override
public UserVO mapRow(ResultSet rs, int index) throws SQLException {
UserVO vo = new UserVO();
vo.setUserid(rs.getString("userid"));
vo.setUsername(rs.getString("username"));
vo.setUserpwd(rs.getString("userpwd"));
vo.setAddress(rs.getString("address"));
vo.setEmail(rs.getString("email"));
vo.setPhone(rs.getString("phone"));
return vo;
}
}
코드 간략화가 된다.
A 라는 클래스를 만든다.
class A { }
inner class 로 생성하면 A 가 가진 자원을 가져다 쓸 수 있다.
class A {
class B { }
}
이벤트 핸들링 하는 경우 무명 클래스 사용하는 경우가 있음
JdbcTemplate
가진 API 를 이해한다.
@Override
public List<UserVO> getUserList() {
System.out.println("UserDAO_Spring 기반 연동");
String sql = "select * from userinfo ";
return template.query(sql, new UserRowMapper());
}
template.query
를 사용한다.
JdbcTemplate 은 DataSource
정보가 필요하다.
public JdbcTemplate(DataSource dataSource) {
setDataSource(dataSource);
afterPropertiesSet();
}
BasicDataSource 를 사용한다.
BasicDataSource dataSource = new BasicDataSource();
dataSource 는 서버가 관리하는 자원이다.
applicationContext.xml 파일에 추가한다.
BasicDataSource 를 생성한다.
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
p:driverClassName="oracle.jdbc.OracleDriver"
p:url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
p:username="hr"
p:password="hr"/>
jdbcTemplate 클래스를 생성한다.
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
@Autowired
를 사용한다.
@Autowired
JdbcTemplate template;
spring 에서 jdbctemplate 을 제공하고 있다.
searchUser 메소드를 구현한다.
@Override
public List<UserVO> searchUser(String condition, String keyword) {
System.out.println("UserDAO_Spring 기반 연동");
String sql = "select * from userinfo where " + condition
+ " like '%'||?||'%' ";
return template.query(sql, new Object[]{keyword}, new UserRowMapper());
}
실행 결과
========= 검색 =======
UserDAO_Spring 기반 연동
(searchUser) 메소드 수행에 걸린 시간: 67ms
UserVO [userid=admin, username=관리자, userpwd=a1234, email=admin@mc.co.kr, phone=02-1234, address=서울 역삼]
getUser 구현
@Override
public UserVO getUser(String id) {
String sql = "select * from userinfo where userid = ?";
return template.queryForObject(sql, new Object[]{id}, new UserRowMapper());
}
queryForObject
는 결과가 1개 인 것을 예상하는 것이다.
login 구현
@Override
public UserVO login(String id, String pw) {
System.out.println("UserDAO_Spring 기반 연동");
String sql = "select * from userinfo where userid=? and userpwd = ?";
return template.queryForObject(sql, new Object[]{id, pw}, new UserRowMapper());
}
?
가 두 개 있으므로, new Object[]{id, pw}
로 id, pw 를 넘겨준다.
실행코드
String[] config = {"applicationContext.xml"};
ApplicationContext context = new ClassPathXmlApplicationContext(config);
UserService service = (UserService) context.getBean("service");
service.login("admin", "a1234");
실행결과
UserDAO_Spring 기반 연동
로그인 되었습니다. admin님
(login) 메소드 수행에 걸린 시간: 680ms
실패 하게 만들면? 예외가 발생한다.
Exception in thread "main" org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
예외 처리를 해줘야 한다.
예외가 발생하면 null
을 리턴한다.
@Override
public UserVO login(String id, String pw) {
System.out.println("UserDAO_Spring 기반 연동");
String sql = "select * from userinfo where userid=? and userpwd = ?";
UserVO vo = null;
try {
vo = template.queryForObject(sql, new Object[]{id, pw}, new UserRowMapper());
} catch (Exception e) { }
return vo;
}
1개가 나오면 로그인 성공, 0개가 나오면 로그인 실패
addUser 메소드 구현
@Override
public int addUser(UserVO user) {
String sql = "insert into userinfo (userid, username, userpwd, email, phone,address) "
+ " values (?,?,?,?,?,?)";
return template.update(sql, user.getUserid(), user.getUsername(), user.getUserpwd(), user.getEmail(), user.getPhone(), user.getAddress());
}
userUser, removeUser 메소드 구현
@Override
public int updateUser(UserVO user) {
String sql = "update userinfo set email=?,phone=?,address=? where userid = ? ";
return template.update(sql, user.getEmail(), user.getPhone(), user.getAddress(), user.getUserid());
}
@Override
public int removeUser(String id) {
String sql = "delete from userinfo where userid = ? ";
return template.update(sql, id);
}
'Programming > Spring' 카테고리의 다른 글
[spring] iBatis 구현 (0) | 2016.04.25 |
---|---|
[spring] iBatis, MyBatis Framework 아키텍처 (0) | 2016.04.24 |
[spring] 데이터 접근 디자인 패턴 (0) | 2016.04.23 |
[spring] 다국어 지원 (0) | 2016.04.22 |
[spring] Annotation 기반 AOP 설정 (0) | 2016.04.22 |
댓글