`
shaohan126448
  • 浏览: 116158 次
  • 来自: 北京
社区版块
存档分类
最新评论

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>  

 

分享到:
评论

相关推荐

    ssh框架的模糊查询

    总结来说,SSH框架的模糊查询和分页功能涉及到了前端请求处理、后端业务逻辑、数据库操作等多个层面,通过合理的代码设计和组织,能够实现高效且灵活的数据检索和展示。在实际开发中,还需要考虑性能优化、异常处理...

    ssh实现模糊查询,分页及增删改查功能

    在这个场景中,我们将深入探讨如何利用SSH框架实现模糊查询、分页以及增删改查(CRUD)功能,并与Oracle 10g数据库进行交互。 **一、SSH框架简介** SSH框架由三个主要部分组成: 1. **Struts2**:这是一个基于MVC...

    SSH+模糊查询+分页+增删改查

    在SSH框架中,我们可以利用Hibernate的HQL(Hibernate Query Language)或JPA(Java Persistence API)的 Criteria API 来实现模糊查询。例如,我们可能在用户搜索时,使用LIKE关键字配合通配符%来找到包含特定字串...

    SSH下实现的增删改查分页简单的模糊查询

    本文将深入探讨如何在SSH框架下实现增删改查(CRUD)功能,以及分页和模糊查询的技术细节。 首先,Spring框架是整个应用的中枢,它负责依赖注入(DI)和面向切面编程(AOP),提供了事务管理和其他企业级服务。...

    SSH整合项目(crud、分页、模糊查询、上传下载、批量删除、)

    在不连接数据库的情况下,通过缓存或预加载数据实现查询结果的分页展示。这可以提高查询效率,减少数据库负载。 4. **模糊查询**: 允许用户输入部分关键字,系统根据关键字匹配数据库中的数据。比如,用户可以...

    SSH整合练习增删改查

    在本项目"SSH整合练习增删改查"中,开发者使用了Struts2.1.8、Hibernate3.5.5和Spring3.0.2这三个特定版本的框架,以及MySQL5.1数据库和JDK1.6作为运行环境,实现了对数据对象的完整生命周期管理,包括添加(Add)、...

    ssh 分页 代源码 简单易懂

    在SSH框架中实现模糊查询,通常可以在Hibernate的查询语句中使用`like`操作符,配合通配符来完成。例如,如果查询字段是`name`,模糊查询的HQL可能是`from Entity where name like :keyword`,这里的`:keyword`是...

    B2CWeb:仿淘宝的B2C商城项目一,项目介绍:本项目使用SSH框架和MySQL数据库。实现Spring对Hibernate和Struts的整合。目前实现的功能:(1)前台功能:用户注册,商品展示,购物车功能(商品) (2)后台功能:商品增删改查和订单管理。(3)商品搜索(搜索内容进行分词,提取关键字,模糊查询)。(4) QQ在线咨询功能。本项目基本实现完整的B2C网站的功能。二,项目部署:本项目使用Eclipse_EE + Tomcat7.0 + MySql5.6的开发环境。1,安装Eclipse_E

    (3)商品搜索(搜索内容进行分词,提取关键字,模糊查询)。(4) QQ在线咨询功能。本项目基本实现完整的B2C网站的功能。二,项目部署:本项目使用Eclipse_EE + Tomcat7.0 + MySql5.6的开发环境。1,安装Eclipse_EE...

    基于SSH2的明日论坛1

    文章搜索模块支持按关键字进行模糊查询。 系统流程: 用户首先访问首页,可以选择注册或登录。登录后,用户可以搜索文章、回复、查看自己的文章、按类别查看文章、查看特定作者的文章,以及对文章进行回复和留言。 ...

    Java_EE_SSH三大框架知识点

    - 模糊查询:利用`LIKE`关键字结合通配符`%`实现。 - 参数查询:通过`setString`等方法传递参数值,避免SQL注入问题。 **11. 分页查询** - 使用`setFirstResult`和`setMaxResults`方法实现。 **12. HQL简介** ...

    ssh的src暂时方方

    然而,这个标题有些模糊,没有提供足够的具体信息来深入讨论SSH在源码管理中的实际应用。因此,我将基于SSH的一般知识和它在开发中的常见用途来展开讨论。 SSH是一种网络协议,用于在不安全的网络上安全地执行命令...

    基于SSH文献管理系统(代码+论文)

    3. 搜索与检索:提供关键字搜索、高级搜索等功能,支持模糊匹配和分类检索。 4. 文献分类与标签:对文献进行分类管理,用户可以根据标签快速找到相关文献。 5. 权限控制:根据用户角色设置不同级别的访问权限,如...

    基于SSH+MVC的体育商城系统源码

    商品搜索:用户可以搜索自己感兴趣的体育商品,该搜索栏支持模糊查询,只需输入关键字就可以查到。 会员注册:用户填写自己的基本信息,可以成为该商城的会员用户。 用户登录:注册成功后,可以登录该商城的网站。 ...

    网上购物商城的购物和支付模块

    在SSH框架中,可以利用Struts2的拦截器或者自定义插件实现分页逻辑,而Hibernate可以通过HQL(Hibernate Query Language)或者SQL配合LIMIT关键字实现数据库的分页查询。 贸易Demo(tradeDemo)这个项目可能包含了...

    仿淘宝的B2C商城项目

    (3)商品搜索(搜索内容进行分词,提取关键字,模糊查询)。(4)QQ在线咨询功能。本项目基本实现完整的B2C网站的功能。 二、项目部署: 本项目使用Eclipse_EE + Tomcat7.0+ MySql5.6的开发环境。 1、安装 Eclipse_...

    hibernate的hql语句

    7. **子查询**:HQL允许在查询语句中嵌套查询,以实现复杂的数据过滤。例如,`select c from Cat c where c.mate in (select m from Mate m where m.age &gt; 3)`,这个查询会找出所有配偶年龄大于3岁的猫。 8. **投影...

    学生信息管理系统

    【学生信息管理系统】是一个基于Java SSH框架开发的项目,它主要涵盖了使用EasyUI、JDK1.6等技术实现的学生信息的增删改查、文件上传、数据排序、模糊查询、表单验证以及分页显示等多种功能。在这个系统中,SSH...

    Struts2+Spring做的BBS项目

    4. **搜索模块**:提供关键字搜索功能,可能需要实现全文检索或者模糊匹配。 5. **权限模块**:对用户进行角色划分,设置不同权限,如普通用户、管理员等,控制用户访问和操作的范围。 6. **通知模块**:实现用户...

Global site tag (gtag.js) - Google Analytics