Javaweb项目的条件查询(模糊查询)

问题出现的场景
  1. 项目中需要加入一个模块,这个模块负责查询一些数据,并且返还给前端页面显示。但是,这个模块查询数据时候有一些参数,这些参数不是固定的,由用户选择。如果用户什么都不选,则默认查询全部信息。用户每增加一个筛选参数,查询信息的sql函数就拼接一次。
  2. 也就是我们常见的用户进行一些筛选,然后后台根据用户的筛选选项,重新生成符合用户要求的信息
问题的思考
  1. 首先是逻辑:用户前端选择筛选项,点击查询按钮。然后,用户选择的筛选项就作为参数,传递到处理条件查询的 servlet 。处理顺序就是:servlet → service → serviceiml → dao → daoimp。然后一路返回到 servlet,最后将携带过来的信息传给前端,前端再按照一定的格式,进行最终的呈现。
  2. 但是这里面最主要的问题就是如何实现 sql 语句对于不同筛选条件的判定,从而根据不同情况进行 sql 语句的拼接。
  3. 简单来看,就是写一个基础的,然后用户每增加一个选择,就拼接一点 sql 语句,多增加一个选择,就多拼接一点 sql 。
  4. 然后就是如何具体的实现了
问题的解决

具体实现代码如下(仅包括数据库实现部分)
Javaweb项目的条件查询(模糊查询)_第1张图片

其中一些要注意的地方
  1. sql 语句中加 1=1 的原因:https://blog.csdn.net/qq_36654606/article/details/86627720
  2. 关于使用 list 集合来存储要赋值给 sql 语句中 ? 的字符的原因:
    拼接完sql语句之后,sql 语句是会含有许多 ?等待赋值,来形成最终完整的 sql 语句。
    但是,本身拼接时候就无法确定会拼接多少个 sql 。
    所以,在赋值的时候也就无法具体到每一个 ?号。
    因此,选择一个 List 集合,你每进行一次拼接,就意味着你多传进来了一个参数,就多了一个 ? 需要被赋值。而 ArrList.toArray 这个方法的作用就是顺序输出集合内存在的值。通过这样的方式就达到了 拼接sql 语句是动态的,list集合也是动态的。但是,这两个是一一对应的。从而解决了这个问题。
问题的总结
  1. 这只是条件查询中一个很简单,很小的Demo。类似京东天猫这样的电子商城中,动辄几十个的筛选条件,或许不是采用的这种方式。但这种方式肯定有一些参考的价值,初学时候,深入理解一些,再做稍微复杂的条件查寻时候也会更容易理解。

你可能感兴趣的:(JavaWeb基础笔记)