[BINDING] Excel°ú VO°´Ã¼ ¹ÙÀεù
µ¨ÆäÀ̶û Åë½ÅÇÏ¸é¼ multipart·Î xmlÀ» ³Ñ°ÜÁִµ¥ ÀÌ xmlÀ» multipart ÇüÅ·Π¹Þ¾Æ
xml building -> parsing -> VO Biding -> batch InsertÇÏ´Â °úÁ¤ÀÌ´Ù.
ÀÌ °úÁ¤À» ÁøÇàÇϴµ¥ ÀÖ¾î¼ ~ ¾Æ·¡¿Í °°Àº ¶óÀ̺귯¸®¿Í ÆÐÅ°Áö¸¦ »ç¿ëÇß´Ù.
multipartrequesr : con.jar
xml parsing : jdom.2.0.4.jar
VO biding : java reflection
HttpServletRequest¸¦ ¹Þ¾Æ¼ MultipartRequest file·Î ¹Þ¾ÆÁØ´Ù.
MultipartRequest file = new MultipartRequest(request, savePath, 1000*1024*1024, "utf-8");
¿©±â¼ MultipartRequest°¡ °¡Áö´Â »ý¼ºÀÚ´Â request, ±×¸®°í ÆÄÀÏÀÇ ÀúÀå À§Ä¡, Å©±â, ÀÎÄÚµùÀÌ ÀÖ´Ù.
¿©±â¼ Å©±â´Â ÁöÁ¤µÈ Å©±â¸¦ ÃÊ°úÇÏ°Ô µÇ¸é exceptionÀ» ´øÁö°Ô µÈ´Ù~
SAXBuilder sber = new SAXBuilder();
//DOM Æļ¶û »è½º(¾î°¨ÀÌ Á» ÀÌ»ó;;)Æļ°¡ ÀÖÁö¸¸ xmlÀÌ Ä¿ºÃÀÚ
10¸Þ°¡ ¾ÈµÉ°Å¶ó¼ SAX¸¦ ¼±ÅÃÇß´Ù.
String xmlFileNm = savePath+"/"+fileName;
//xmlÆÄÀÏÀÌ ÀúÀåµÈ À§Ä¡·Î °¡¼ ¹Þ¾Æ³õÀº ÆÄÀÏÀ» °¡Á®¿Â´Ù.
Document doc = sber.build(xmlFileNm);
//Document ÇüÅ·ΠxmlÀ» buildÇÏ°í
Element root = doc.getRootElement();
//Document¿¡¼ root Element¸¦ °¡Á®¿Â´Ù.
List<Element> info = root.getChildren();
//Root Element ¾Æ·¡¿¡ ¼ÓÇÑ NodeµéÀ» List ÇüÅ·Π¹Þ¾Æ¿Â´Ù.
³»°¡ ÆĽÌÇÑ xml ¹®¼´Â 4·¹º§ Â¥¸®´Ù.
xmlÀ» Àü¹®ÀûÀ¸·Î ´Ù·ç´Â ºÐµé¤·µð¾ß ¹¹ ÈξÀ ¸¹Àº ¾çÀ» Çڵ鸵ÇÏ°ÚÁö¸¸ ¤»¤»¤»
³ª´Â ÇÑ drwng°¡ Ä¿ºÃÀÚ °íÀÛ 5000°Ç ?
À½.. ¾ê±â¸¦ °è¼ÓÇϸé
Àú·± Çü½ÄÀÇ xml µ¥ÀÌÅ͸¦ ¾Æ·¡¿Í °°ÀÌ ÆĽÌÇß´Ù.
for(int i=0; i<info.size(); i++){
if(hasChildren(info.get(i))) {
List<Element> drwng = info.get(i).getChildren();
HashMap<String, String> infoMap = new HashMap<String, String>();
for(int j=0; j<drwng.size(); j++){
if(hasChildren(drwng.get(j))) {
List<Element> docInfo = drwng.get(j).getChildren();
for(int l=0; l<docInfo.size(); l++) { //ÇÏÀ§ ³ëµåµéÀ» ¹Ýº¹ÇÔ
infoMap.put(docInfo.get(l).getName().replace("-", "").toUpperCase(), docInfo.get(l).getText()); }
} else {
infoMap.put(drwng.get(j).getName().replace("-", "").toUpperCase(), drwng.get(j).getText }
}
infoList.add(infoMap);
} else {
object[i] = info.get(i).getText();
}
}
ÀÌ Äڵ尡 º¹ÀâÇØ º¸ÀÌ½Å´Ù¸é ¸Â½À´Ï´Ù. XD »ç½Ç Jdom óÀ½½áºÁ¿ä. ¾Æ´Ï ½áºÃÀ»Áöµµ ¸ð¸£°Ú³×¿ä ¤»¤»
Node List¸¦ ¹Þ¾Æ¼ if(hasChildren(info.get(i))) ¸¦ ÅëÇؼ Àڽijëµå°¡ ÀÖÀ¸¸é ~ °è¼Ó 4Lvl±îÁö ³»·Á°¡´Â ÇüÅÂÀÔ´Ï´Ù. °¢ ´Ü°èº°·Î ÀÚ½ÄÀÌ ¾ø´Â Node¶ó¸é ±×³É ÇØ´ç NodeÀÇ Text Á¤º¸(info.get(i).getText();)¸¸ °¡Á®¿À´Â ÇüŸ¦ ÇÏ°í ÀÖ¾î¿ë~
Lvl2¿¡¼ ÇÊ¿äÇÑ Á¤º¸¸¸ Object[0][1]¿¡ ´ã°í Object[2]¿¡´Â ·¹º§¿¡ »ó°ü¾øÀÌ 3·¹º§ ÀÌÇÏ¿¡ ÀÖ´Â ¸ðµç text Á¤º¸¸¦ MapÇüÅ·ΠaddÇÑ List¸¦ ´ã½À´Ï´Ù. ±×¸®°í return ~
ÀÚ ÀÌÁ¦ ~ XmlÀ» parsing Çß¾î¿ä
ÀÏ´Ü ¸ðµâÈ´Â Á¦²¸µÎ°í ³»°¡ ´ã°í ½ÍÀº VO°´Ã¼¿¡ ÁöÁ¤Çؼ ºó¿¡ Mapping ÇÏ´Â ÀÛ¾÷À» ÇÏ°Ú½À´Ï´Ù.
»ç½Ç À̰͵µ óÀ½ÇغÁ¿ä XD
Class<?> c = Class.forName("com.ese.domain.DrwngAllInfo");
//DrwngAllInfo¶ó´Â VOÀÇ °´Ã¼ Á¤º¸¸¦ °¡Á®¿É´Ï´Ù.
Method[] methods = c.getMethods();
//c¶ó´Â °´Ã¼ÀÇ ¸ðµç ¸Þ¼µå ¸®½ºÆ®¸¦ °¡Á®¿Í¿ä
ArrayList<DrwngAllInfo> drwngList = new ArrayList<DrwngAllInfo>();
try {
for(HashMap<String, String> list : mapList) {
DrwngAllInfo target = (DrwngAllInfo) c.newInstance();
//¾Æ±î ¸»¾¸µå¸°´ë¿À xmlÀÇ drwng´Â ¿©·¯°³°¡ ÀÖÀ» ¼ö ÀÖ¾î¿ä Áï, VO °´Ã¼¸¦ »ý¼ºÇØÁà¾ßÇØ¿ä.
c °´Ã¼¸¦ ÅëÇؼ °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù.
Iterator iter = list.keySet().iterator();
//¾Æ±î xml Á¤º¸¿¡¼ ´ã¾Ò´ø map¿¡¼ key Á¤º¸¸¦ °¡Áö°í ¿ÀÁÒ
while(iter.hasNext()) {
String key = (String) iter.next();
for(int i=0; i<methods.length; i++) {
//Methods ±æÀ̸¸Å ¹Ýº¹
if(methods[i].getName().startsWith("set")) {
//¸Þ¼µå°¡ "set"À¸·Î ½ÃÀÛÇÒ¶§ Áï, setter¸¦ ã½À´Ï´Ù.
if(methods[i].getName().replace("set", "").toUpperCase().equals(key.replace("_", "").toUppe
rCase())){
//setterÁß¿¡ setÀ» Á¦¿ÜÇÑ ³ª¸ÓÁö À̸§ÀÌ mapÀÇ keyÀ̸§°ú ºñ±³¸¦ ÇÕ´Ï´Ù.
String colunm = methods[i].getName().replace("set", "").toUpperCase();
//ÇØ´ç setter ¸Þ¼µåÀÇ setÀ» Á¦¿ÜÇÏ°í String °´Ã¼¿¡ ´ã¾Æ¿ä.
Class<?>[] types = methods[i].getParameterTypes();
//¸Þ¼µå¸¦ ½ÇÇà½ÃÅ°´Âµ¥ ÀÖ¾î¼ parameterÇüÀÌ ÇÊ¿äÇؼ ÇØ´ç ¸Þ¼µåÀÇ typeÀ» °¡Á®¿Í¿ä.
Method m = c.getMethod(methods[i].getName(), types[0]);
//½ÇÇàµÇ¾î¾ß ÇÒ ¸Þ¼µå¸í°ú ±× ¸Þ¼µå°¡ °¡Áø paramater Çü½ÄÀ» ÁÝ´Ï´Ù.
if(types[0].toString().equals("int"))
m.invoke(target, Integer.parseInt(list.get(key)));
else
m.invoke(target, list.get(key));
//invoke¸¦ ÅëÇØ target Ŭ·¡½º¿¡ ÁöÁ¤µÈ ¸Þ¼µå¸¦ ½ÇÇà½Ãŵ´Ï´Ù.
}
}
}
}
drwngList.add(target);
}
} catch(Exception e) {
throw e;
}
return drwngList;
}
°´Ã¼ ¹ÙÀεù±îÁö ³¡³µ¾î¿ä ~
ArrayList<DrwngAllInfo> ÇüÅ·ΠReturn µË´Ï´Ù.
ÀÌ·¸°Ô ÇÑ ÀÌÀ¯´Â ±âÁ¸¿¡ »ç¿ëÇÏ´ø ¸Þ¼µå¸¦ ¾²±â À§Çؼ ÀÌ·¸°Ô ÀÛ¾÷ÇÑ°ÅÁÒ(ÈÄÈÄ.. »ç½Ç »õ·Î Â¥±â ±×·¡¼ ±×³É ........ ) ¸¹Àº µ¥ÀÌÅ͸¦ ·çÇÁ¸¦ µ¹¸é¼ ó¸®ÇØ¾ß Çϱ⠶§¹®¿¡ Á¤È®ÇÏÁö È¿À²¼ºÀ» µûÁöÀÚ¸é
ÁÁÁø ¾Ê¾Æ¿ä Àúµµ ¾Ð´Ï´Ù (__)(--) ±×·¡µµ ³ª¸§ parsingÇÏ´Â ºÎºÐÀ̶û VO BidingÇÏ´Â ºÎºÐÀº ºÐ¸®Çؼ
±¸ÇöÇÏ´Ï ¸ð.. ¸ðµà ¤© È£ .... ¤¸¤µ
º¸³Ê½º·Î node°¡ ÀÚ½Ä node¸¦ °¡Áö°í ÀÖ´ÂÁö üũÇÏ´Â ¸Þ¼µå~
public boolean hasChildren(Element el) {
boolean hasChild = false;
List<Element> list = el.getChildren();
if(list.size() > 0) {
hasChild = true;
}
return hasChild;
}