如果参数Map<String, Object>
中的key值是不固定的,那么可以通过使用<foreach>
标签来动态构建SQL语句,具体实现方式如下:
- 将
Map<String, Object>
参数中的搜索条件转换成List<Map.Entry<String, Object>>
形式,方便使用<foreach>
标签进行动态拼接SQL语句。
javascriptCopy code
List<Map.Entry<String, Object>> searchList = new ArrayList<>(params.entrySet());
- 在mybatis的xml文件中使用
<foreach>
标签来遍历searchList
列表,构建JSON_EXTRACT函数的SQL语句。具体来说,可以使用${item.key}
来引用遍历得到的searchList
中的key值,${item.value}
来引用对应的value值。
csharpCopy code
SELECT * FROM my_table
WHERE 1=1
<foreach collection="searchList" item="item">
AND JSON_EXTRACT(json_column, '$.${item.key}') = #{item.value}
</foreach>
- 在mapper接口中定义方法,使用
@Param
注解来指定传入参数的名称。
javascriptCopy code
List<MyObject> searchByJson(Map<String, Object> params);
这样就可以根据传入的参数动态构建SQL语句,进行JSON_EXTRACT函数的搜索操作。