SQL语句优化:根据用户ID、租户ID和关键词模糊查询任务列表
这句SQL查询的是根据用户ID、租户ID和一些其他条件从BPM_TASK表中获取任务列表。查询的结果类型为com.redxun.bpm.core.entity.BpmTask。
要添加一个名为query的参数,并使用它对BUS_KEY_、SUBJECT_和CREATE_BY_进行模糊匹配,可以将以下代码添加到查询中:
<if test='query != null and query != '''>
and (BUS_KEY_ like concat('%', #{query}, '%') or SUBJECT_ like concat('%', #{query}, '%') or CREATE_BY_ like concat('%', #{query}, '%'))
</if>
对应的Java代码应该如下所示:
IPage<BpmTask> getByUserId(IPage<BpmTask> page, @Param("w") Map<String, Object> params, @Param("userId") String userId, @Param("groupIds") List<String> groupIds, @Param("tenantId") String tenantId, @Param("query") String query);
请注意,添加query参数的位置应该在其他参数的后面。
另外,为了避免SQL语法错误,还需要将查询中的ORDER BY子句移动到where条件的后面。最终的SQL查询应该如下所示:
SELECT v.* FROM (
SELECT t.* FROM BPM_TASK t
LEFT JOIN bpm_def d ON t.def_id_ = d.def_id_
WHERE ASSIGNEE_ = #{userId} AND t.TENANT_ID_ = #{tenantId} AND t.STATUS_ != 'COMPLETED' AND t.STATUS_ != 'LOCKED'
UNION
SELECT t.* FROM bpm_task t
LEFT JOIN bpm_def d ON t.def_id_ = d.def_id_
LEFT JOIN bpm_task_user u ON t.TASK_ID_ = u.TASK_ID_
WHERE t.ASSIGNEE_ IS NULL AND t.STATUS_ != 'COMPLETED' AND t.STATUS_ != 'LOCKED' AND (u.USER_ID_ = #{userId} AND t.TENANT_ID_ = #{tenantId}
<if test='@rx.Ognl@isNotEmpty(groupIds)'>OR u.GROUP_ID_ IN
<foreach collection='groupIds' item='id' separator=',' open='(' close=')'>#{id}</foreach>
</if>
)
) v WHERE 1 = 1
<if test='@rx.Ognl@isNotEmpty(w.whereSql)'>
AND ${w.whereSql}
</if>
<if test='query != null and query != '''>
AND (BUS_KEY_ LIKE CONCAT('%', #{query}, '%') OR SUBJECT_ LIKE CONCAT('%', #{query}, '%') OR CREATE_BY_ LIKE CONCAT('%', #{query}, '%'))
</if>
<if test='@rx.Ognl@isNotEmpty(w.orderBySql)'>
AND ${w.orderBySql}
</if>
ORDER BY v.create_time_ ASC
请注意,根据具体的情况,你可能还需要调整查询中的其他部分以适应你的业务逻辑和数据库结构。
原文地址: https://www.cveoy.top/t/topic/oO6w 著作权归作者所有。请勿转载和采集!