자바 iBATIS 결과를 XML 리턴받기 : xmlResultName , java , xml
728x90
반응형
iBATIS 는 결과 값을 xml 로 리턴해주는 아주 좋은 기능이 있다. 다만 List 로 받을 경우 따로 파싱해줘야 하는 점이 걸릴뿐이다.
<%=sqlMap.queryForList("select-user-xml", null)%>
위 소스를 브라우저에서 확인하면 각 row 마다 하나의 xml형식으로 완성시켜 배열로 리턴해주게 된다.
++ 참고사이트 : http://naingyo.springnote.com/pages/1495674 iBATIS 가 xml 로 반환해준 값이 라는 부분을 참조하자.
위 결과를 xml 데이터로 사용할 수 없기에 한번더 파싱과정을 거쳐야 한다. 위 사이트도 해결책이 되겠지만, 유동적이지 못한 부분이 걸리는 것 같다. 각 데이터마다 모델에 맞는 처리를 해줘야한다는 것. 그래서 하루종일 이것을 어떻게 하면 간편하게 사용할 수 있을 까? 고민끝에 결과가 나와 소스를 공개한다.
본 소스는 2010/01/05 - [개발센터/JAVA] - 자바 XML 제어 라이브러리 JDOM : JAVA 의 확장 버전이다.
* Xml.java
/** * @class Xml * @brief Xml Classes * * registered date 20100105 * programmed by Seok Kyun. Choi. 최석균 * http://syaku.tistory.com */ package org.syaku.util; import org.apache.log4j.Logger; import java.util.*; import java.io.*; import org.jdom.*; import org.jdom.input.*; import org.jdom.output.*; import org.syaku.util.*; public class Xml { private static Logger log = Logger.getLogger(Xml.class); private SAXBuilder builder = new SAXBuilder(); private String root_node = "data"; private String child_node = "item"; // iBATIS public Document iBATISForMake(List result) throws Exception { Element data = new Element(root_node); for (int i = 0; i < result.size(); i++ ) { Element element = new Element(child_node); String xml = (String)result.get(i); Document document = builder.build(new StringReader(xml)); Element root = document.getRootElement(); List child = root.getChildren(); for (Iterator iter = child.iterator();iter.hasNext();) { Element node = (Element) iter.next(); String name = (String) node.getName(); String value = (String) node.getText(); addElement(element,name,value); } data.addContent(element); } Document document = new Document(data); return document; } // 엘리먼트 생성 public Element addElement(Element parent, String name, String value) { Element element = new Element(name); element.setText(value); parent.addContent(element); return parent; } // 애트리뷰트 생성 public void addAttribute(Element element, String name, String value){ Attribute attribute = new Attribute(name,value); element.setAttribute(attribute); } }
* sqlMap
<!--// * @id select-user-xml * @brief 사용자관리 레코드 sub * @return xml //--> <select id="select-user-xml" parameterClass="hashMap" resultClass="xml" xmlResultName="data"> 생략 </select>
* Sample Source
<%@ page contentType="text/html; charset=euc-kr" %> <%@ page import="java.util.*" %> <%@ page import="org.jdom.*" %> <%@ page import="org.jdom.output.*" %> <%@ page import="org.syaku.util.*" %> <% HashMap hm = new HashMap(); List result = sqlMap.queryForList("select-user-xml", hm); Xml xml = new Xml(); Document document = (Document) xml.iBATISForMake(result); XMLOutputter outputter = new XMLOutputter(); Format format = Format.getPrettyFormat(); format.setEncoding("EUC-KR"); outputter.setFormat(format); response.setContentType("application/xml"); outputter.output(document, response.getWriter()); %>
* 결과
++ 참고사항
http://www.jdom.org/pipermail/jdom-interest/2001-April/004948.html
728x90
반응형
'개발노트 > MyBATIS & iBATIS' 카테고리의 다른 글
iBATIS DBCP 사용하기 (1) | 2010.04.15 |
---|---|
Log4j 를 이용해 로그 출력하기. : iBATIS (2) | 2009.11.28 |
iBATIS 배열 파라메터 처리 : iBATIS Array Parameter (0) | 2009.11.16 |
iBATIS 동적 WHERE 절 다루기 위한 요소 설명 (0) | 2009.04.17 |