一、問題描述
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>