> Hello World !!!

     

@syaku

자바 iBATIS 결과를 XML 리턴받기 : xmlResultName , java , xml

written by Seok Kyun. Choi. 최석균
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 의 확장 버전이다.

posted syaku blog

* 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

http://syaku.tistory.com