`

讨论:Dao查询接口设计经验

阅读更多
    接受若干查询条件的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]);
  }
  这种方式接口签名也是稳定的,不过接口也是不清晰。 

   不知道大家在实践中还有没有其他好的方法,欢迎抛玉!!
分享到:
评论
1 楼 quickselect 2006-11-02  
还有一种方式就是用数据来传条件入参,位置和hql中的?一致。

相关推荐

    new_dao

    - **接口定义**:DAO接口通常包含了一系列用于执行数据库操作的方法,如添加、删除、更新和查询数据。 - **实现类**:DAO接口的实现类提供了具体的数据访问逻辑,如SQL语句的执行,可能使用JDBC或其他ORM框架(如...

    Don’t repeat the DAO!

    但根据标题,我们可以推测博主林诗权可能在文章中讨论了在实际项目中如何避免DAO层的冗余代码,分享了最佳实践和经验,可能包括如何通过抽象、继承、工厂模式或使用ORM(对象关系映射)框架来优化DAO的设计。...

    dao设计模式视频教程

    3. 业务接口及实现:业务层通过调用DAO接口来进行数据操作,不直接与数据库打交道,提高了代码的解耦度。 4. 客户端:应用程序,通过业务接口来调用服务,间接地使用DAO对象进行数据存取。 本教程可能涵盖以下内容...

    java 基于泛型与反射的通用 DAO

    DAO模式是一种设计模式,旨在提供一个统一的接口,用于数据库的访问,隐藏底层的数据访问细节。在Java中,DAO通常负责与数据库的交互,包括CRUD(创建、读取、更新、删除)操作。 最后,“IBaseDao.java”可能是`...

    基于MVC的论坛(用到struts+dao设计模式)

    1. **DAO接口**:定义了对数据对象的基本操作,如添加、删除、更新和查询。 2. **DAO实现类**:实现DAO接口,提供具体的数据访问实现,如使用JDBC或者ORM框架(如Hibernate)与数据库交互。 3. **事务管理**:论坛...

    DAO-2.3.4.726

    5. **接口驱动编程**:iBATIS鼓励使用接口驱动的编程模型,开发者定义DAO接口,然后在XML配置文件中指定对应的SQL语句,这样可以保持业务逻辑与数据访问的分离。 6. **参数映射**:在调用DAO方法时,可以传递参数,...

    数据库dao操作jdbc

    8. **DAO接口和实现**:定义一个DAO接口,比如`UserDao`,包含各种数据库操作方法。然后实现这个接口,具体实现JDBC代码。 9. **工厂模式**:使用工厂类(如`DataSourceFactory`)来创建和管理数据库连接,提供线程...

    《J2EE核心模式》(DAO模式)

    在讨论DAO模式的同时,我们还提到了抽象工厂模式。这是一种创建型设计模式,用于提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在数据访问场景中,抽象工厂模式可能被用来创建不同数据库...

    java好用的dao

    在传统的Java开发中,我们需要为每个数据库表创建一个对应的DAO接口以及其实现类,然后在这些类中编写SQL语句或使用ORM框架来操作数据。而AutoDAO通过简单的配置和注解,就能自动生成这些类,使得开发人员可以专注于...

    自动生成DAO源代码

    在软件开发过程中,数据访问对象(DAO)模式是一种常见的设计模式,用于封装对数据库的操作,以提高代码的可重用性和可维护性。本主题主要介绍如何利用Eclipse的Java Text Templates (JET)功能自动生成DAO源代码,...

    hibernate4 通用dao,service

    3. Service层的设计:讨论如何在Service层中封装业务逻辑,调用DAO方法,可能还包括异常的捕获和处理,以及事务的控制。 4. 泛型的应用:可能使用Java泛型来提高DAO和Service的复用性,使得一个DAO或Service类可以...

    StuDAO.rar_dao

    4. 模式优缺点:讨论DAO模式带来的好处,如解耦、提高可测试性,以及可能存在的问题,如过度封装可能导致的效率问题。 5. 框架集成:介绍如何将DAO模式与Spring等框架结合,利用框架的事务管理、AOP等功能进一步优化...

    5-互评-OO之接口-DAO模式代码阅读及应用

    总结来说,"5-互评-OO之接口-DAO模式代码阅读及应用"这个主题涵盖了Java开发中的关键知识点,包括接口的概念及其在实现模块间契约中的作用,以及DAO模式在数据访问层的设计和实现。理解并熟练应用这些知识对于提升...

    分了dao service的ssm整合还附带分页功能

    在SSM整合中,MyBatis作为数据访问组件,与Spring配合,通过DAO接口进行数据库操作。 接下来,我们讨论DAO和Service的分离: 在Java Web开发中,DAO层主要负责与数据库的交互,而Service层则封装了业务逻辑。DAO层...

    用java的面向对象语言来操作关系型数据库 dao层.zip

    4. **DAO接口与实现**:定义一个DAO接口,列出所有可能的数据库操作方法,如`get`, `save`, `update`, `delete`。然后创建该接口的实现类,具体实现这些方法,内部使用JDBC进行数据库交互。接口使得我们可以轻松替换...

    商业编程-源码-魔法单词记忆——DAO访问ACCESS数据库.zip

    - 设计DAO接口,包含增删查改等基本数据库操作方法。 - 实现DAO接口,使用JDBC API(如Statement或PreparedStatement)来执行SQL语句。 - 编写业务逻辑层,调用DAO接口完成实际的数据操作。 4. 数据库操作: 在...

    Factory(DAO).rar_Factory DAO_dao_dao facto_factory

    DAO类通常包含对数据库的操作,如查询、插入、更新和删除数据,而这些操作的实现细节对调用者是透明的。通过使用DAO,我们可以将业务逻辑与数据访问逻辑解耦,使得代码更具有可测试性和可维护性。 Factory DAO模式...

    Java练习项目: web,service,dao的无框架练习项目

    DAO接口和实现类如`ProductDAO`、`OrderDAO`会提供对数据库的操作方法,以实现对商品信息、用户信息、订单数据的存储和读取。 4. **数据库设计**: 在这个项目中,可能涉及到的数据库表有`Product`(产品)、`User...

    JSP+DAO和MVC+DAO(基于MySQL数据库分页)-v笔记

    在分页场景下,DAO会包含获取指定范围数据的接口,例如`getRecordsByPage(int pageNum, int pageSize)`。 **MVC+DAO分页** MVC模式是一种设计模式,它将应用分为模型(Model)、视图(View)和控制器(Controller...

    spring 对dao 的操作

    1. **定义DAO接口**:首先定义一个DAO接口,声明需要的数据库操作方法,比如`List&lt;User&gt; findAllUsers();`。 2. **实现DAO接口**:接着,创建DAO接口的实现类,使用Spring提供的模板类或ORM框架来实现这些方法。 3...

Global site tag (gtag.js) - Google Analytics