论坛首页 Java版 Spring

请问大家都是怎么做大量的查询的?

浏览 5753 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2006-12-29
在我们项目的应用中,我负责做一个综合查询,也就是根据参数执行查询方法。在controller中这样做:
	public ModelAndView XXXquery(HttpServletRequest request,
			HttpServletResponse response) {
		List someModel = YYYManager.ZZZMethod(Object... parameters);
		return new ModelAndView("page", "someModel", someModel);
	}

这样注入一个manager工作就完成了。可是如果要查询的项目有20,30个,或者更多,那么这个controller就要注入这么多的manager,写这么多行类似的代码,很是麻烦,大家如果碰到这种情况都是怎么做的啊?
   
最后更新时间:2007-01-05
我现在的做法是这样的,把要注入的manager,执行的方法,传递的参数,返回的视图、model写到配置文件中:
<items>

	<item name="doLoadUser">
		<operation action="userService" method="loadUser">
			<parameter>userId</parameter>		
		</operation>
		<solution page="view/user" modelName="user" />
	</item>

	<item name="default">
		<operation>
			<parameter match="session">accountId</parameter>	
		</operation>
		<solution page="main/index" modelName="modelName" />
	</item>

	<item name="readMessage">
		<operation action="sysMessageService" method="getMessageByUser">
			<parameter match="no" type="com.km.hibernate.pojo.Message"/>
		</operation>
		<solution page="public/mess/mess_list" modelName="messages" />
	</item>
	
	<item name="readTransLog">
		<operation action="TransService" method="getLogs">
			<parameter>logId</parameter>
			<parameter match="self" type="com.km.hibernate.pojo.Enventr">envent</parameter>
		</operation>
		<solution page="security/trans/log_list" modelName="logs" />
	</item>
	
</items>

然后分别建立三个类,Item.java, Operation.java, Solution.java, 其中Operation.java有一个内部类Parameter.java
   
0 请登录后投票
最后更新时间:2006-12-29
然后完成如题的工作,需要以下几个步骤:
一个XmlParse.java
public final class XmlParse {
     public void initXmlDocument();
     public static void ParseXmlToItem(Element element);
     public static Map getItems();
}
这个类主要用来在容器启动的时候解析xml,然后做成Items的静态Map。
还需要一个RequestHelper.java
public class RequestHelper<T>{
     public Item getItem(HttpServletRequest request);
     public T getBean(HttpServletRequest request, String beanName);
     public Operation analyseParameters(HttpServletRequest request, Operation operation);
}
这个类主要工作是根据用户请求从Items的map中取出一个Item,然后拿到相应的bean,和参数
还需要一个SimpleRequestHandle.java
public class SimpleRequestHandle<T>{
     public void dynamicInvocate(HttpServletRequest request);
     public Solution getSolution();
}

这个类是完成主要工作的类,用来通过反射机制拿到RequestHelper.java的信息,执行方法,并返回solution.
最后controller中这样写:
public ModelAndView query(HttpServletRequest request,
			HttpServletResponse response) {
		requestHandle.dynamicInvocate(request);
		Solution solution = requestHandle.getSolution();
		return new ModelAndView(solution.getPage(), solution.getModelName(),
				solution.getModel());
	}

这样就完成了工作。只需要注入一个SimpleRequestHandle。这样目前我是不必写重复的代码了,不过这样做我觉得怪怪的,每次查询操作都要放射,性能上是不是有坏处,请教大家有没有更好的解决方案 。
   
0 请登录后投票
最后更新时间:2006-12-29
综合查询基本上就是根据输入条件拼出sql
sql搞出来,也就出来了
用ibatis做比较合适,
把sql放在xml并动态生成,查询的返回结果不一定映射到pojo,
放map里很方便
本人弄了个类似的工具专门处理查询,供参考
综合查询工具
   
0 请登录后投票
最后更新时间:2006-12-29
嗯。拼sql是需要的,不过目前我想是调用那个manager,执行dao来完成查询。但是不管调用那个manager代码的结构基本上都是一样的,除了名字不同而已。这就是我的问题所在。
   
0 请登录后投票
最后更新时间:2006-12-29
不过这工具先看看,对ibatis还不是太熟悉
   
0 请登录后投票
最后更新时间:2006-12-29
就是拼SQL。或者拼HQL。附我的一副截图。
  • A219d434-9b9c-4fa5-a4da-aaac58dc09bf-thumb
  • 描述: 综合统计的条件选择页面
  • 大小: 37.2 KB
   
0 请登录后投票
最后更新时间:2006-12-29
汗楼上,这是我见过的最复杂的查询界面...
你们客户真的需要这个?
   
0 请登录后投票
最后更新时间:2006-12-29
together 写道
就是拼SQL。或者拼HQL。附我的一副截图。

你这个查询要多久才能返回结果?一句SQL就能搞定?
   
0 请登录后投票
最后更新时间:2006-12-29
可以做个通用查询,统一一个DAO搞定,不过是拼SQL而已.实际中可以在PO上加注释,表明那些字段需要作为查询条件
   
0 请登录后投票
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐