오랜만에 티스토리에 개발관련 기록을 남기는 것같다.
디비의 값을 엑셀로 다운로드을 수 있도록 해달라는 요청이 있었다.
(요즘은 Android를 파는 중이지만...)
요청은 하나의 대상 테이블에 대한 엑셀 다운로드 구현이지만
어차피 개발할 거라면 재사용할 수 있도록 개발했다.
0. 의존성 추가 (pom.xml)
...
<!-- excel -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.1</version>
</dependency>
...
1. SQL (ExcelMapper.xml)
엑셀 다운로드용 쿼리를 모아둘 목적으로 XML 파일을 생성했다.
<?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="kr.co.excel.dao.ExcelMapper">
<resultMap id="excelListDownloadMap" type="java.util.HashMap" >
<result column="CONTENT_NO" property="번호" jdbcType="INTEGER" />
<result column="CONTENT_TITLE" property="제목" jdbcType="VARCHAR" />
</resultMap>
<select id="contentListDownload" resultMap="excelListDownloadMap">
<![CDATA[
SELECT CONTENT_NO ,CONTENT_TITLE
FROM TB_CONTENT
WHERE CONTENT_NO < 100
]]>
</select>
</mapper>
2. DAO (ExcelMapper.java)
현재 개발환경에서는 Mapper 를 사용하기 때문에
interface로 간단하게 DAO를 선언할 수 있다.
반환값을 void, 파라미터를 ResultHandler로 선언하면
Mybatis에서 조회되는 값을 바로 핸들링할 수 있다.
(ResultHandler 클래스를 잘 짜놓는다면...ㅎㅎㅎ)
ResultHandler는 너무 길어지니 이어지는 게시글에 자세히 적는걸로!
import java.util.Map;
import org.apache.ibatis.session.ResultHandler;
import org.springframework.stereotype.Repository;
@Repository
public interface ExcelMapper {
public void contentListDownload(ResultHandler<Map<String,Object>> ExcelHander);
}
3. Service (ExcelService.java)
난 서비스를 ResultHandler과 DAO의 매핑 공간으로 사용했다.
매핑을 해놓으면 해당 메서드를 호출할때
ExcelHandler에 조회 결과가 매핑되는 걸로 보인다.
난 이 ResultHandler를 통해 다운로드 받을 엑셀 형식을 정의하고
다운로드 로직을 ResultHandler 에 넣어놓았다. (excelHandler.download())
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import kr.co.excel.dao.ExcelMapper;
@Service
public class ExcelService {
@Autowired
private ExcelMapper excelMapper;
ExcelHandler<Map<String,Object>> excelHandler;
public void contentListDownload(
HttpServletRequest request,
HttpServletResponse response){
excelHandler = new ExcelHandler<>(response,"테스트");
excelMapper.contentListDownload(excelHandler);
try {
excelHandler.download();
} catch (IOException e) {
e.printStackTrace();
excelHandler.close();
}
}
}
4. Controller (ExcelController.java)
View페이지가 별도로 필요없는 RestController를 선언했다.
엑셀 다운로드시 Response 객체가
필요하기 때문에 파라미터로 선언해놓았다.
Request 객체는 추후에 필요할 듯 싶어서
넣어 놓았을 뿐 당장은 필요없다.
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import kr.co.excel.service.ExcelService;
@RestController
public class ExcelController {
@Autowired
ExcelService excelService;
@RequestMapping(value = "/contentListDown.do")
public void contentListDownload(
HttpServletRequest request,
HttpServletResponse response){
excelService.contentListDownload(request,response);
}
}
도움이 되었다면
로그인이 필요 없는 공감 버튼 꾹 눌러주세요!
[SPRING/Mybatis] POI를 이용한 대용량 데이터 추출 (엑셀 다운) -2
'Web 개발 > Java Web' 카테고리의 다른 글
[SPRING/Mybatis] POI를 이용한 대용량 데이터 추출 (엑셀 다운) -2 (0) | 2020.07.09 |
---|---|
문자열을 날짜로 변환하기 (String to Date) (0) | 2019.08.21 |
[log4j] 설정 및 사용방법 (0) | 2019.06.13 |
[log4j ] Log4j 구조 (0) | 2019.06.12 |
[log4j ] Log4j 란 (0) | 2019.06.11 |