SPRING
2019.01.13 / 22:17

[BINDING] Excel°ú VO°´Ã¼ ¹ÙÀεù

hanulbit
Ãßõ ¼ö 261

µ¨ÆäÀ̶û Åë½ÅÇϸ鼭 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;
}