SSH动态查询具体实现之service

http://blog.csdn.net/qiyuexuelang/article/details/17317707


先贴代码:

  1. public interface SnippetService {  
  2.  public int count(Class c,Object[][] eq,Object[][] like,String[][] datetime,  
  3.                 String[] group,String[] asc,String[] desc);  
  4.  Public List<?> search(Class c,Object[][] eq,Object[][]like,String[][] datetime,  
  5.                 String[] group,String[] asc,String[] desc,    
  6.         int start, int limit);  
  7. }<span style="font-size: 14px; font-family: Arial, Helvetica, sans-serif;">                                                              </span>  

service接口如上所示,具体参数说明详见上文--SSH动态查询封装接口介绍

 

 下面介绍serviceImplSnippetServiceImpl 

  

  1. @Component("snippetServiceImpl")  
  2. public class SnippetServiceImpl implements SnippetService {  
  3. @Resource(name = "snippetDao")  
  4. private SnippetDao sd ;  
  5.    

SnippetServiceImpl 是SnippetService 的具体实现,首先引入dao层的东东SnippetDao sd(关于dao的一些接口方法,本文只介绍其作用),
  1.   public int count(Class c,Object[][] ob,Object[][] like,String[][] datetime,  
  2. String[] group,String[] asc,String[] desc){  
  3. StringBuffer hql = new StringBuffer(    
  4.         "from "+c.getSimpleName()+" j");   
  5.  String q = sd.getHQL(ob,like,datetime,group,asc,desc);    
  6.    //得到完整hql   
  7.     if (!"".equals(q) && q != null) {    
  8.         hql.append(" where ");    
  9.         hql.append(q);    
  10.     }    
  11.    //参数值集合   
  12.     Object[] param = sd.getValue(ob,like,datetime).toArray();   
  13. return sd.count(hql.toString(), param);  
  14. }       
  15.    
  16.    
  17. public List<?> search(Class c,Object[][] ob,Object[][] like,  
  18. String[][] datetime,  
  19. String[] group,String[] asc,String[] desc,    
  20.         int start, int limit) {    
  21.     StringBuffer hql = new StringBuffer("from "+c.getSimpleName()+" j");   
  22.     String q = sd.getHQL(ob,like,datetime,group,asc,desc);    
  23.    //得到完整hql   
  24.     if (!"".equals(q) && q != null) {    
  25.         hql.append(" where ");    
  26.         hql.append(q);    
  27.     }    
  28.    //参数值集合   
  29.     Object[] param = sd.getValue(ob,like,datetime).toArray();   
  30.      
  31.        // find方法。根据条件得到记录。start和limit对分页的设置。    
  32.     return sd.findPublic(hql.toString(), param, start, limit);    
  33. }    



     

      代码备注已介绍的比较清晰,

 两方法都调用了Dao层的接口

     public String getHQL(Object[][] ob,Object[][] like,String[][] datetime,

              String[] group,String[] asc,String[] desc);

       目的是将service拼接的字符串 :"from "+c.getSimpleName()+" j"

   dao层经过判断筛选排序组合得到的后半段hql 相连,得到完整的hql语句。

      

     public List<Object> getValue(Object[][] ob,Object[][] like,String[][] datetime);

       目的是对精确、模糊单个或组合查找传入的参数值进行筛选,得到与hql参数相对

   应的有效参数集合,其排列顺序不可更改。

     

     count单独调用Dao层的接口

     public int count(String hql, Object[] param);

       根据hql及其对应的valuedao层完成查询工作,将总记录数返回。

       

     Search单独调用Dao层的接口

     public List<?> findPublic(String hql, Object[] param,

             int start,int limit);

       根据hql及其对应的value以及分页value实现数据列表当前页工作。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值