|
锁定老贴子 主题:请问大家都是怎么做大量的查询的?
精华帖 (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,写这么多行类似的代码,很是麻烦,大家如果碰到这种情况都是怎么做的啊? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间: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 |
|
| 返回顶楼 | |
|
最后更新时间: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。这样目前我是不必写重复的代码了,不过这样做我觉得怪怪的,每次查询操作都要放射,性能上是不是有坏处,请教大家有没有更好的解决方案 。 |
|
| 返回顶楼 | |
|
最后更新时间:2006-12-29
综合查询基本上就是根据输入条件拼出sql
sql搞出来,也就出来了 用ibatis做比较合适, 把sql放在xml并动态生成,查询的返回结果不一定映射到pojo, 放map里很方便 本人弄了个类似的工具专门处理查询,供参考 综合查询工具 |
|
| 返回顶楼 | |
|
最后更新时间:2006-12-29
嗯。拼sql是需要的,不过目前我想是调用那个manager,执行dao来完成查询。但是不管调用那个manager代码的结构基本上都是一样的,除了名字不同而已。这就是我的问题所在。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-29
不过这工具先看看,对ibatis还不是太熟悉
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-29
就是拼SQL。或者拼HQL。附我的一副截图。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-29
汗楼上,这是我见过的最复杂的查询界面...
你们客户真的需要这个? |
|
| 返回顶楼 | |
|
最后更新时间:2006-12-29
together 写道 就是拼SQL。或者拼HQL。附我的一副截图。
你这个查询要多久才能返回结果?一句SQL就能搞定? |
|
| 返回顶楼 | |
|
最后更新时间:2006-12-29
可以做个通用查询,统一一个DAO搞定,不过是拼SQL而已.实际中可以在PO上加注释,表明那些字段需要作为查询条件
|
|
| 返回顶楼 | |











