- UserService 컴포넌트 구조
- Value Object 클래스 작성
users.sql
create table users(
id varchar2(8) primary key,
password varchar2(8),
name varchar2(20),
role varchar2(5)
);
UserVO.java
package com.springbook.biz.user;
// USERS 테이블의 칼럼 이름과 매핑되는 멤버변수를 가진 UserVO 클래스 작성
// VO(Value Object)
public class UserVO {
private String id;
private String password;
private String name;
private String role;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
@Override
public String toString() {
return "UserVO [id=" + id + ", password=" + password + ", name=" + name + ", role=" + role + "]";
}
}
- DAO 클래스 작성
UserDAO.java
package com.springbook.biz.user.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.springbook.biz.common.JDBCUtil;
import com.springbook.biz.user.UserService;
import com.springbook.biz.user.UserVO;
// DAO(Data Access Object)
public class UserDAO {
// JDBC 관련 변수
private Connection conn = null;
private PreparedStatement stmt = null;
private ResultSet rs = null;
// SQL 명령어들
private final String USER_GET = "select * from users where id=? and password=?";
// CRUD 기능의 메소드 구현
// 회원 등록
public UserVO getUser(UserVO vo) {
UserVO user = null;
try {
System.out.println("===> JDBC로 getUser() 기능 처리");
conn = JDBCUtil.getConnection();
stmt = conn.prepareStatement(USER_GET);
stmt.setString(1, vo.getId());
stmt.setString(2, vo.getPassword());
rs = stmt.executeQuery();
if(rs.next()) {
user = new UserVO();
user.setId(rs.getString("ID"));
user.setPassword(rs.getString("PASSWORD"));
user.setName(rs.getString("NAME"));
user.setRole(rs.getString("ROLE"));
}
} catch(Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.close(rs, stmt, conn);
}
return user;
}
}
- Service 인터페이스 작성
UserService.java
package com.springbook.biz.user;
public interface UserService {
// CRUD 기능의 메소드 구현
// 회원 등록
UserVO getUser(UserVO vo);
}
- Service 구현 클래스 작성
UserServiceImpl.java
package com.springbook.biz.user.impl;
import com.springbook.biz.user.UserService;
import com.springbook.biz.user.UserVO;
public class UserServiceImpl implements UserService {
private UserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
@Override
public UserVO getUser(UserVO vo) {
return userDAO.getUser(vo);
}
}
- UserService 컴포넌트 테스트
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="com.springbook.biz" />
<!-- UserServiceImpl와 UserDAO 클래스를 각각 <bean> 등록한다.
UserServiceImpl 클래스에서 UserDAO 객체를 의존성 주입하기 위한 <Property> 설정을 추가한다. -->
<bean id="userService" class="com.springbook.biz.user.impl.UserServiceImpl">
<property name="userDAO" ref="userDAO" />
</bean>
<bean id="userDAO" class="com.springbook.biz.user.impl.UserDAO" />
</beans>
UserServiceClient.java
package com.springbook.biz.user.impl;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import com.springbook.biz.user.UserService;
import com.springbook.biz.user.UserVO;
public class UserServiceClient {
public static void main(String[] args) {
// 1. Spring 컨테이너를 구동한다.
AbstractApplicationContext container = new GenericXmlApplicationContext("applicationContext.xml");
// 2. Spring 컨테이너로부터 UserServiceImpl 객체를 Lookup한다.
UserService userService = (UserService) container.getBean("userService");
// 3. 로그인 기능 테스트
UserVO vo = new UserVO();
vo.setId("test");
vo.setPassword("test123");
UserVO user = userService.getUser(vo);
if(user != null) {
System.out.println(user.getName() + "님 환영합니다.");
} else {
System.out.println("로그인 실패");
}
// 4. Spring 컨테이너를 종료한다.
container.close();
}
}
- 어노테이션 적용
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="com.springbook.biz" />
<!-- <bean id="userService" class="com.springbook.biz.user.impl.UserServiceImpl">
<property name="userDAO" ref="userDAO" />
</bean>
<bean id="userDAO" class="com.springbook.biz.user.impl.UserDAO" /> -->
<!-- Setter 인젝션 설정으로 테스트한 UserService 컴포넌트를 어노테이션 설정으로 변경 -->
<!-- Setter 관련 설정을 모두 주석 처리하거나 삭제 -->
</beans>
UserServiceImpl.java
package com.springbook.biz.user.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springbook.biz.user.UserService;
import com.springbook.biz.user.UserVO;
// Setter 인젝션 설정으로 테스트한 UserService 컴포넌트를 어노테이션 설정으로 변경
@Service("userService")
public class UserServiceImpl implements UserService {
@Autowired
private UserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
@Override
public UserVO getUser(UserVO vo) {
return userDAO.getUser(vo);
}
}
UserDAO.java
package com.springbook.biz.user.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.springframework.stereotype.Repository;
import com.springbook.biz.common.JDBCUtil;
import com.springbook.biz.user.UserVO;
// DAO(Data Access Object)
//Setter 인젝션 설정으로 테스트한 UserService 컴포넌트를 어노테이션 설정으로 변경
@Repository("userDAO")
public class UserDAO {
// JDBC 관련 변수
private Connection conn = null;
private PreparedStatement stmt = null;
private ResultSet rs = null;
// SQL 명령어들
private final String USER_GET = "select * from users where id=? and password=?";
// CRUD 기능의 메소드 구현
// 회원 등록
public UserVO getUser(UserVO vo) {
UserVO user = null;
try {
System.out.println("===> JDBC로 getUser() 기능 처리");
conn = JDBCUtil.getConnection();
stmt = conn.prepareStatement(USER_GET);
stmt.setString(1, vo.getId());
stmt.setString(2, vo.getPassword());
rs = stmt.executeQuery();
if(rs.next()) {
user = new UserVO();
user.setId(rs.getString("ID"));
user.setPassword(rs.getString("PASSWORD"));
user.setName(rs.getString("NAME"));
user.setRole(rs.getString("ROLE"));
}
} catch(Exception e) {
e.printStackTrace();
} finally {
JDBCUtil.close(rs, stmt, conn);
}
return user;
}
}
결과는 당연히 어노테이션으로 변경하기 전과 같다.
'구 > 스프링' 카테고리의 다른 글
부트스트랩 반응형 적용 해제 (0) | 2020.12.22 |
---|---|
MAVEN || [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ (0) | 2020.12.09 |
비즈니스 컴포넌트 실습 1 (0) | 2020.10.03 |
스프링 DAY1 (0) | 2020.10.03 |