Mybatis mysql 一个搜索框多个字段模糊查询 几种方法
第一种 or
根据搜索框给定的关键词,模糊搜索用户名和账号都匹配的用户集合
<select id="list" parameterType="com.user.UserInfo" resultType="com.user.UserInfo">
SELECT
*
FROM
user
WHERE
1 = 1
<if test="searchParam != null and searchParam != ''">
AND CONCAT(user_name, user_account) LIKE CONCAT('%',#{searchParam},'%')
</if>
</select>
但是以上查询中,如果user_name 或者 user_account 中任意一个属性的所有数据为null时(比如account字段的所有值均未赋值,默认值为null),即使另一个中包含查询的数据,也查询不到数据。
两种解决方法:
1.给可能为null的查询字段设置默认值,空字符串或者其他;
2.改用or连接多个模糊查询
AND CONCAT(user_name, user_account) LIKE CONCAT('%',#{searchParam},'%')
改为
AND user_name like CONCAT('%',#{searchParam},'%')
or user_account like CONCAT('%',#{searchParam},'%')
and station_name like CONCAT('%',#{queryRecordVO.stationName},'%')
or user_number like CONCAT('%',#{queryRecordVO.stationName},'%')

感觉用or的话 用postman测试接口的时候 把前面模糊查询有点影响 查出来的数据感觉有点乱
第二种 CONCAT(VALUE_CODE, NAME)
<select id="list" parameterType="ParamConfigCondition" resultType="ParamConfig">
SELECT
a.PARAM_CODE,
a.VALUE_CODE,
a.`NAME`,
a.IS_READ_ONLY,
a.DESCR
FROM
TPT_PARAM_CONFIG a
WHERE
1 = 1
<if test="paramCode != null and paramCode != ''">
AND a.PARAM_CODE = #{paramCode}
</if>
<if test="searchParam != null and searchParam != ''">
AND CONCAT(`VALUE_CODE`, `NAME`) LIKE CONCAT('%',#{searchParam},'%')
</if>
</select>
注:CONCAT(VALUE_CODE, NAME) 其中字段如果是关键字是要用”`”来引起来的,不然会报错!
暂时在用第二种
第三种 concat_ws(...)
百度方法 https://jingyan.baidu.com/article/11c17a2c6da078f446e39daa.html
mysql可以对数据库多个字段同时进行模糊查询,例如:数据库设计中把姓名设计为两个字段,一个字段为姓LASTNAME,一个字段为名字FIRSTNAME。当界面进行模糊搜索时,mysql中有concat(...),concat_ws(...)两个函数。
例子如下:
SELCET * FROM T-USER U WHERE CONCAT(U.LASTNAME,U.FIRSTNAME) LIKE '%$LSP_NAME$%'
LASTNAME 字段是姓
FIRSTNAME字段是名字

当查询字段为null时,返回结果为null。与concat_ws(...)不同。

如果为多个字段同时进行查询时,使用concat_ws(...).
select concat_ws(',','11','22','33');
select concat_ws(',','11','22','33',null);
都返回11,22,33

CONCAT_WS() 代表 CONCAT With Separator,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。
CONCAT()可以连接一个或者多个字符串,CONCAT_WS()可以添加分割符参数。

Mybatis mysql 一个搜索框多个字段模糊查询 几种方法的更多相关文章
- MySQL单表多字段模糊查询
今天工作时遇到一个功能问题:就是输入关键字搜索的字段不只一个字段,比如 我输入: 超天才 ,需要检索出 包含这个关键字的 name . company.job等多个字段.在网上查询了一会就找到了答案. ...
- MySQL简单实现多字段模糊查询
我所做的商城项目前些时提了新需求,要求前台搜索商品除了能通过商品名称搜索到以外,还可以通过别个信息搜索,比如:商品编号.详情内容描述等等,类似于全文搜索了.我首先想到的就是lucene,但是对代码这样 ...
- MySQL单表多字段模糊查询解决方法 又折磨半天concat(字段不能为空,如为空则用IFNULL(字段,'');
SELECT `id`,`weixin_id`,`user_name`,`sex`,`area_id`,`address_near`,`phone`,`create_time`,`import_use ...
- Mysql 之实现多字段模糊查询
在一个table中有省,市,县,期,栋,单元,室几个字段,然后用户输入一个地址从表中的字段拼接起来进行模糊查询. 解决办法: <MySQL权威指南>中CONCAT的使用方法,在书中的对CO ...
- Mysql多字段模糊查询
MySQL同一字段多值模糊查询 一. 同一字段多值模糊查询,使用多个or进行链接,效率不高,但没有更好的解决方案.(有看到CHARINDEX 关键字,可查询结果并不是模糊,举个栗子 例如SELECT ...
- 查询 MySQL 字段注释的 5 种方法!
很多场景下,我们需要查看 MySQL 中表注释,或者是某张表下所有字段的注释,所以本文就来盘点和对比一下查询注释的几种方式. 创建测试数据库 开始之前咱们先创建一个数据库,以备下面演示使用. -- 如 ...
- 【MySQL】锁——查看当前数据库锁请求的三种方法 20
MySQL提供了查看当前数据库锁请求的三种方法:1. show full processlist命令 观察state和info列 2. show engine innodb status\G ...
- 对一个表中所有列数据模糊查询adoquery
如何用adoquery对一个表中所有列进行模糊查询: procedure TForm3.Button4Click(Sender: TObject); var ASql,AKey: string; I: ...
- 10.我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形. 请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 是不是发现看不懂,哈哈:编程题就是这样,一定要归纳,手写过程: n ...
随机推荐
- 关于mysql8.0及以上版本连接navicat时候报错(密码加密方式需要修改)
首先这个原因是因为MySQL版本的密码加密方式变了,要把它修改成以前的方式(因为,navicat不支持这种方式) 1:先进入mysql: mysql -uroot -p123456; 2:查询密码加密 ...
- 【VS开发】Cameralink接口
目录 1 Camera Link接口的三种配置 ▪ Base Camera Link ▪ Medium Camera Link ▪ Full Camera Link 2 Camera Link三种接口 ...
- 深入理解java:4. 框架编程
了解 Servlet 和 Filter Servlet(即servlet-api.jar) 是 J2EE 最重要的一部分,有了 Servlet 你就是 J2EE 了,J2EE 的其他方面的内容择需采用 ...
- 微信小程序 解析html格式内容
需要引入html-view文件 1/js 代码 const HtmlParser=require('../../utils/html-view/index') data: { coupon_text: ...
- webdriver中判断元素是否存在的方法
selenium.webdriver中没有内置的判断元素是否存在的方法,所以定义一个方法,如果找到该元素则返回True,否则返回False: from selenium import webdrive ...
- AttributeError: 'dict' object has no attribute 'status_code'
前端AJAX请求数据,提示错误:“AttributeError: 'dict' object has no attribute 'status_code'”. 原因:是提示返回对象dict没有“sta ...
- spring boot-1.简单介绍及环境搭建
1.简介 spring boot 是在spring 基础上进行了全面整合的架构,个人认为优点在于以下几点: 1.简化配置,甚至零配置即可开发出一个web应用.spring boot 默认配置了大量的s ...
- olap和Oltp(转)
OLAP和OLTP的区别(基础知识) 联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则.OLAP的提出引起了很大的反响, ...
- python——元组方法及字符串方法
元组方法 Tup.count():计算元组中指定元素出现的次数 Tup.count('c') Tup.index():在元组中从左到右查找指定元素,找到第一个就返回该元素的索引值 Tup.index( ...
- Ubuntu下软件打开时状态图标与原始图标不重合问题解决
问题描述 如下图书所示,pycharm打开时,运行的pycharm图标与原始的在收藏夹中的图标不重合.而其他软件不会这样,运行软件的图标与原始图标会重合, 解决办法 把鼠标悬浮在打开的pycharm上 ...