查询接口方法的设计
实体DAO查询接口的定义一般有五种形式
方式1:每一个条件项参数对应一个入参
List findOrder(Stirng hql,Date startTime,Date endTime,int deptId)
优点:可读性强 内部逻辑处理简单
缺点:接口稳定性差 如果添加参数,将会违背软件设计的开闭原则,要么增加重载接口,如果查询条件项的组合过多时,接口数据会增多,难以维护
方式2:使用数组传递条件项参数
List findOrder(String sql,Object[] params)
优点:可以应付查询条件项组合多样性的情况下保持接口的稳定性,开发都必须在方法内部从数组中将参数取出传给查询引擎
缺点:接口可读性比较差 调用都需要查询接口的JavaDoc才会使用 必须对基本类型进行封装
方式3:使用JDK 5.0的新特性
使用不定参数
List findOrder(String hql,Object…params);
与方式二效果差不多
方式4:将查询条件项参数封装成对象
List findOrder(String hql,OrderQueryParam param);
优点:可读性比较好
缺点:在方法内部必须确定参数对象封装了对应的查询项参数 由于需要创建更多类,维护不是很方便,可能一个DAO对应多个条件查询项,当需要添加一个新的条件项时,条件封装类还需要进行调整
方式5:使用Map传递条件项参数
List<Order> findOrder(String hql,Map params); [常采用方式] Map键为参数名 值为参数值
优点:接口方法在条件项发生改变的情况下保持稳定,通过键指定条件参数在一定程度上解决了接口的健壮性
缺点:当调用指定错误参数时,编译时无法检测到错误 开发都必须查询JavaDoc文档才会使用