• 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 + "%");
    	}
    

    本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/15747242.html

  • 相关阅读:
    IOS Block-Block块的使用与理解
    IOS 多线程03-GCD
    IOS 多线程01-线程基础知识
    JavaScript高级-定义函数(类)方法
    互联网技术笔试总通不过?leetcode刷对了么
    Redis 内存满了怎么办? Redis的内存淘汰策略
    SpringBoot项目优化和Jvm调优
    中台的末路
    Java 应用中的日志
    Spring Boot 支持https
  • 原文地址:https://www.cnblogs.com/shan333/p/15747242.html
Copyright © 2020-2023  润新知