모델(Data)를 처리할때 대표적으로 우리는 DTO를 이용하여 처리를 해준다. 이는 Database의 값을 가져오거나, 혹은 새롭게 객체를 생성할때 (예를 들면 회원가입은 새로 데이터를 생성하고, User의 정보를 가져오는건 Get Method를 이용하여 기존 DB의 값을 가져옴) 사용된다.
클라이언트의 입력값에 따라서 넘어온 값을 Model화 해주는데 대표적인 4가지를 정리하려고 한다.
1. 단일 컬럼, 단일 행수
예를들어 ID 중복 조회를 할때의 쿼리문을 생각해보자
Select user_id
from user_info
where user_id = "클라이언트가 입력한 ID";
이렇게 쿼리문을 날리면 결과값은 1개 혹은 0개이다. 조회되는 값이 있다면, 기존에 중복되는 데이터가 있다는것이고
0개인경우에는 중복되는 데이터가 없으니 사용 가능한 아이디 일것이다.
이처럼 단일행 단일컬럼에 단일행수의 결과값을 가져오는건 그냥 해당 컬럼의 타입에 따라 데이터타입을 정해주고
request.setAttribute("모델명",user_id);
이런식으로 결과값을 View로 전달해주면 된다.
2. 다중컬럼, 단일행수
어떤 한 유저의 정보를 조회해본다고 생각해보자. 예를들어 MyPage를 구현할때 해당 User의 모든 정보의 값을 조회해야한다.
Select *
from user_info
where user_id = "user_id";
이런식으로 어떤 한 유저의 ID값을 조회하면서 테이블의 전체 데이터를 조회하면 해당 아이디를 가진 유저의 이름 나이 성별 주소 등등 다양한 컬럼값을 가지고올수있지만, 결과 행은 1행이다.
이 경우에 DTO를 이용하여 데이터를 모델화해주고 해당 DTO를 View로 넘겨주면 된다.
UserDTO userDTO = new UserDTO("아이디","이름","주소","성별","전화번호"...등등등);
request.Setattribute("userDTO", userDTO);
이런식으로 생성자를 이용하여 userDTO의 객체를 생성해준후 해당 참조변수를 View로 넘겨줄수도 있고. 각각의 컬럼값을 DTO의 Set Method 를이용하여 일일히 대입해준뒤 넘겨줄수도있다.
3.단일컬럼 다중 행수
DB의 값을 조회할때 회원의 이름만 조회한다던지, 회원의 특정 정보들을 조회할때는 컬럼은 1개지만 행수는 여러개이다.
이럴때는 ArrayList를 이용하여 제네릭을 부여해주고 ArrayList로 데이터값을 넘겨줄수 있다.
List<String> list = new ArrayList<String>();
while(rs.next()) {
list.add(rs.getString("user_name"));
}
return list;
이런식으로 반복문을 이용하여 List의 해당 컬럼의 값들을 다 Add 시켜준후 List를 리턴하고
해당 메소드가 호출된 Controller에서 다시 List로 넘겨받은후
request.Setattribute("list",list);
로 데이터를 넘겨줄수 있다.
4. 다중컬럼, 다중행수
전체 회원의 정보를 조회한다고 가정하면 모든 회원의 정보들을 다 조회해서 데이터를 넘겨줘야한다.
이럴때는 컬럼도 여러개, 행수도 여러개기때문에 3번과 비슷하지만 <String> 제네릭이 아닌 <UserDTO> 제네릭을 부여하여 List로 넘겨줄수 있다.
List<UserDTO> list = new ArrayList<UserDTO>();
while(rs.next()) {
UserDTO userDTO = new UserDTO(rs.getString("user_name"),
rs.getString("user_id"),
rs.getInt("user_no"),
rs.getString("user_gender"),
rs.getString("user_address"));
list.add(userDTO);
}
return list;
반복문안에 생성자를 이용하여 DTO 객체를 생성해준후 해당 DTO객체를 list에 Add하는 방식으로 각각의 회원 정보를 List에 추가한후 List를 리턴한다.
그럼 메소드를 호출한 Controller에서는
List<UserDTO> userList = userService.getUserList();
request.setAttribute("userList", userList);
서비스에서 호출한 메소드가 UserDTO의 정보를 담고 있는 List로 리턴되기때문에 그에 맞게 참조변수에 담아주고
해당 정보를 View에 전달하면 된다.
'Study > JSP' 카테고리의 다른 글
JS와 JSP 파일의 차이점, 그리고 JS 파일 JSP파일에서 사용 (1) | 2023.04.05 |
---|---|
JSTL forEach (0) | 2023.02.15 |
JSP Page에서 Java 클래스 Import하기 (0) | 2023.01.20 |
JSP 파일 템플릿 등록하기 (0) | 2023.01.14 |
*.properties 파일 생성하기 (0) | 2023.01.12 |