SSH動態查詢具體實現之service

先貼代碼:

public interface SnippetService {
 public int count(Class c,Object[][] eq,Object[][] like,String[][] datetime,
                String[] group,String[] asc,String[] desc);
 Public List<?> search(Class c,Object[][] eq,Object[][]like,String[][] datetime,
                String[] group,String[] asc,String[] desc,  
        int start, int limit);
}                                                              

service接口如上所示,具體參數說明詳見上文--SSH動態查詢封裝接口介紹

 

 下面介紹serviceImplSnippetServiceImpl 

  

@Component("snippetServiceImpl")
public class SnippetServiceImpl implements SnippetService {
@Resource(name = "snippetDao")
private SnippetDao sd ;
 

SnippetServiceImpl 是SnippetService 的具體實現,首先引入dao層的東東SnippetDao sd(關於dao的一些接口方法,本文只介紹其作用),

  public int count(Class c,Object[][] ob,Object[][] like,String[][] datetime,
String[] group,String[] asc,String[] desc){
StringBuffer hql = new StringBuffer(  
        "from "+c.getSimpleName()+" j"); 
 String q = sd.getHQL(ob,like,datetime,group,asc,desc);  
   //得到完整hql 
    if (!"".equals(q) && q != null) {  
        hql.append(" where ");  
        hql.append(q);  
    }  
   //參數值集合 
    Object[] param = sd.getValue(ob,like,datetime).toArray(); 
return sd.count(hql.toString(), param);
}     
 
 
public List<?> search(Class c,Object[][] ob,Object[][] like,
String[][] datetime,
String[] group,String[] asc,String[] desc,  
        int start, int limit) {  
    StringBuffer hql = new StringBuffer("from "+c.getSimpleName()+" j"); 
    String q = sd.getHQL(ob,like,datetime,group,asc,desc);  
   //得到完整hql 
    if (!"".equals(q) && q != null) {  
        hql.append(" where ");  
        hql.append(q);  
    }  
   //參數值集合 
    Object[] param = sd.getValue(ob,like,datetime).toArray(); 
   
       // find方法。根據條件得到記錄。start和limit對分頁的設置。  
    return sd.findPublic(hql.toString(), param, start, limit);  
}  



     

      代碼備註已介紹的比較清晰,

 兩方法都調用了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實現數據列表當前頁工作。

 

 相關文章:

SSH動態查詢封裝接口介紹

SSH動態查詢具體實現之Dao


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章