SSH实现多关键字模糊查询

**************************************Service层方法****************************

public PageModel getSearch(String key, int articletypeid,int pageNo, int pageSize) //分页--搜索
{
   PageModel pagemodel = artircleDao.getSearch(key , articletypeid , pageNo , pageSize);
   List keys = SubString.getInstance().splitKey(key);
   if(pagemodel.getList()!=null)
   {
    ListArticle.getInstance().color(pagemodel.getList() , keys);
    ListArticle.getInstance().listDeal(pagemodel.getList() , 1 , 50);
   }
   return pagemodel;
  
}

*******************************************Dao层方法**************************************

public PageModel getSearch(String key ,final int articletypeid,final int pageNo, final int pageSize) //分页--搜索
{
   final List keys=SubString.getInstance().splitKey(key);   //方法将在后面给出
   
   PageModel pageModel = new PageModel();
   List itemList = new ArrayList();
    if(keys.size()>0)
    {
    
         itemList=(List)this.getHibernateTemplate().execute(
           new HibernateCallback()
        {  
         public Object doInHibernate(org.hibernate.Session session)
         {    
                String hql="from Article a where a.title like ? "; //对标题的搜索
              for(int i=0;i<keys.size()-1;i++)//如果只有一个关键字 则不加
              {
             hql=hql+"or a.title like ?";
              }
             
              hql= hql+"or a.content like ?"; //添加内容的搜索
              for(int i=0;i<keys.size()-1;i++)//如果只有一个关键字 则不加
              {
             hql=hql+"or a.content like ?";
              }
              Query q = session.createQuery(hql+" order by a.id");
             
             
              for(int i= 0 ;i<keys.size();i++) //添加对标题的参数 从i开始
              {
             q.setParameter(i, "%"+keys.get(i) + "%");
              }
              for(int i= 0 ;i<keys.size();i++) //添加对内容的参数 从keys.size()+i开始
              {
             q.setParameter(keys.size()+i, "%"+keys.get(i) + "%");
              }
            q.setFirstResult((pageNo - 1) * pageSize)
            .setMaxResults(pageSize);
            
                            List result = q.list();
             return result;
         }
        }
   
         );
     
        
         List itemList_2=(List)this.getHibernateTemplate().execute( //用于总记录数
           new HibernateCallback()
        {  
         public Object doInHibernate(org.hibernate.Session session)
         {    
                String hql="from Article a where a.title like ? "; //对标题的搜索
              for(int i=0;i<keys.size()-1;i++)//如果只有一个关键字 则不加
              {
             hql=hql+"or a.title like ?";
              }
             
              hql= hql+"or a.content like ?"; //添加内容的搜索
              for(int i=0;i<keys.size()-1;i++)//如果只有一个关键字 则不加
              {
             hql=hql+"or a.content like ?";
              }
              Query q = session.createQuery(hql+" order by a.id");
             
             
              for(int i= 0 ;i<keys.size();i++) //添加对标题的参数 从i开始
              {
             q.setParameter(i, "%"+keys.get(i) + "%");
              }
              for(int i= 0 ;i<keys.size();i++) //添加对内容的参数 从keys.size()+i开始
              {
             q.setParameter(keys.size()+i, "%"+keys.get(i) + "%");
              }
           
           
            
                            List result = q.list();
             return result;
         }
        }
   
         );
           pageModel.setList(itemList);
        pageModel.setPageNo(pageNo);
        pageModel.setPageSize(pageSize);
        pageModel.setTotalRecords(itemList_2.size());//-----------
   
   }
   return pageModel;
  
}

******************************* splitKey()*************************************************

public List splitKey(String key)//格式化关键字 去除多余的空格
   {  
    key = key.trim();
    String[] keys = key.split(" ");
    List keyList= new ArrayList();
    for(String k : keys)
    {
     if(k.equals("")||k.equals(" ")||k==null)
      continue;
     else
     {
      //System.out.println("kkkkkkkkkkkkkkk==:"+k);
      keyList.add(k);
     }
     
    }
    return keyList;
   }

*********************************PageModel类*****************************************

package com.bcm.util;

import java.util.List;

import com.bcm.model.ArticleType;

public class PageModel
{
// 总记录数
private int totalRecords;

// 结果集
private List list;

// 当前页
private int pageNo;

// 每页显示多少条
private int pageSize;
private int getTotalPages; //总页数
private ArticleType articletype;

public int getTotalRecords()
{
   return totalRecords;
}

public void setTotalRecords(int totalRecords)
{
   this.totalRecords = totalRecords;
}

public List getList()
{
   return list;
}

public void setList(List list)
{
   this.list = list;
}

public int getPageNo()
{
   return pageNo;
}

public void setPageNo(int pageNo)
{
   if(pageNo==0)
       this.pageNo = 1;
   else
    this.pageNo = pageNo;
}

public int getPageSize()
{
   return pageSize;
}

public void setPageSize(int pageSize)
{
   this.pageSize = pageSize;
}

/**
* 取得总页数
* @return
*/
public int getTotalPages()
{
   return (totalRecords + pageSize - 1) / pageSize;
}

/**
* 取得第一页
* @return
*/
public int getTopPageNo()
{
   return 1;
}

/**
* 取得上一页
* @return
*/
public int getPreviousPageNo()
{
   if (pageNo <= 1)
   {
    return 1;
   }
   return pageNo - 1;
}

/**
* 取得下一页
* @return
*/
public int getNextPageNo()
{
   if (pageNo >= getTotalPages())
   {
    return getTotalPages() == 0 ? 1 : getTotalPages();
   }
   return pageNo + 1;
}

/**
* 取得最后一页
* @return
*/
public int getBottomPageNo()
{
   return getTotalPages() == 0 ? 1 : getTotalPages();
}

public ArticleType getArticletype()
{
   return articletype;
}

public void setArticletype(ArticleType articletype)
{
   this.articletype = articletype;
}

 

}

********************************前台调用分页************************************************

<table width="926" height="21" border="0" class="title1">
              <tr>
        <form action="article_search.action" ><!-- 只用于手动跳转到XX页 -->
     <td height="25" align="center" valign="bottom" class="titlep">
     
      <s:url id="url_top" value="article_search.action">
             <s:param name="pageNo" value="1"></s:param>
             <s:param name="key" value="#session.key"></s:param>
       </s:url>
     
       <s:url id="url_pre" value="article_search.action">
             <s:param name="pageNo" value="pagemodel.getPreviousPageNo()"></s:param>
             <s:param name="key" value="#session.key"></s:param>
       </s:url>
      
       <s:url id="url_next" value="article_search.action">
             <s:param name="pageNo" value="pagemodel.getNextPageNo()"></s:param>
             <s:param name="key" value="#session.key"></s:param>
       </s:url>
      
       <s:url id="url_buttom" value="article_search.action">
             <s:param name="pageNo" value="pagemodel.getBottomPageNo()"></s:param>
             <s:param name="key" value="#session.key"></s:param>
       </s:url>
       共<font color="#CC3333"><s:property value="pagemodel.totalRecords"/></font>条
        每页<font color="#CC3333"><s:property value="pagemodel.pageSize"/></font>条
         第<font color="#CC3333"><s:property value="pagemodel.pageNo"/>/<s:property value="pagemodel.getTotalPages()"/></font>页
        
          <s:if test="pagemodel.pageNo==1&&pagemodel.getTotalPages()==1">
                  <font color="#999999"> 首页</font>
                 <font color="#999999"> 上一页</font>
                 <font color="#999999">下一页</font>
                 <font color="#999999">尾页</font>
          </s:if>
          <s:elseif test="pagemodel.pageNo==1&&pagemodel.getTotalPages()!=1">
             <font color="#999999"> 首页</font>
             <font color="#999999"> 上一页</font>
             <s:a href="%{url_next}">下一页</s:a>
             <s:a href="%{url_buttom}">尾页</s:a>
         </s:elseif>
          <s:elseif test="pagemodel.pageNo==pagemodel.getBottomPageNo()">
                <s:a href="%{url_top}">首页</s:a>
                <s:a href="%{url_pre}">上一页</s:a>
                <font color="#999999">下一页</font>
                <font color="#999999">尾页</font>
                                             
          </s:elseif>
         <s:else>
             <s:a href="%{url_top}">首页</s:a>
             <s:a href="%{url_pre}">上一页</s:a>
             <s:a href="%{url_next}">下一页</s:a>
             <s:a href="%{url_buttom}">尾页</s:a>
         </s:else>
       
         转到<input type="hidden" name="key" value="<s:property value="#session.key"/>"/>
      <input type="text" name="pageNo" size="2"/>页
       <input type="submit" value="go"/>
       
     </td>
</form>
              </tr>
</table>  

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值