欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java实现搜索功能代码详解

程序员文章站 2024-02-16 23:05:40
首先,我们要清楚搜索框中根据关键字进行条件搜索发送的是get请求,并且是向当前页面发送get请求 //示例代码 请求路径为当前页面路径 "/product"...

首先,我们要清楚搜索框中根据关键字进行条件搜索发送的是get请求,并且是向当前页面发送get请求

//示例代码 请求路径为当前页面路径 "/product" 
<!-- 搜索框 get请求 根据商品名称的关键字进行搜索-->
<form action="/product" class="form-inline pull-left" >
  <input type="text" name="productname" placeholder="商品名称" class="form-control" value="${param.productname}">
  <button class="btn btn-primary"><i class="fa fa-search"></i></button>
</form>

当我们要实现多条件搜索功能时,可以将搜索条件封装为一个map集合,再根据map集合进行搜索

Java实现搜索功能代码详解

controller层代码:

@getmapping("/product")
  public string list(@requestparam(required = false,defaultvalue = "1",name = "p")integer pageno,
            @requestparam(required = false,defaultvalue = "")string productname,
            @requestparam(required = false,defaultvalue = "")string place,
            @requestparam(required = false,defaultvalue = "")integer typeid,
            @requestparam(required = false,defaultvalue = "")bigdecimal minprice,
            @requestparam(required = false,defaultvalue = "")bigdecimal maxprice,
            model model) {
    map<string,object> searchparam = new hashmap<>();
    searchparam.put("productname",productname);
    searchparam.put("place",place);
    searchparam.put("typeid",typeid);
    searchparam.put("minprice",minprice);
    searchparam.put("maxprice",maxprice);
    pageinfo<kaola> pageinfo = kaolaservice.findbypageno(pageno,searchparam);
    model.addattribute("pageinfo",pageinfo);
    return "product/list";
  }

业务层代码:

public pageinfo<kaola> findbypageno(integer pageno, map<string, object> searchparam) {
    pagehelper.startpage(pageno,10);
    list<kaola> kaolalist = kaolamapper.findbysearchparamwithtype(searchparam);
    return new pageinfo<>(kaolalist);
}

mybatis中的mapper.xml:

<select id="findbysearchparamwithtype" resulttype="com.kaishengit.entity.kaola">
    select
      kaola.*, kaola_type.id as 'kaolatype.id',
      kaola_type.type_name as 'kaolatype.typename',
      parent_id as 'kaolatype.parentid'
    from
      kaola
    inner join kaola_type on kaola.type_id = kaola_type.id
    <where>
      <if test="productname != null and productname != ''">
        kaola.product_name like concat('%',#{productname},'%')
      </if>
      <if test="place != null and place != ''">
        and kaola.place = #{place}
      </if>
      <if test="typeid != null and typeid != ''">
        and kaola.type_id = #{typeid}
      </if>
      <if test="minprice !=null and minprice != ''">
        <![cdata[ and kaola.price >= #{minprice} ]]>
      </if>
      <if test="maxprice !=null and maxprice != ''">
        <![cdata[ and kaola.price <= #{maxprice} ]]>
      </if>
    </where>
    order by kaola.id desc
</select>

这样,就可以从前端到后端实现多条件搜索功能了。我们还会遇到这样一种情况,在输入搜索条件时,显示列表会不断自动刷新,这里其实用到了ajax的相关内容,在输入的过程中,会不断发出ajax请求,然后刷新页面。

<input type="text" name="productname" placeholder="商品名称" class="form-control" value="${param.productname}">
value="${param.productname}"
是从请求url的参数中获取值,实现在输入关键字搜索后刷新页面显示关键字这一功能,直接上图:

Java实现搜索功能代码详解

在输入中文关键字进行搜索时,可以使用encodeuricomponent解决url路径显示中文乱码问题:

//分页
$('#pagination-demo').twbspagination({
  totalpages: ${pageinfo.pages},
  visiblepages: 10,
  first:'首页',
  last:'末页',
  prev:'上一页',
  next:'下一页',
  href:"?productname="+encodeuricomponent('${param.productname}')+"&place="+encodeuricomponent('${param.place}')
  + "&typeid=${param.typeid}&minprice=${param.minprice}&maxprice=${param.maxprice}&p={{number}}"
});

Java实现搜索功能代码详解

点击查看大图

Java实现搜索功能代码详解

搜索结果

总结

以上所述是小编给大家介绍的java实现搜索功能代码详解,希望对大家有所帮助