NewBookcontroller中

写上这样一个接口

     中间有Hql

 
  
  1. @RequestMapping("/paging.do"
  2.     public String paging(Integer currPage,Integer pageSize,Map map) 
  3.     { 
  4.         currPage=currPage==null1 :currPage; 
  5.         pageSize=pageSize==null0:pageSize; 
  6.         currPage=currPage<=0 ? 1 : currPage; 
  7.         pageSize=pageSize<=0 ? 3 : pageSize;  
  8.         Page page; 
  9.         String hql; //用了hql
  10.         hql= "from Book"
  11.         page = bdao.pagedQuery(hql, currPage, pageSize); 
  12.         map.put("page", page); 
  13.         map.put("currPage", currPage); 
  14.         return "category"
  15.     } 

 

它可以去调用BaseDao里面的 pagedQuery(String hql, int pageNo, int pageSize, Object... values)

 
  
  1. /** 
  2.      * 分页查询函数,使用hql. 
  3.      * 
  4.      * @param pageNo 页号,从1开始. 
  5.      */ 
  6.     public Page pagedQuery(String hql, int pageNo, int pageSize, Object... values) { 
  7.         Assert.hasText(hql); 
  8.         Assert.isTrue(pageNo >= 1"pageNo should start from 1"); 
  9.         // Count查询 
  10.         String countQueryString = " select count (*) " + removeSelect(removeOrders(hql)); 
  11.         List countlist = getHibernateTemplate().find(countQueryString, values); 
  12.         long totalCount = (Long) countlist.get(0); 
  13.  
  14.         if (totalCount < 1
  15.             return new Page(); 
  16.         // 实际查询返回分页对象 
  17.         int startIndex = Page.getStartOfPage(pageNo, pageSize); 
  18.         Query query = createQuery(hql, values); 
  19.         List list = query.setFirstResult(startIndex).setMaxResults(pageSize).list(); 
  20.  
  21.         return new Page(startIndex, totalCount, pageSize, list); 
  22.     } 

但是,我做的是高级搜索,是已经生成好 list,后来我想不出其他办法,就把我的高级搜索只返回hql,然后合并了上面paging.do 的方法

 

 
  
  1. @RequestMapping(value="/findBySearch.do",method=RequestMethod.POST) 
  2.     public String findBySearch(String bookname,String writer,String publisher,int categoryid,float price,Integer currPage,Integer pageSize, Map map) 
  3.     { 
  4.          
  5.          
  6.           System.out.println("----------------begin--findBySearch.do---------------------------"); 
  7.          
  8.           bookname=bookname.trim(); 
  9.           writer=writer.trim(); 
  10.           publisher=publisher.trim(); 
  11.   System.out.println("----------------end--findBySearch.do1---------------------------"); 
  12.         List clist=cdao.loadAll(); 
  13.         map.put("clist", clist); 
  14.           System.out.println("----------------end--findBySearch.do2---------------------------"); 
  15.          
  16.           String sql=bdao.findsql(bookname,writer,publisher,categoryid,price); 
  17.          
  18.         currPage=currPage==null1 :currPage; 
  19.         pageSize=pageSize==null0:pageSize; 
  20.         currPage=currPage<=0 ? 1 : currPage; 
  21.         pageSize=pageSize<=0 ? 3 : pageSize;  
  22.         Page page; 
  23.         page = bdao.pagedQuery(sql, currPage, pageSize); 
  24.         map.put("page", page); 
  25.         map.put("currPage", currPage); 
  26.            
  27.         System.out.println("----------------end--findBySearch.do3---------------------------"); 
  28.         return "category"
  29.          
  30.          
  31.     } 

BookDao  findsq了()

 

 
  
  1. public String findsql(String bookname,String writer,String publisher,int categoryid,float price) 
  2.     { 
  3.         System.out.println("---------begin----List<Book> find---------------------"); 
  4.          
  5.         System.out.println(bookname); 
  6.         System.out.println(writer); 
  7.         System.out.println(publisher); 
  8.          
  9.      
  10.         System.out.println(categoryid); 
  11.         System.out.println(price); 
  12.          
  13.         String sql = "FROM Book b where 1=1 ";  //1=1 经典 
  14.         if(categoryid>=0 ){ 
  15.             sql += " AND b.category.id = "+ categoryid; 
  16.         } 
  17.         if(!"".equals(bookname)){ 
  18.             sql += " AND b.name like '%"+bookname+"%'"
  19.         } 
  20.         if(!"".equals(writer)){ 
  21.             sql += " AND b.writer like '%"+writer+"%'"
  22.         } 
  23.         if(!"".equals(publisher)){ 
  24.             sql += " AND b.publisher like '%"+publisher+"%'"
  25.         } 
  26.         if(price!=0
  27.          { 
  28.             if(price==10){ 
  29.              
  30.             sql += " AND b.price>0 AND price<10"
  31.             } 
  32.             if(price==30){ 
  33.             sql += " AND b.price>10 AND price<30"
  34.             } 
  35.            if(price==50){ 
  36.             sql += " AND b.price>30 AND price<50"
  37.             } 
  38.             if(price==100){ 
  39.             sql += " AND b.price>50 AND price<100"
  40.             } 
  41.             if(price==101){ 
  42.             sql += " AND b.price>100"
  43.             } 
  44.         } 
  45.          
  46.         System.out.println("---------end----List<Book> find---------------------"); 
  47.          
  48.          
  49.          
  50.         return sql; 
  51.     } 

还没很多数据不知道高级搜索有没有问题,不过不认为这个方法还是不太好,应该有更好方法做的搜索后分页是list传过去,待续。。。