mysql多条件过滤查询之mysq高级查询
一、什么是高级查询:
① 多条件的过滤查询
简单说,即拼接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高级查询的更多相关文章
- MySql 筛选条件、聚合分组、连接查询
筛选条件 比较运算符 等于: = ( 注意!不是 == ) 不等于: != 或 <> 大于: > 大于等于: >= 小于: < 小于等于: <= IS NULL I ...
- 031 Spring Data Elasticsearch学习笔记---重点掌握第5节高级查询和第6节聚合部分
Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己 ...
- Winform开发框架之通用高级查询模块
最近一直忙于公司的事情,虽然一直在做一些相关的技术研究,但是很久没能静下心来好好写写博客文章了,想想也有半个月之多了,这半个月来,也一直致力于改善我的WInform开发框架,使得自己及客户使用起来更加 ...
- 教你用Java web实现多条件过滤功能
生活中,当你闲暇之余浏览资讯的时候,当你搜索资料但繁杂信息夹杂时候,你就会想,如何更为准确的定位需求信息.今天就为你带来: 分页查询 需求分析:在列表页面中,显示指定条数的数据,通过翻页按钮完成首页/ ...
- JavaWeb项目之多条件过滤
相信很多同学在学习java基础之后,面对各种项目还是相当头疼,那今天我将手把手教你学会JavaWeb项目中的多条件过滤,希望你能在与我实战的过程中积累经验,更进一步. 分页查询 需求分析:在列表页面中 ...
- SQL Server高级查询
简介 关于数据库,我们经常会听说"增查删改"之类的词语,听起来很简单,但是如果想要准确的获取到需要的数据的话,还是要花点功夫的.下面由我来和大家谈谈高级查询的用法以及和普通查询的区 ...
- jqgrid自定义列表开发=》实现高级查询
标题已指出本文要说的三件事,首先是主角jqgrid,将应用在自定义列表中,重点介绍如何实现高级查询. 使用jqgrid实现自定义列表分为两大步骤,首先是要根据业务完成jqgrid的对象定义,即列表的描 ...
- Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework
最近项目确实忙,但也是一直忙于有关项目和框架技术的事情,也一直致力于改善我的WInform开发框架.使得自己及客户使用起来更加方便,更加友好,更加高效. 在很多程序模块中都很常见,也是给客户扩展查询的 ...
- mongoDB 高级查询语法
http://www.cnblogs.com/ITAres/articles/2084794.html本文参考自官方的手册:http://www.mongodb.org/display/DOCS/Ad ...
随机推荐
- day05 django框架之路由层
day05 django框架之路由层 今日内容概要 简易版django请求声明周期流程图(重要) 路由匹配 无名有名分组 反向解析 无名有名解析 路由分发 名称空间 伪静态 虚拟环境 简易版djang ...
- day18定时任务
day18定时任务 什么是定时任务 类似日常生活之中的闹钟:主要用于定时执行某些命令,达到定时处理数据的作用. 作用: 1.类似生活中使用的闹钟 2.可以自动完成操作命令 3.定时备份系统数据信息 定 ...
- Mybatis逆向工程简单介绍
转自:https://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sq ...
- android 调用相机拍照及相册
调用系统相机拍照: private Button btnDyxj; private ImageView img1; private File tempFile; btnDyxj = (Button) ...
- Linux基础命令---mput上传ftp文件
mput 使用lftp登录ftp服务器之后,可以使用put指令将文件上传到服务器.mput指令可以使用通配符,而put指令则不可以. 1.语法 mput [-c] [-d] [-a] ...
- Java Timestamp 类的使用
很简单,我们可以这样声明 Timestamp ts=new Timestamp(new Date().getTime());这样我们就可以得到时间比较具体的一个类型转换!!! 在开发web应用中,针对 ...
- 【转】在本地运行leetcode核心代码
https://zhuanlan.zhihu.com/p/342993772 在调用solution之前,要加一句 Solution solution; solution.函数名(输入变量); 以下是 ...
- Apache Log4j 2 报高危漏洞,CODING 联手腾讯安全护卫软件安全
导语 12 月 9 日晚间,Apache Log4j 2 发现了远程代码执行漏洞,恶意使用者可以通过该漏洞在目标服务器上执行任意代码,危害极大. 腾讯安全第一时间将该漏洞收录至腾讯安全漏洞特征库中,C ...
- 全网最详细的AbstractQueuedSynchronizer(AQS)源码剖析(二)资源的获取和释放
上期的<全网最详细的AbstractQueuedSynchronizer(AQS)源码剖析(一)AQS基础>中介绍了什么是AQS,以及AQS的基本结构.有了这些概念做铺垫之后,我们就可以正 ...
- pipeline post指令
目录 一.介绍 二.参数说明 三.使用实例 一.介绍 post步骤包含的是在整个pipeline或阶段完成后一些附加的步骤.post步骤是可选的,所以并不包含在声明式pipeline最简结构中,但这并 ...