본문 바로가기
programming/MakinGProJect

게시판 만들기 13 자바 스프링프레임워크 게시판 테이블 데이터 가져오기

by 개코 - 개발과 코딩 2021. 10. 26.

mybis 를 사용하면 테이블에 입력된 데이터를 가져올 수 있다. 스프링프레임워크에서 mybis 를 이용하면 테이블 조작을 할 수 있는 쿼리를 xml 형태로 만들어 데이터를 요청할 수 있다.

게시판 만들기 13 자바 스프링프레임워크
게시판 테이블 데이터 가져오기

mybtis에서 쿼리를 xml 형식을 작성하는 것은 어렵지 않다.

mapper 에 대한 자세한 설명은 다음으로 미룬다.

쿼리에 들어가는 임의 값 등의 입력을 위해 <![CDATA[ 쿼리 ]]> 이 부분을 얻는 것을 잊지 말자.

기본적인 작성방법은 아래와 같다.

<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    
<mapper namespace="">
    
    <select id="" parameterType="" resultType="">
        <![CDATA[
	        사용할 쿼리
		]]>
    </select>
    
</mapper>

select mapper 매퍼 작성하기

위의 코드를 토대로 mybtis의 mapper xml에 select 쿼리를 작성해 본다.

전체적인 코드는 아래와 같다.

<?xml version="1.0" encoding= "UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    
<mapper namespace="com.crd.test.Template.Template0ModelMapper">
    
    <select id="SelectListTemplate" parameterType="com.crd.test.Template.Template0Model" resultType="com.crd.test.Template.Template0Model">
        <![CDATA[
	        SELECT idx
			     , title
			     , content
			     , ins_dt
			     , ins_usr
			     , upd_dt
			     , upd_usr
			  FROM tbl_template
			;
		]]>
    </select>
    
</mapper>

테스트

dao 클래스 객체에서 위의 xml 매퍼를 호출할 것이다.

dao 에서 매퍼를 호출하기 위해 필요한 것은 Sqlsession 이다.

이것은 스프링프레임워크에서 설정해 줘야 한다.

설명이 길어지기 때문에 다음으로 미룬다.

package com.crd.test.Template;

import java.util.List;

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

@Service
public class Template3Dao implements Template3DaoImpl {

	@Autowired
    private SqlSession sqlSession;
	
	@Override
	public Template0Model RequestData(Template0Model model) throws Exception {
		
		String vValue = model.getDataObject().toString();
		
		model.setDataObject(vValue + ", dao 요청 도착 및 결과 반환");
		
		return model;
	}
	
	
	@Override
	public List<Template0Model> SelectListTemplate(Template0Model p_model) throws Exception {
		// TODO Auto-generated method stub
		return sqlSession.selectList("SelectListTemplate", p_model);
	}
}

컨트롤러의 내용을 변경해 본다.

전체코드를 넣었지만 중요한 메서드는 BoardList 이다.

데이터베이스에 데이터를 요청하는 메서드를 만들고 데이터를 불러온 후 json문자열로 만들고 있다.

데이터를 기준으로 전체 게시물수를 알 수 있다.

이것을 화면에 표시하도록 한다.

package com.crd.test.Template;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
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.google.gson.Gson;

/**
 * Handles requests for the application home page.
 */
@Controller
public class Template1Controller {
	
	@Autowired
	private Template2Service gService;
	
	private static final Logger logger = LoggerFactory.getLogger(Template1Controller.class);
	
	/**
	 * url 최초진입
	 */
	@RequestMapping(value = "/template", method = RequestMethod.GET)
	public String BoardList(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		int vCount = 0;
		String vRetList = null;
		List<Template0Model> vList;
				
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		Template0Model vModel = new Template0Model();
				
		try {
			
			vModel = gService.RequestData(
						new Template0Model("")
					);
			
			vList = gService.SelectListTemplate(
					new Template0Model("")
				);
			
			vCount = vList.size();
			
			vRetList = new Gson().toJson(vList);
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			vModel.setDataObject("에러발생" + e.getMessage());
		}
		
		model.addAttribute("serverTime", formattedDate + " STS 실행 테스트");
		model.addAttribute("serverResult", vModel.getDataObject());
		model.addAttribute("serverResultListCount", vCount);
		model.addAttribute("serverResultListData", vRetList);
		
		return "template/template";
	}
}

서비스 객체의 코드 또한 같이 올려본다.

package com.crd.test.Template;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class Template2Service implements Template2ServiceImpl {
	
	@Autowired
    private Template3Dao gDao;
	
	@Override
	public Template0Model RequestData(Template0Model model) throws Exception {
	
		model.setDataObject("서비스 요청 도착 및 결과 반환");
		
		model = gDao.RequestData(model);
		
		return model;
	}
	
	@Override
	public List<Template0Model> SelectListTemplate(Template0Model p_model) throws Exception {
		// TODO Auto-generated method stub
		return gDao.SelectListTemplate(p_model);
	}

}

결과화면을 보자.

테이블에 데이터를 하나 넣어씩 때문에 단 하나의 자료가 나오는 것을 볼 수 있다.

반응형

댓글