一、问题描述
mybatis框架下SQL查询时,mybatis会错误的将>与<认为是xml的分隔符,会导致如下类型的错误:
<select id="findAllMenu" resultMap="MenuVOResultMap">
SELECT mm.id as id,mm.title as title,mm.path as path,sm.id as sid,sm.title as stitle,sm.path as spath
from
(SELECT id,title,path,parent from sys_menus where <![CDATA[ parent >0 ]]> ) as sm
left join
(SELECT id,title,path,parent from sys_menus where <![CDATA[ parent <1 ]]>) mm
on sm.parent=mm.id
</select>
Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。
二、解决办法
1、 <![CDATA[带有>=和 <=的语句括起来]]>
<select id="findAllMenu" resultMap="MenuVOResultMap">
SELECT mm.id as id,mm.title as title,mm.path as path,sm.id as sid,sm.title as stitle,sm.path as spath
from
(SELECT id,title,path,parent from sys_menus where <![CDATA[ parent >0 ]]> ) as sm
left join
(SELECT id,title,path,parent from sys_menus where <![CDATA[ parent <1 ]]>) mm
on sm.parent=mm.id
</select>
2、用<;代替小于号,用>;代替大于号
<select id="findAllMenu" resultMap="MenuVOResultMap">
SELECT mm.id as id,mm.title as title,mm.path as path,sm.id as sid,sm.title as stitle,sm.path as spath
from
(SELECT id,title,path,parent from sys_menus where parent > 0) as sm
left join
(SELECT id,title,path,parent from sys_menus where parent < 1 ) mm
on sm.parent=mm.id
</select>