SSH通过xml格式进行表数据初始化的添加

来源:互联网 发布:java的md5加密 编辑:程序博客网 时间:2024/06/06 01:40

Service业务接口类:

package com.han.service;/** * @author hanwei * @date:2016-8-24 上午10:05:03 */public interface InitService extends GenericServ {/** * 通过xml初始化数据 * @param fileName */public void addInitEntityByXml(String fileName);}

Service业务接口实现类:

package com.han.service.impl;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.List;import javax.inject.Inject;import org.dom4j.Attribute;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;import org.springframework.beans.BeansException;import org.springframework.beans.factory.BeanFactory;import org.springframework.stereotype.Service;import com.han.dao.impl.GenericDaoImpl;import com.han.error.GlobalException;import com.han.service.InitService;import com.sun.org.apache.commons.beanutils.BeanUtils;/** * @author hanwei * @date:2016-8-24 上午10:05:31 */@Service("initService")public class InitServiceImpl extends GenericDaoImpl implements InitService {// 注入Spring工厂用于加载实体类@Injectprivate BeanFactory beanFactory;/** * 获得初始化xml文件数据对象Document * @param fileName 文件名称 * @return */private Document readDocument(String fileName) {Document document = null;SAXReader saxReader = null;try {// 创建xml解析对象saxReader = new SAXReader();// 获取文件路劲 该init.xml文件放在WebRoot/init/init.xmlString filePath = InitServiceImpl.class.getClassLoader().getResource("").toString().replace("WEB-INF/classes/", "");document = saxReader.read(filePath + "init/init.xml");} catch (DocumentException e) {e.printStackTrace();}return document;}/** * 解析XMl文件进行数据的添加处理 * @param fileName 文件名称 */@Overridepublic void addInitEntityByXml(String fileName) {Document readDocument = this.readDocument(fileName);Element root = null;try {if (readDocument != null) {// 获取根元素root = readDocument.getRootElement();// 获取包名String pname = root.attributeValue("package");// 根据当前元素节点进行寻找@SuppressWarnings("unchecked")List<Element> initEntitys = (List<Element>) root.selectNodes("/entitys/initEntity");for (Element e : initEntitys) {// 判断该实体是否存在 0:不存在进行添加 1:存在排除if (e.attributeValue("exist") == "1") {continue;} else {// 获取类名String cname = e.attributeValue("class");cname = pname + "." + cname;// 获取方法String method = e.attributeValue("method");// 获取所有的添加的实体@SuppressWarnings("unchecked")List<Element> entitys = (List<Element>) e.selectNodes("entity");addElements(cname, method, entitys);}}}} catch (Exception e) {e.printStackTrace();}}/** * 解析出每个元素节点的数据进行添加 * @param cname 包名.类名 com.han.model.OrgType * @param method 方法名 <initEntity exist="0" class="OrgType" method="orgTypeService.addOrgType"> * @param entitys 添加的元素集合 <entity name="学校" sn="XX"></entity> */private void addElements(String cname, String method, List<Element> entitys) {for (Element e : entitys) {addElement(cname, method, e);}}/** * 添加元素 * @param cname 包名.类名 * @param method 方法名 * @param e 添加的元素 */private void addElement(String cname, String method, Element e) {Object obj = null;Object service = null;Method m = null;try {// 通过反射创建对象obj = Class.forName(cname).newInstance();// 拆分method="orgTypeService.addOrgType"获取业务service类名和方法String[] ms = method.split("\\.");if (ms.length != 2) {throw new GlobalException("方法格式不正确!");}String sname = ms[0];String mname = ms[1];@SuppressWarnings("unchecked")List<Attribute> attributes = (List<Attribute>) e.attributes();for (Attribute attribute : attributes) {// 元素属性名称String name = attribute.getName();// 元素属性值String value = attribute.getValue();try {// 导入的是com.sun.org.apache.commons.beanutils.BeanUtils,进行对象属性的赋值操作// 第一个参数:对象,第二个参数:属性,第三个参数:值BeanUtils.copyProperty(obj, name, value);} catch (IllegalAccessException e1) {e1.printStackTrace();} catch (InvocationTargetException e1) {e1.printStackTrace();}}// 通过Spring工厂获取业务逻辑类serviceservice = beanFactory.getBean(sname);// 获取service方法 ,第一个参数:方法名称 ,第二个:参数类型m = service.getClass().getMethod(mname, obj.getClass());// 回调方法m.invoke(service, obj);} catch (BeansException e1) {e1.printStackTrace();} catch (SecurityException e1) {e1.printStackTrace();} catch (InstantiationException e1) {e1.printStackTrace();} catch (IllegalAccessException e1) {e1.printStackTrace();} catch (ClassNotFoundException e1) {e1.printStackTrace();} catch (NoSuchMethodException e1) {e1.printStackTrace();} catch (IllegalArgumentException e1) {e1.printStackTrace();} catch (InvocationTargetException e1) {e1.printStackTrace();}}}



测试类:

package com.han.test;import javax.inject.Inject;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.orm.hibernate4.SessionHolder;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.transaction.support.TransactionSynchronizationManager;import com.han.service.InitService;/** * @author hanwei * @date:2016-8-24 上午10:53:49 */@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("/beans.xml")public class CURDTest {@Injectprivate InitService initService;@Injectprivate SessionFactory sessionFactory;@Beforepublic void setUp() {// 此时最好不要使用Spring的Transactional来管理,因为dbunit是通过jdbc来处理connection,再使用spring在一些编辑操作中会造成事务shisuSession s = sessionFactory.openSession();TransactionSynchronizationManager.bindResource(sessionFactory,new SessionHolder(s));}@Afterpublic void tearDown() {SessionHolder holder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);Session s = holder.getSession();s.flush();TransactionSynchronizationManager.unbindResource(sessionFactory);}@Testpublic void testXml() {initService.addInitEntityByXml("init.xml");}}

XML文件:
<?xml version="1.0" encoding="UTF-8"?><entitys package="com.han.model">  <initEntity exist="0" class="OrgType" method="orgTypeService.addOrgType">    <entity name="学校" sn="XX"></entity>    <entity name="分校" sn="FX"></entity>    <entity name="校领导办" sn="XLDB"></entity>    <entity name="行政部门" sn="XZBM"></entity>    <entity name="教学部门" sn="JXBM"></entity>    <entity name="专业" sn="ZY"></entity>    <entity name="班级" sn="BJ"></entity>  </initEntity></entitys>



0 0
原创粉丝点击