我的 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[]]
内,但错误仍然相同。
美元符号是mybatis中的一个特殊符号,用于变量扩展。在这种情况下,mybatis 将
$.dept_desc
视为访问对象属性的表达式。
您可以使用 CDATA 部分 禁止 mybatis 解释包含美元符号的文本:
<if test="filter==dept"><![CDATA[ ,json_extract(hierarchy,'$.dept_desc') as groupCol ]]>
不确定它是否适用于您的情况,但在使用 json_table 的情况下,您可以使用双美元$$符号来转义它
select *
from
json_table ( your_json_string, '$$'
COLUMNS ( "column1" NUMBER(10,0) PATH '$$.column1' )
)