一、什么是高级查询:

① 多条件的过滤查询

简单说,即拼接sql语句,在sql查询语句之后使用:

where 条件1  and/or 条件2 and/or 条件3 …

② 分页查询

二、多条件过滤查询:

1,WHERE 1=1:

​ 是一个永远为true的条件【mysql安全注入漏洞】,通过 1=1 的条件,避免判断where后边应该接收那个字段【考虑到拼接的几个字段都为空】。

   	StringBuilder sql = new StringBuilder();
sql.append(" WHERE 1=1");
// 拼接姓名
if (StringUtils.isNotBlank(name)) {
sql.append(" AND name LIKE ?");
parameters.add("%" + name + "%");
}
// 拼接最小年龄
if (minAge != null) {
sql.append(" AND age >= ?");
parameters.add(minAge);
}

2、WHERE 1=1 问题:影响性能,因为不能使用索引查询了。

解决where 1=1 索引问题【定义一个容器,当容器放进了条件,取出容器的条件(第一个条件前拼接上where,其他拼接and)】

sql.append(" WHERE ");
//利用Apached 的组件 Apache commons-lang 组件:StringUtils的join方法:把集合中每个元素使用特定的字符串连接起来
sql.append(StringUtils.join(conditions, " AND "));

3、思维:封装与职责分离

1:封装:参数过多应该封装成一个对象

2:职责分离:谁拥有该数据,谁就应该包含操作该数据的方法


4、关键字查询(从多个列中做查询)

例如:查询商品名称中或者商品品牌中带有'中国'。

细节:AND的优先级高于OR 关键字查询的多列查询拼接sql要记得使用()括起来

   //暴露给子类:让子类在customizedQuery中调用,添加字节的查询条件和参数
protected void addQuery(String condition, Object... param) {
//细节:不定长的参数是数组----集合parameters.add(数组)是将数组作为一个元素添加进来
//解决:先将数组转成集合,然后集合parameters.addAll(集合)
this.conditions.add(condition);
this.parameters.addAll(Arrays.asList(param));
} //拼接关键词
if (keyword != null) {
super.addQuery("(name LIKE ? OR dormBuildId LIKE ?)","%" + keyword + "%", "%" + keyword + "%");
}

mysql多条件过滤查询之mysq高级查询的更多相关文章

  1. MySql 筛选条件、聚合分组、连接查询

    筛选条件 比较运算符 等于: = ( 注意!不是 == ) 不等于: != 或 <> 大于: > 大于等于: >= 小于: < 小于等于: <= IS NULL I ...

  2. 031 Spring Data Elasticsearch学习笔记---重点掌握第5节高级查询和第6节聚合部分

    Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己 ...

  3. Winform开发框架之通用高级查询模块

    最近一直忙于公司的事情,虽然一直在做一些相关的技术研究,但是很久没能静下心来好好写写博客文章了,想想也有半个月之多了,这半个月来,也一直致力于改善我的WInform开发框架,使得自己及客户使用起来更加 ...

  4. 教你用Java web实现多条件过滤功能

    生活中,当你闲暇之余浏览资讯的时候,当你搜索资料但繁杂信息夹杂时候,你就会想,如何更为准确的定位需求信息.今天就为你带来: 分页查询 需求分析:在列表页面中,显示指定条数的数据,通过翻页按钮完成首页/ ...

  5. JavaWeb项目之多条件过滤

    相信很多同学在学习java基础之后,面对各种项目还是相当头疼,那今天我将手把手教你学会JavaWeb项目中的多条件过滤,希望你能在与我实战的过程中积累经验,更进一步. 分页查询 需求分析:在列表页面中 ...

  6. SQL Server高级查询

    简介 关于数据库,我们经常会听说"增查删改"之类的词语,听起来很简单,但是如果想要准确的获取到需要的数据的话,还是要花点功夫的.下面由我来和大家谈谈高级查询的用法以及和普通查询的区 ...

  7. jqgrid自定义列表开发=》实现高级查询

    标题已指出本文要说的三件事,首先是主角jqgrid,将应用在自定义列表中,重点介绍如何实现高级查询. 使用jqgrid实现自定义列表分为两大步骤,首先是要根据业务完成jqgrid的对象定义,即列表的描 ...

  8. Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework

    最近项目确实忙,但也是一直忙于有关项目和框架技术的事情,也一直致力于改善我的WInform开发框架.使得自己及客户使用起来更加方便,更加友好,更加高效. 在很多程序模块中都很常见,也是给客户扩展查询的 ...

  9. mongoDB 高级查询语法

    http://www.cnblogs.com/ITAres/articles/2084794.html本文参考自官方的手册:http://www.mongodb.org/display/DOCS/Ad ...

随机推荐

  1. Leetcode中的SQL题目练习(一)

    595. Big Countries https://leetcode.com/problems/big-countries/description/ Description name contine ...

  2. [PE]结构分析与代码实现

    PE结构浅析 知识导向: 程序最开始是存放在磁盘上的,运行程序首先需要申请4GB的内存,将程序从磁盘copy到内存,但不是直接复制,而是进行拉伸处理. 这也就是为什么会有一个文件中地址和一个Virtu ...

  3. 机器学习常用python包

    (py37) ai@ai:~$ pip freeze |grep -v '@' astor==0.8.1 certifi==2021.5.30 chardet==4.0.0 cycler==0.10. ...

  4. EasyExcel读写Excel

    使用过 poi 的开发同学可能都有此体会,每次都要写一坨代码,最后的代码如下面一样: 这样的代码是不是又臭又长?当字段数量多的时候,一不小心还容易写错.阿粉还记得当初使用 poi 导出一个二十多字段的 ...

  5. Spring(3):AOP面向切面编程

    一,AOP介绍 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开 ...

  6. Java Timestamp 类的使用

    很简单,我们可以这样声明 Timestamp ts=new Timestamp(new Date().getTime());这样我们就可以得到时间比较具体的一个类型转换!!! 在开发web应用中,针对 ...

  7. spring-cloud-alibaba-dependencies版本问题

    org.springframework.cloud的spring-cloud-alibaba-dependencies管理的nacos最新版本是0.9.0.RELEASE,已经不再维护了,用起来有版本 ...

  8. Linux上Zookeeper集群搭建

    一.官网 https://zookeeper.apache.org/ 二.下载安装 (1)下载 复制链接地址  http://mirror.bit.edu.cn/apache/zookeeper/zo ...

  9. Socket通信和多线程的总结

    1.ServerSocket进行多线程接收 package com.yh.chat; import java.io.IOException; import java.net.ServerSocket; ...

  10. JavaEE复习三

    Http协议是基于请求/响应模式.无状态的协议:所有请求时相互独立的.无连续的:服务器无法记住与识别用户. 对于简单的页面浏览或信息获取,http协议可以完全胜任:对于需要提供客户端和服务器端交互的网 ...