类似于淘宝网进行搜索商品的时候,可以在搜索框进行模糊搜索,同时可以进行条件筛选,例如想买一只 口红? 的时候,可以在搜索框内输入“口红”,还可以选择品牌、
是
否包邮、价格区间等等。。最后搜索出来的结果是满足所有筛选的条件的。
页面默认加载全部数据
一、前言现有一个需求:实现多条件、不确定条件的搜索功能。类似于淘宝网进行搜索商品的时候,可以在搜索框进行模糊搜索,同时可以进行条件筛选,例如想买一只 口红? 的时候,可以在搜索框内输入“口红”,还可以选择品牌、是否包邮、价格区间等等。。最后搜索出来的结果是满足所有筛选的条件的。这里我认为的难点就是:这些条件你不确定需不需要,你不确定选了几个,所以说这些都是动态的。我总结了一句话来进
最近开发处理公司的需求业务时,碰到一个
mybatis
在处理or连接多
条件
查找时的方法 的问题,在
mybatis
的
foreach
去处理OR这种
条件
查询
语句
,在拼接时发现了一个问题,当第一个
条件
不成立时,会出现and ( or
条件
2 or
条件
3 or
条件
4), 这样就会出问题, 所以思考良久,得出以下解决方案:(所有
条件
都放在list里,用1,2,3,4来判断)。
<if test="dto.statu.size()>1">
AND ( 1!=1
Mybatis
中
使用
foreach
遍历Map
实现
多
条件
查询
对于多
条件
查询
,我们
使用
map存储所有的
条件
,但是我不想手动对所有的value进行判断是否为空,于是想到遍历map,但事实是OGNL表达式的
foreach
并不支持map的遍历!
在多方尝试之后,我有了一个大胆的想法,在需要作为参数的map中加入该map自己所有的key,然后到xml中取出所有的key进行占位赋值,这样就可以遍历所有的
条件
,
// 多
条件
查询
Map<String,Object> map = new HashMap<
一、写在前面
MyBatis
动态
SQL
的一个常用的操作需求是对一个集合进行遍历,通常是在构建 IN
条件
语句
的时候。
foreach
允许你指定一个集合,声明可以在元素体内
使用
的集合项(item)和索引(index)变量。
foreach
是
动态
SQL
中一个非常强大的标签。下面就来体验一下
foreach
标签带来的便捷之处,有关批量操作的
实现
,这里以批量插入数据为例。
二、
foreach
遍历...
项目场景:
项目背景为监控管理平台,告警配置板块,需要
查询
返回多个数据信息,其中需要对订阅人的
查询
返回功能进行优化,将原本的只能输入一个订阅人名字进行
查询
优化为输入多个订阅人名,以英文逗号分隔,返回包含他们的结果,同时带有模糊查找功能
问题描述:
源代码只有单一
条件
,即只需输入一个人名进行查找并返回结果即可,因此,只需要
动态
Sql
同时
使用
like关键字,
使用
concat函数将%与
动态
数据拼接即可
实现
模糊查找功能。
仔细观察,这里的匹配为两种方式的匹配,即是否and该column取决于login_id或na
上图表中的release_content 存的是另外一个表的两个主键。两个主键用’ , ‘分割,不同的数据用’ ; '分割
该表中一条数据对应另一个表的多条数据。
第一种方法就是:用循环去
查询
但是效率太慢了
第二种方法:利用mybatics 的
foreach
循环
条件
可以比较轻松的去进行,但是需要提前将release_content用’ ; '提前分割好。从新传到
sql
语句
里
第三种:最简单的方法就是利用模糊
查询
pj_no 对应 ‘CO000848’ , dev_no 对应 ‘2’
concat是用来拼接.
MyBatis
提供了
动态
SQL
的功能,可以按照
条件
动态
生成
SQL
语句
。
动态
SQL
语句
可以
使用
XML 或注解的方式来编写。下面以 XML 的方式来演示如何
使用
动态
SQL
。
MyBatis
的
动态
SQL
语句
主要有以下几种标签:
- if:判断
条件
是否成立,成立则执行
SQL
语句
- choose、when、otherwise:类似于 switch
语句
,根据
条件
选择执行的
SQL
语句
-
foreach
:循环遍历集合或数组,生成多条
SQL
语句
- set:设置更新
语句
的属性值
- where:设置
查询
语句
的
条件
下面是一个
使用
if 和 where 标签的
动态
SQL
示例:
```xml
<select id="getUserList" resultType="User">
SELECT * FROM user
<where>
<if test="name != null">
AND name = #{name}
<if test="age != null">
AND age = #{age}
</where>
</select>
这个示例中,如果传入的参数 name 不为空,则在
SQL
语句
中添加一个
条件
name = #{name},如果传入的参数 age 不为空,则在
SQL
语句
中添加一个
条件
age = #{age}。最终生成的
SQL
语句
类似于:
```
sql
SELECT * FROM user WHERE name = '张三' AND age = 20
以上是
MyBatis
动态
SQL
的简单示例,更多的语法和标签请参考
MyBatis
官方文档。