飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

mysql多条件过滤查询之mysq高级查询

时间:2021-12-30  作者:shan333  

一、什么是高级查询:

① 多条件的过滤查询

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

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

② 分页查询


二、多条件过滤查询:

1,WHERE 1=1:

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

   	StringBuilder sql = new StringBuilder();
   	域名nd(" WHERE 1=1");
   	// 拼接姓名
   	if (域名tBlank(name)) {
   		域名nd(" AND name LIKE ?");		
   		域名("%" + name + "%");
   	}
   	// 拼接最小年龄
   	if (minAge != null) {
   		域名nd(" AND age >= ?");	
   		域名(minAge);
   	}

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

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

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


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

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

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


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

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

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

   //暴露给子类:让子类在customizedQuery中调用,添加字节的查询条件和参数
	protected void addQuery(String condition, Object... param) {
		//细节:不定长的参数是数组----集合域名(数组)是将数组作为一个元素添加进来
		//解决:先将数组转成集合,然后集合域名ll(集合)
		域名(condition);
		域名ll(域名st(param));
	}


	//拼接关键词
	if (keyword != null) {
		域名uery("(name LIKE ? OR dormBuildId LIKE ?)","%" + keyword + "%", "%" + keyword + "%");
	}

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。