티스토리 뷰

Spring

[Spring] DB에서 데이터 조회

망나니개발자 2017. 11. 15. 16:16
반응형


DB에서 데이터를 조회하기 위해서는 이전의 2가지 설정 단계를 하고 오셔야 가능합니다. 그러므로 이 페이지를 통해서 들어오신 분은 앞의 설정을 마무리하고 오시면 됩니다! 기본적으로는 어떤 패키지명을 사용하던지 상관이 없지만 dispatcher-servlet.xml에서 설정했던 고유의 명칭 방식은 따라야합니다. 저의 경우에는 com.s4c.stg로 시작하는 패키지를 만들겠다고 설정하였기 때문에 com.s4c.stg를 기반으로 db.ctr이라는 이름을 뒤에 더 붙여준 것입니다. 



1. DAO 설정하기



DAO란 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트입니다. 저는 데이터베이스에 있는 사용자 데이터를 접근할 것이기에 com.s4c.stg.user.dao라는 패키지를 생성하고 그 안에 UserDAO.java를 만들어 DB에 접근하도록 하겠습니다.


[ UserDAO.java ]

package com.s4c.stg.user.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.s4c.stg.user.UserVO;

@Repository("userDAO")
public class UserDAO {

	@Autowired
	private SqlSession sqlSession;
	private String Namespace = "com.s4c.stg.user.userMapper";
	    
	 public List<UserVO> selectUser() throws Exception {
		 return sqlSession.selectList(Namespace+".selectUser");
	 }
}


@Repository("userDAO") 는 다른 클래스에서 이 클래스로 접근할 때 userDAO라는 이름을 사용하여 접근하겠다는 것이고, 우리가 datasource-sqlmap.xml에서 등록한 SqlSession 클래스에 접근하기 위해서 @Autowired를 적어주었습니다. 그리고 우리는 sql문을 적어둔 xml파일에 접근하여 그 Query문을 사용해 두어야 하는데, 저의 경우에는 userMapper.xml에 <mapper namespace="com.s4c.stg.user.userMapper">와 같이 적어두어서 UserDAO클래스에도 이 네임스페이스를 사용하여 selectUser라는 쿼리문을 호출하고 있습니다. 


2. UserVO 설정하기



VO라는 것은 Value Object로 단순히 값을 저장하기 위한 객체를 의미합니다. 저 같은 경우에는 id, pw, money라는 데이터를 Database로 부터 가져와 출력할 것이기에 3가지 변수를 넣었고 com.s4c.stg.user라는 패키지 안에 클래스를 만들었습니다. 


[ UserVO.java ]

package com.s4c.stg.user;

public class UserVO {
	
	private String id;
	private String pw;
	private int money;
	
	public int getMoney() {
		return money;
	}
	public void setMoney(int money) {
		this.money = money;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPw() {
		return pw;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
}

우리가 userMapper.xml에 <select id="selectUser" resultType="userVO">을 명시해 두었는데, 여기서 userVO는 리가 mapper-config.xml에서 <typeAlias alias="userVO" type="com.s4c.stg.user.UserVO"/> 로 줄여말하기로 했던 UserVO.java파일이 됩니다.



3. Service 설정하기



이제 사용자의 명령을 호출하는 Service 클래스를 작성해 줄 차례입니다. 저는 com.s4c.stg.service라는 패키지 안에 java파일과 interface 파일을 추가하였습니다. 일반적으로 서비스를 위한 Java파일과 그 서비스를 구현하는 Interface파일을 독립적으로 구현합니다! UserService가 인터페이스고 UserServiceImpl이 인터페이스를 Implement하였다고 하여 UserServiceImpl이라고 이름지었습니다.


[ UserService.java ]

package com.s4c.stg.service;

import java.util.List;

import com.s4c.stg.user.UserVO;
public interface UserService {
	public List<UserVO> selectUser() throws Exception;
}


[ UserServiceImpl.java ]

package com.s4c.stg.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.s4c.stg.user.UserVO;
import com.s4c.stg.user.dao.UserDAO;

@Service("userService")
public class UserServiceImpl implements UserService {
 
	@Resource(name="userDAO")
	private UserDAO userDAO;
    
    @Override
    public List<UserVO> selectUser() throws Exception {
        return userDAO.selectUser();
    }
}

우다른 클래스에서 이 서비스를 호출할 때 이름을 userSerivce로 하겠다고 하여 @Service("userService")를 이 클래스에 적어두었고, 데이터베이스에 접근하는 역할은 DAO에서 담당하므로 DAO를 호출하여야 하는데, 우리가 참조하려는 자원의 이름을  @Resource(name="userDAO") 로 적어주었습니다.


4. Controller 설정하기



이제 뷰를 제어해줄 컨트롤러를 작성해줄 차례입니다. @RequestMapping을 통해서 어느 컨트롤러가 요청을 처리할지 알게 됩니다. 기본이 되는 컨트롤러로 HomeController를 작성해 주었으며 index.jsp에 의해 실행되도록 하고 Get 방식으로 처리하기기 위해 @RequestMapping(value="/", method = RequestMethod.GET)를 적어주었습니다.


[ HomeController.java ]

package com.s4c.stg.db.ctr;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		  
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
}
	


[ DatabaseController.java ]

package com.s4c.stg.db.ctr; import java.util.List; import java.util.Locale; import javax.annotation.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.s4c.stg.service.UserService; import com.s4c.stg.user.UserVO; @Controller public class DatabaseController{ private static final Logger logger = LoggerFactory.getLogger(DatabaseController.class); @Resource(name="userService") private UserService service; /** * Simply selects the home view to render by returning its name. */ @RequestMapping(value = "/db", method = RequestMethod.GET) public String home(Locale locale, Model model) throws Exception{ logger.info("db"); List<UserVO> userList = service.selectUser(); model.addAttribute("userList", userList); return "db"; } }

index.jsp에서 하이퍼링크를 통해 db라는 페이지로 요청을 보내면 db.jsp 파일을 보여주기 위해서 @RequestMapping(value="/db", method = RequestMethod.GET) 를 해주었고, model에 userList를 추가하여 db를 return 하고 있습니다. 여기서 db를 return 한다는 것은 db.jsp의 화면을 보여주겠다는 의미입니다.


5. JSP 파일 설정하기



db.jsp 파일은 views의 폴더에 만들어주어야 합니다.


[ index.jsp ]

<%@ page language="java" contentType="text/html; charset=UTF-8"
  
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 
<head>
<title>HelloWorld Index Page</title>
</head>
 
 <body>
    <center>
        <h2>Hello World</h2>
        <h3>
            <a href="db">Click Here</a>
        </h3>
    </center>
</body>


[ db.jsp ]

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Home</title> </head> <body> <h1>Hello world!<a href = "/">Click Here</a></h1> <table> <thead> <tr> <th>아이디</th> <th>비밀번호</th> <th>돈</th> </tr> </thead> <tbody> <c:forEach items="${userList}" var="user"> <tr> <td>${user.id}</td> <td>${user.pw}</td> <td>${user.money}</td> </tr> </c:forEach> </tbody> </table> </body> </html>


6. 실행 화면









관련 포스팅

  1. Maven 기반의 Spring 프로젝트 만들기 (1/5)

  2. Spring 개발환경 설정하기 (2/5)

  3. Dispatcher Servlet 설정하기 (3/5)

  4. MyBatis, Datasource 설정 (4/5)

  5. DB에서 데이터 조회하기 (5/5)


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함