NewBookcontroller中
写上这样一个接口
中间有Hql
- @RequestMapping("/paging.do")
- public String paging(Integer currPage,Integer pageSize,Map map)
- {
- currPage=currPage==null? 1 :currPage;
- pageSize=pageSize==null? 0:pageSize;
- currPage=currPage<=0 ? 1 : currPage;
- pageSize=pageSize<=0 ? 3 : pageSize;
- Page page;
- String hql; //用了hql
- hql= "from Book";
- page = bdao.pagedQuery(hql, currPage, pageSize);
- map.put("page", page);
- map.put("currPage", currPage);
- return "category";
- }
它可以去调用BaseDao里面的 pagedQuery(String hql, int pageNo, int pageSize, Object... values)
- /**
- * 分页查询函数,使用hql.
- *
- * @param pageNo 页号,从1开始.
- */
- public Page pagedQuery(String hql, int pageNo, int pageSize, Object... values) {
- Assert.hasText(hql);
- Assert.isTrue(pageNo >= 1, "pageNo should start from 1");
- // Count查询
- String countQueryString = " select count (*) " + removeSelect(removeOrders(hql));
- List countlist = getHibernateTemplate().find(countQueryString, values);
- long totalCount = (Long) countlist.get(0);
- if (totalCount < 1)
- return new Page();
- // 实际查询返回分页对象
- int startIndex = Page.getStartOfPage(pageNo, pageSize);
- Query query = createQuery(hql, values);
- List list = query.setFirstResult(startIndex).setMaxResults(pageSize).list();
- return new Page(startIndex, totalCount, pageSize, list);
- }
但是,我做的是高级搜索,是已经生成好 list,后来我想不出其他办法,就把我的高级搜索只返回hql,然后合并了上面paging.do 的方法
- @RequestMapping(value="/findBySearch.do",method=RequestMethod.POST)
- public String findBySearch(String bookname,String writer,String publisher,int categoryid,float price,Integer currPage,Integer pageSize, Map map)
- {
- System.out.println("----------------begin--findBySearch.do---------------------------");
- bookname=bookname.trim();
- writer=writer.trim();
- publisher=publisher.trim();
- System.out.println("----------------end--findBySearch.do1---------------------------");
- List clist=cdao.loadAll();
- map.put("clist", clist);
- System.out.println("----------------end--findBySearch.do2---------------------------");
- String sql=bdao.findsql(bookname,writer,publisher,categoryid,price);
- currPage=currPage==null? 1 :currPage;
- pageSize=pageSize==null? 0:pageSize;
- currPage=currPage<=0 ? 1 : currPage;
- pageSize=pageSize<=0 ? 3 : pageSize;
- Page page;
- page = bdao.pagedQuery(sql, currPage, pageSize);
- map.put("page", page);
- map.put("currPage", currPage);
- System.out.println("----------------end--findBySearch.do3---------------------------");
- return "category";
- }
BookDao findsq了()
- public String findsql(String bookname,String writer,String publisher,int categoryid,float price)
- {
- System.out.println("---------begin----List<Book> find---------------------");
- System.out.println(bookname);
- System.out.println(writer);
- System.out.println(publisher);
- System.out.println(categoryid);
- System.out.println(price);
- String sql = "FROM Book b where 1=1 "; //1=1 经典
- if(categoryid>=0 ){
- sql += " AND b.category.id = "+ categoryid;
- }
- if(!"".equals(bookname)){
- sql += " AND b.name like '%"+bookname+"%'";
- }
- if(!"".equals(writer)){
- sql += " AND b.writer like '%"+writer+"%'";
- }
- if(!"".equals(publisher)){
- sql += " AND b.publisher like '%"+publisher+"%'";
- }
- if(price!=0)
- {
- if(price==10){
- sql += " AND b.price>0 AND price<10";
- }
- if(price==30){
- sql += " AND b.price>10 AND price<30";
- }
- if(price==50){
- sql += " AND b.price>30 AND price<50";
- }
- if(price==100){
- sql += " AND b.price>50 AND price<100";
- }
- if(price==101){
- sql += " AND b.price>100";
- }
- }
- System.out.println("---------end----List<Book> find---------------------");
- return sql;
- }
还没很多数据不知道高级搜索有没有问题,不过不认为这个方法还是不太好,应该有更好方法做的搜索后分页是list传过去,待续。。。
转载于:https://blog.51cto.com/5456032/1105407