两分钟搞定SSH+ExtJS框架下字典表的前后台构建

本文介绍了一个使用反射机制实现的通用字典表增删改查(CRUD)模块,该模块能够针对不同字典表进行操作,极大地简化了开发流程并提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大四还未毕业,项目也才跟着软件实验室做了两三个,应该算初学者吧,最近空闲时期,把项目的架构好好研究了一番,不过也比较初级的,发现有些地方可以优化,比如字典表的CRUD构建,之前字典表的构建都是完全手写,各种从原先的项目中复制粘贴,然后修改名称,我发现这么做很耗时,于是用反射机制构建了一套通用模块

添加字典表方法

	public boolean addDictionaryObject(Object ob) throws Exception{
		//通过字典表信息名称查询是否已经存在该字典表信息,如果存在返回false,不存在则进行添加 
		String className = ob.getClass().getName().substring(ob.getClass().getName().lastIndexOf(".")+1);
		String tableName =className.substring(0,1).toLowerCase()+className.substring(1);
		Class b = ob.getClass();
		Method tAge = b.getMethod("getName");
		Method qAge = b.getMethod("setState", Integer.class);
		qAge.invoke(ob, SystemState.USE);
		String dictionaryObjectName = (String) tAge.invoke(ob);
		List<Object> dictionaryObjectList = (List<Object>) dictionaryObjectDAO.findSpecificByName(dictionaryObjectName,className);
		if(dictionaryObjectList.size() == 0){
			try {
					Class c = Class.forName("com.dictionary.DAO."+className+"DAO");
					Object obb = new ClassPathXmlApplicationContext("applicationContext.xml").getBean(tableName+"DAO");
					Method sAge = c.getMethod("save", ob.getClass());
					sAge.invoke(obb, ob);
			//	log.info(LogHelper.userLog("insert class<"+className+">["+dictionaryObjectName+"]"));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return true;
		}
		else 
			return false;
	}


删除字典表方法(批量删除)

public boolean delDictionaryObject(String delData,String className) throws Exception{
		 String[] ids = delData.split(",");
		 String objectName ="";
		 for (int i = 0; i < ids.length; i++) {
			 Object object =dictionaryObjectDAO.findSpecificById(ids[i], className); 
			 Class c = Class.forName("com.dictionary.domain."+className);
			 Method rAge = c.getMethod("setState", Integer.class);
			 Method sAge = c.getMethod("getName");
			 rAge.invoke(object, SystemState.NOUSE);
			 String name =(String) sAge.invoke(object);
			 if(objectName.equals("")){
				 objectName = objectName + name ;
			 }
			 else 
				objectName = objectName + ","+name ;
		 }
		// log.info(LogHelper.userLog("delete class<"+className+">["+objectName+"]"));
		 return true;
	}

遍历字典表方法

public Map<String, Object> queryDictionaryObject(Integer start, Integer limit,String className){
		return dictionaryObjectDAO.queryDictionaryObject(start,limit,className);
	}


修改字典表方法

public boolean updateDictionaryObject(Object ob) throws Exception{
		String className = ob.getClass().getName().substring(ob.getClass().getName().lastIndexOf(".")+1);
		String tableName =className.substring(0,1).toLowerCase()+className.substring(1);
		Class b = ob.getClass();
		Method tAge = b.getMethod("getName");
		Method rAge = b.getMethod("getId");
		String dictionaryObjectName = (String) tAge.invoke(ob);
		String dictionaryObjectId = (String) rAge.invoke(ob);
		List<Object> dictionaryObjectList = (List<Object>) dictionaryObjectDAO.findSpecificByName(dictionaryObjectName,className);
		if(dictionaryObjectList.size() >0){
			return false;
		}
		else{
			Object obb = dictionaryObjectDAO.findSpecificById(dictionaryObjectId, className);
				if(obb!=null){
					Class c = ob.getClass();
					Method sAge = c.getMethod("setName", String.class);
					Method uAge = c.getMethod("getName");
					String obName  = (String)uAge.invoke(ob);
					sAge.invoke(obb, obName);
					//log.info(LogHelper.userLog("修改了角色名为"+roleTemp.getName()+"的名称"));
					return true;
				}
				else
					return false;
		}
	}


通过Id找到字典表对象

	public Object findDictionaryObjectById(Object ob,String className) throws Exception{
		Class b = ob.getClass();
		Method rAge = b.getMethod("getId");
		String dictionaryObjectId = (String) rAge.invoke(ob);
		return dictionaryObjectDAO.findSpecificById(dictionaryObjectId,className);
	}
	

 

 

然后是对应的dao层方法

public Object findSpecificById(String dictionaryObjectId,String className){
		try{
			String queryString = "from " + className + " as t where t.state="+SystemState.USE+" and " +
					"t.id=:dictionaryObjectId";
			Query query = getSession().createQuery(queryString);
			query.setString("dictionaryObjectId", dictionaryObjectId);
			return query.uniqueResult();
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			throw e;
			}
	}


 

public List<Object> findSpecificByName(String dictionaryObjectName,String className){
		try{
			String queryString = "from "+className +" as t where t.name =:name and t.state ="+SystemState.USE;
			Query query = getSession().createQuery(queryString);
			query.setString("name", dictionaryObjectName);
			return query.list();
		} catch (HibernateException e) {
			// TODO Auto-generated catch block
			throw e;
			}
	}


 

public Map<String, Object> queryDictionaryObject(Integer start, Integer limit , String className){
		Map<String, Object> map = new HashMap<String, Object>();
		try { 
			String queryString = "from " +className+ "  as t where t.state=:state ";
			String countString = "select count(*) from " +className+ " as t where t.state=:state ";
			Query queryObject = getSession().createQuery(queryString);
			Query countObject = getSession().createQuery(countString);
			queryObject.setFirstResult(start);
			queryObject.setMaxResults(limit);
			queryObject.setInteger("state", SystemState.USE);
			countObject.setInteger("state",SystemState.USE);
			List<Object> objectList = queryObject.list();
			Long count = (Long) countObject.uniqueResult();
			map.put("list", objectList);
			map.put("count", count);
			return map;
		} catch (HibernateException e) {
			throw e;
		}
	}

 

OK,具体的内容都在上面的方法中,这样做的目的就是可以通用所有的字典表,只需要给service传过去一个对象,就能完成CRUD全部操作,action js jsp也都是已经写好了,用的时候直接替换里面已经设定好要替换的名称就行,这样下来,做完一个字典表,只需复制粘贴action,js,jsp,然后替换名称即可,非常方便。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值