mybatis 实现将查询条件写入查询结果中
需求分析
近日,接到一需求,需要将HR 拨出号码 数据作为条件,查询是否与 每日HR上传至 人才库 的
简历电话号码匹配,用以直观的看到HR的工作效率。
简单分析过后发现该需求有两个难点
1.如何将前端传回的 phones 数据作为查询条件的同时可以展示到查询结果中
2.如何保证排序( 实际查询结果中发现,left join有数据的查询结果总是会被置顶 )
解决方法
1.sql 的 select 可以指定常量,包括对象里面的数据。根据 mybatis 语法可以直接 'select #{字段名1} as amount,#{字段名2} as store_code' 就可以转换这个对象,
MySQL中 'UNION' 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据.
2.由于 'UNION' 操作符会删除重复数据,带来了一个新的问题,传入的查询数据有可能有重复的拨号,并且我们需要按照查询条件的顺序排序。
该问题可以通过 'mybatis' 的 '<foreach>' 解决.排序则可以通过将'index' 也查询出来,最后 'order by'即可
实例展示
点击查看代码
SELECT
ab.phone,
IF
( m.phone is null, '否', '是' ) AS isMatching,
u.nick_name AS nickName,
m.create_time AS createDate
FROM
(
<foreach collection="phone" item="item" index="index" separator="union">
SELECT #{item} as phone,#{index} as id
</foreach>
) ab
# ---业务逻辑,无需观看---
LEFT JOIN (select phone,create_by,create_time,create_by_id from target where create_time between date_format(#{startTime},'%y-%m-%d 00:00:00') and date_format(#{endTime},'%y-%m-%d 23:59:59') group by phone) m ON m.phone = ab.phone
LEFT JOIN user u ON u.user_id = m.create_by_id
order by ab.id
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?