mybatis 使用JSON_EXTRACT搜索json,参数是不固定的Map<String,Object>

345 阅读1分钟

如果参数Map<String, Object>中的key值是不固定的,那么可以通过使用<foreach>标签来动态构建SQL语句,具体实现方式如下:

  1. Map<String, Object>参数中的搜索条件转换成List<Map.Entry<String, Object>>形式,方便使用<foreach>标签进行动态拼接SQL语句。
javascriptCopy code
List<Map.Entry<String, Object>> searchList = new ArrayList<>(params.entrySet());
  1. 在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>
  1. 在mapper接口中定义方法,使用@Param注解来指定传入参数的名称。
javascriptCopy code
List<MyObject> searchByJson(Map<String, Object> params);

这样就可以根据传入的参数动态构建SQL语句,进行JSON_EXTRACT函数的搜索操作。