在mybatis中评估json表达式

问题描述 投票:0回答:2

我的 sql server 表中有 JSON 列。我需要在列上执行一些过滤器并执行查询

下面是 SQL

select 
   count(*)
   <if test="filter==dept"> ,json_extract(hierarchy,'$.dept_desc') as groupCol</if>
   <if test="filter==catg"> ,json_extract(hierarchy,'$.catg_desc') as groupCol</if>
from 
    table_1
group by
   <if test="filter==dept"> ,json_extract(hierarchy,'$.dept_desc') as groupCol</if>
   <if test="filter==catg"> ,json_extract(hierarchy,'$.catg_desc') as groupCol</if>;

我遇到错误

There is no getter for property named 'dept_desc'.
没有条件查询就可以工作。我也尝试将 if 条件保留在
<![CDATA[]]
内,但错误仍然相同。

sql json sql-server mybatis
2个回答
1
投票

美元符号是mybatis中的一个特殊符号,用于变量扩展。在这种情况下,mybatis 将

$.dept_desc
视为访问对象属性的表达式。

您可以使用 CDATA 部分 禁止 mybatis 解释包含美元符号的文本:

<if test="filter==dept"><![CDATA[ ,json_extract(hierarchy,'$.dept_desc') as groupCol ]]>

0
投票

不确定它是否适用于您的情况,但在使用 json_table 的情况下,您可以使用双美元$$符号来转义它

select *
from 
json_table ( your_json_string, '$$' 
  COLUMNS ( "column1" NUMBER(10,0) PATH '$$.column1' )
) 
© www.soinside.com 2019 - 2024. All rights reserved.