본문 바로가기
Spring

Ibitis ResultMap XML 자동 생성하기.

by 아이티.파머 2010. 9. 14.
반응형
DB가 결정이 안나서 resultClass를 못쓰게 생겼다. 그래서 생각해낸 안인고로, Class의 field값을 불러와서
이걸로 xml만들어놓으면 그나마 나중에 resultMapping시킬때 편할것 같아 하나 만들어 봤음.
* 완전편한건아니지만 그나마 쓸만함.
package test.jdom;

import java.io.FileWriter;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import com.hynix.ecms.login.model.LoginDTO;

public class CreateXMLDemo {
 /**
  * Reflection(리플레션)사용하여, Class Field 로 XML 문서 형태 만들기
  * @return
  * @throws Exception
  */
 protected static String className="";
 private static Document createDocument() throws Exception {
  
  /*
   * resultMap XML description
   */
  LoginDTO loginDto = new LoginDTO();
  
  Class<? extends LoginDTO> cls = loginDto.getClass();
  Field[] fields = cls.getDeclaredFields();
  List<String> fieldNamesList = new ArrayList<String>();
  
  for (int i = 0; i < fields.length; i++) {
   Field field = fields[i];
   fieldNamesList.add(field.getName());
  }
  
  
  for(int i=0;i<cls.getSimpleName().length();i++){
   String str = String.valueOf(cls.getSimpleName().charAt(i));
   switch (i) {
   case 0:
    className += str.toLowerCase();
    break;
   default:
    className += str;
    break;
   }
  }
  
  Document document = DocumentHelper.createDocument();
  Element root = document.addElement("resultMap");
  root.addAttribute("id", className);
  root.addAttribute("class", cls.getName());
  for (String fieldNames : fieldNamesList) {
   Element result = root.addElement("result");
   result.addAttribute("property", fieldNames);
   result.addAttribute("column", "");
   //result.addText("TextContents");
  }
  return document;
 }
 
 /**
  * XML 문서 파일로 쓰기,
  * @param args
  * @throws Exception
  */
 public static void main(String[] args) throws Exception {
  String locationPath = System.getProperty("user.dir");
  
  Document document = createDocument();
  OutputFormat format = new OutputFormat("\t", true);
  FileWriter out = new FileWriter(locationPath + "/WebContent/z.XML_SAMPLE/"+className+".xml");
  XMLWriter writer = new XMLWriter(out, format);
  writer.write(document);
  out.close();
  
  System.out.println("파일이 생성되었습니다." + locationPath);
 }
}


LoginDTO Class는 Model로써 대충 아무거나 끄적이면 되는거니 따로 적지 않겠다?라고 하려 했으나,
행여 삽질할 사람들을 위해 일부 적어 놓겠음

*LoginDTO

/*
 * $Id: LoginDTO.java,v 1.2 2010/03/24 18:07:10 smrscvs3 Exp $
 * created by    : AN SANG KIL
 * creation-date : 2010. 3. 16.
 * =========================================================
 * Copyright (c) 2010 ManInSoft, Inc. All rights reserved.
 */
package com.hynix.ecms.login.model;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

/**
 * �α��� DTO
 * @author AN SANG KIL
 * @version $Id: LoginDTO.java,v 1.2 2010/03/24 18:07:10 smrscvs3 Exp $
 */
public class LoginDTO {
 private String access_id;
 private String access_pass;
 private String code;
 private String area1;
 private String area2;
 private String area3;

//... getter, setter는 생성하시오

}


나중에 DB Connection 까지해서 DB Field명까지 이어준다면 완성된 resultMap xml이 생성되겠네.
반응형