- 浏览: 1518487 次
- 性别:
- 来自: 厦门
博客专栏
-
Spring 3.x企业实...
浏览量:461871
文章分类
最新评论
-
JyeChou:
学习Spring必学的Java基础知识(1)----反射 -
hhzhaoheng:
...
《Spring4.x企业应用开发实战》光盘资料下载 -
renlongnian:
//assertReflectionEquals(user1, ...
单元测试系列之3:测试整合之王Unitils -
骑着蜗牛超F1:
huang_yong 写道我的经验是,只需定义三层:1.ent ...
Spring的事务管理难点剖析(2):应用分层的迷惑 -
wangyudong:
工具地址貌似更新了哦https://github.com/Wi ...
几种常用的REST webservice客户端测试工具
接受若干查询条件的DAO查询方法接口在实际应用中,大家不知道是如何设计,下面是我所了解的4种定义方法:
1)为查询参数定义对象,如:
queryOrder(OrderQueryParam oqp)
OrderQueryParam为每一个查询条件项定义一个属性如:
Date startTime
Date endTime
int orderNo
int deptId
这种方式的优点是直观,接口清晰且稳定,但是需要定义大量的查询参数对象,比较麻烦。
2)用一个Map封装所有查询条件,如:
queryOrder(Map filterMap)
每一个查询条件项对应filterMap中一个元素
key value
----------------
startTime 20060101
endTime 20061201
deptId 1002
这种方式的接口签名也是稳定的,其他的优点和缺点正好和1)点相反
3)每一个条件项对应一个入参,如:
queryOrder(Date startTime,Date endTime,int orderNo,int deptId)
这种方式的接口签名不稳定,假如要加一个userId的条件,接口就得改了,但是接口也是比较清晰的。
4)使用JDK5.0中提供的不定数入参,如:
queryOrder(String hql ,Object... args)
在该中方法中:(需要注意args的顺序和hql中变量的顺序一致),组装Hql的核心代码如下:
Query query = getSession().createQuery(hql);
for (int i = 0; i < args.length; i++) {
query.setParameter(i, args[i]);
}
这种方式接口签名也是稳定的,不过接口也是不清晰。
不知道大家在实践中还有没有其他好的方法,欢迎抛玉!!
不用什么高手
以前用map传ibites也是有时间段的....
我也能写但没有意义
?不见得
用来查询用pojo 也可以办到
或继承后加几个参数吧。。。。 不见得,Map 作参数虽然灵活了,稳定了。
但是其缺点同样显而易见:方法本身的成功运行
完全依赖于Map 中被放入的东西,当Map中被意外的放入的
不该放入的参数或者缺少了一个参数,会出现令人讨厌的难以
查找的异常。
Map只是适合于查询条件本身就是灵活的,不确定的情况。
当查询接口本身就是确定的情况下应该使用对象参数查询,否则
很容易造成Map被滥用的情况
?不见得
用来查询用pojo 也可以办到
或继承后加几个参数吧。。。。
这种方式不太好吧,接口不够清晰,而且需要其他类的配合,不够内聚,我觉得hql倒是不一定要作为入参,但查询条件最好要作为入参。
1)为查询参数定义对象,如:
queryOrder(OrderQueryParam oqp)
OrderQueryParam为每一个查询条件项定义一个属性如:
Date startTime
Date endTime
int orderNo
int deptId
这种方式的优点是直观,接口清晰且稳定,但是需要定义大量的查询参数对象,比较麻烦。
2)用一个Map封装所有查询条件,如:
queryOrder(Map filterMap)
每一个查询条件项对应filterMap中一个元素
key value
----------------
startTime 20060101
endTime 20061201
deptId 1002
这种方式的接口签名也是稳定的,其他的优点和缺点正好和1)点相反
3)每一个条件项对应一个入参,如:
queryOrder(Date startTime,Date endTime,int orderNo,int deptId)
这种方式的接口签名不稳定,假如要加一个userId的条件,接口就得改了,但是接口也是比较清晰的。
4)使用JDK5.0中提供的不定数入参,如:
queryOrder(String hql ,Object... args)
在该中方法中:(需要注意args的顺序和hql中变量的顺序一致),组装Hql的核心代码如下:
Query query = getSession().createQuery(hql);
for (int i = 0; i < args.length; i++) {
query.setParameter(i, args[i]);
}
这种方式接口签名也是稳定的,不过接口也是不清晰。
不知道大家在实践中还有没有其他好的方法,欢迎抛玉!!
评论
21 楼
抛出异常的爱
2007-03-11
gaopu202 写道
可以设计为一个示例查询不,它可以自动处理空的参数,但是要查询一个时间段内的数据还需要一个高手来解决
不用什么高手
以前用map传ibites也是有时间段的....
我也能写但没有意义
20 楼
jameswei
2007-03-10
个人感觉用Map封装查询参数不错.
以前在项目上用过类似lz的solution 1:
将一些基本的查询参数放入查询参数类中,
如果有其它特定参数,可extends之.
以前在项目上用过类似lz的solution 1:
将一些基本的查询参数放入查询参数类中,
如果有其它特定参数,可extends之.
19 楼
gaopu202
2007-03-04
可以设计为一个示例查询不,它可以自动处理空的参数,但是要查询一个时间段内的数据还需要一个高手来解决
18 楼
retreat
2007-03-02
我通常设计成如下的结构!
有2个关键
1:把查询条件封装起来
2:保持接口的健壮,也就是说保证业务接口关注方向
Dao设计
这样把Query数据封装在ObjectQueryHandler这个模块组里,把Query逻辑封装在ObjectQueryFilter模块组里.处理起来非常灵活,还有一个非常吸引人的特性就是可以把工作丢给别人!由于你提供的只是封装,具体实现有每个开发人员自己掌握,自己的工作量少了很多,别人也不会太介意.同时也可以消除统一接口上引起的效率和业务接口被滥用的问题.
比如
来加强一下我某一类的结构,而在只需要通过一项申明式的字段来标示.
有2个关键
1:把查询条件封装起来
2:保持接口的健壮,也就是说保证业务接口关注方向
public class ObjectQueryHandleFactory { public ObjectQueryHandler openQuery() { ... }; }
public class ObjectQueryFilterFactory { public ObjectQueryFilter openFilter() { ... }; }
public class ObjectQueryHandler{}
public class ObjectQueryFilter{}
public class PersonQueryHandler extends ObjectQueryHandler{}
public class PersonQueryFilter extends ObjectQueryFilter{}
public class StreatQueryHandler extends ObjectQueryHandler{}
public class StreatQueryFilter extends ObjectQueryFilter{}
Dao设计
ObjectDaoGet(ObjectQueryHandler oqh, ObjectQueryFilter oqf) {};
这样把Query数据封装在ObjectQueryHandler这个模块组里,把Query逻辑封装在ObjectQueryFilter模块组里.处理起来非常灵活,还有一个非常吸引人的特性就是可以把工作丢给别人!由于你提供的只是封装,具体实现有每个开发人员自己掌握,自己的工作量少了很多,别人也不会太介意.同时也可以消除统一接口上引起的效率和业务接口被滥用的问题.
比如
public class dynaProxyHandleBuffer()
来加强一下我某一类的结构,而在只需要通过一项申明式的字段来标示.
ObjectQueryHandler.setPropertys(new ObjectrProperty(){.......})
17 楼
lyp2002924
2007-03-01
JDK5.0中提供的不定数入参,是什么概念啊?
16 楼
chenxu
2007-03-01
抛出异常的爱 写道
刑天战士 写道
用Map作参数才是王道!用对象的话太死板
?不见得
用来查询用pojo 也可以办到
或继承后加几个参数吧。。。。
但是其缺点同样显而易见:方法本身的成功运行
完全依赖于Map 中被放入的东西,当Map中被意外的放入的
不该放入的参数或者缺少了一个参数,会出现令人讨厌的难以
查找的异常。
Map只是适合于查询条件本身就是灵活的,不确定的情况。
当查询接口本身就是确定的情况下应该使用对象参数查询,否则
很容易造成Map被滥用的情况
15 楼
抛出异常的爱
2007-01-16
刑天战士 写道
用Map作参数才是王道!用对象的话太死板
?不见得
用来查询用pojo 也可以办到
或继承后加几个参数吧。。。。
14 楼
letle
2007-01-16
可以用一个基类的pojo做参数
13 楼
lovevirus
2006-11-05
我一直用对象来传递的,一般都是判断其属性是否为空或者大于零,成立我就根据这个条件来查询,这样对一般的查询都可以用一次做完.至于一些类似报表的查询,一个查询一个方法,呵呵
12 楼
stamen
2006-11-03
marshal402 写道
直接queryOrder(String hql) ,在接口之外抽象形成hql语句生成器,这个生成器可以接受参数对象或者Map,但是参数命名遵循一定规范,生成查询语句。
这种方式不太好吧,接口不够清晰,而且需要其他类的配合,不够内聚,我觉得hql倒是不一定要作为入参,但查询条件最好要作为入参。
11 楼
kimfly
2006-11-03
List query(String sql,Map conditions); 方法不错,接口比较稳定。
10 楼
刑天战士
2006-11-03
用Map作参数才是王道!用对象的话太死板
9 楼
daquan198163
2006-11-03
8 楼
deafwolf
2006-11-03
用iBatis,在bean和dao一对一的情况下,直接用bean做参数,statement用动态的,这样就不用考虑参数的问题。
如果是多参数跨表查询,我认为还是用Map好一点
也可以自定义一个参数对象,稳定的部分用bean,不稳定的部分用Map
如果是多参数跨表查询,我认为还是用Map好一点
也可以自定义一个参数对象,稳定的部分用bean,不稳定的部分用Map
7 楼
fly_ever
2006-11-03
查询的判断条件,结果排序等其他的要求,按上面那些方法就不能实现了。
6 楼
cayenne
2006-11-03
Map做参数传递在Spring的DAO包中用得很多
5 楼
pedestrian_I
2006-11-03
利用hibernate的QBE查询,传入一个对象为参数。只是不能查这个对象的id字段,既是数据库中的主键。
marshal402的sql生成器方式不错,只是如何抽象设计好,值得讨论。
marshal402的sql生成器方式不错,只是如何抽象设计好,值得讨论。
4 楼
marshal402
2006-11-03
这样这个接口的职责也会更清晰。
3 楼
marshal402
2006-11-03
直接queryOrder(String hql) ,在接口之外抽象形成hql语句生成器,这个生成器可以接受参数对象或者Map,但是参数命名遵循一定规范,生成查询语句。
2 楼
leyen
2006-11-03
List query(String sql,Map conditions);
这样设计如何?
这样设计如何?
发表评论
-
一个常见的Spring IOC疑难症状
2013-07-25 14:14 4960Case 请看下面的IOC实例: 1)Aa ... -
mybatis3.1分页自动添加总数
2013-07-08 21:11 22713问题 1.mybatis默认分页是内存分页的,谁用谁崩溃啊! ... -
学习Spring必学的Java基础知识(9)----HTTP请求报文
2012-06-09 16:02 13870引述要学习Spring框架的技术内幕,必须事先掌握一些基本的J ... -
学习Spring必学的Java基础知识(4)----XML基础知识
2012-05-12 15:33 8489引述要学习Spring框架的 ... -
学习Spring必学的Java基础知识(3)----PropertyEditor
2012-05-12 15:13 16762引述要学习Spring框架的 ... -
学习Spring必学的Java基础知识(2)----动态代理
2012-05-02 13:03 9621引述要学习Spring框架的 ... -
学习Spring必学的Java基础知识(1)----反射
2012-04-25 13:57 89576引述要学习Spring框架的技术内幕,必须事先掌握一些基本的J ... -
透透彻彻IoC(你没有理由不懂!)
2012-04-18 11:01 94051引述:IoC(控制反转:I ... -
单元测试系列之5:使用unitils测试Service层
2012-04-14 10:48 18331引述:Spring 的测试框架为我们提供一个强大的测试环境,解 ... -
如何用Spring读取JAR中的文件
2012-04-13 17:22 18291使用如下方式读取JAR中的文件出错 类路径下 ... -
单元测试系列之3:测试整合之王Unitils
2012-04-09 14:11 15543引述:程序测试对保障应用程序正确性而言,其重要性怎么样强调都不 ... -
单元测试系列之1:开发测试的那些事儿
2012-03-28 12:52 9959引述:程序测试对保障应用程序正确性而言,其重要性怎 ... -
单元测试的那些事儿
2012-03-28 12:48 2------------------------------- ... -
Spring 3.0的新功能
2012-03-26 09:30 71282009年9月发布Spring ... -
Spring的事务管理难点剖析(7):数据连接泄漏
2012-03-07 10:53 6763底层连接资源的访问问题 对于应用开发者来说,数据连接泄 ... -
Spring的事务管理难点剖析(6):特殊方法成漏网之鱼
2012-03-07 09:28 4502哪些方法不能实施Spring ... -
Spring的事务管理难点剖析(5):联合军种作战的混乱
2012-03-07 09:10 7811Spring事务管理器的应对 Spring抽象的DA ... -
Spring的事务管理难点剖析(4):多线程的困惑
2012-03-06 17:30 16853Spring通过单实例化Bean简化多线程问题 由于 ... -
Spring的事务管理难点剖析(3):事务方法嵌套调用的迷茫
2012-03-06 17:23 10533Spring事务传播机制回顾 ... -
Spring的事务管理难点剖析(2):应用分层的迷惑
2012-03-06 16:59 5046Web、Service及DAO三 ...
相关推荐
紧接着我们将开始探索NHibernate的主要功能,包括查询,事务处理,用户定制的接口。我们同时展示了基本设置和高级设置,让你可以通过日志更深入的了解NHibernate背后是如何工作的。 第三章以一定的速度告诉你...
下一个最高级抽象是 BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。 BeanFactory 支持两个对象模型。 □ 单态 模型提供了具有特定名称的对象的...
有经验的面向对象设计者的确能做出良好的设计,而新手则面对众多选择无从下手,总是求助于以前使用过的非面向对象 技术。新手需要花费较长时间领会良好的面向对象设计是怎么回事。有经验的设计者显然知道一些新手所...
书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的...
我们以Jive的ForumFactory为例,这个例子在前面的Singleton模式中我们讨论过,现在再讨论其工厂模式: public abstract class ForumFactory { private static Object initLock = new Object(); private static ...
编译已有代码,建立测试服务器虚拟目录,上传编译文件,初始化角色信息,整理开会讨论的个性模块变动和需求 编写获取页面标题函数,编写页面模块导航函数 弹出消息框代码编写 设计发送/接收消息模块的数据结构 ...
Flex Builder 提供了一个可视化的编辑器,通过简单的拖拽,一个毫无经验的开发人员也能够设计出漂亮的布局。如果熟悉一点 XML 的知识,编辑 MXML 也并非难事。我们设计的 Employee Management 系统界面的最终效果...
Flex Builder 提供了一个可视化的编辑器,通过简单的拖拽,一个毫无经验的开发人员也能够设计出漂亮的布局。如果熟悉一点 XML 的知识,编辑 MXML 也并非难事。我们设计的 Employee Management 系统界面的最终效果...
深入讨论使用Transact-SQL创建和操仳数据库对象,使用主要的编程接口(如ADO、DAO、OBDC及RDO等)来访问数据库,编写存储过程以及扩展的存储过程,使用ASP和XML开发集成的跨平台的WEB应用,对多系统进行数据复制,...
Inversion of Control的使用(在下面讨论)帮助完成了这种简化。 通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。 Spring被设计为让使用它创建的应用尽可能少的依赖于...