ibatis 中的Oracle语句中# #好像不生效,不能正确选择出数据(很急)
ibatis 中的Oracle语句中# #好像不生效,不能正确选择出数据(很急)
我原来用的是mysql+ibatis ,最近换成:oracle+ ibatis,原来是可以使用的,但是换成了oracle后,感觉##不正确,不能选择出正确的数据:
resultMap是:
<resultMap class="menu" id="menuResult"> <result column="MENUID" property="menuId" /> <result column="MENUNAME" property="menuName" /> <result column="TYPE" property="type" /> <result column="ACTIONID" property="action" select="menu.getActionById" /> <result column="PARENTID" property="parentId" /> <result column="SORTORDER" property="sortOrder" /> <result column="REMARK" property="remark" /> </resultMap>
<select id="getMenu" resultMap="menuResult"> select * from sys_menu <dynamic prepend="where"> <isNotEmpty property="menu.menuId" prepend="and"> menuId=#menu.menuId# </isNotEmpty> <isNotEmpty property="menu.parentId" prepend="and"> parentId=#menu.parentId# </isNotEmpty> <isNotEmpty property="roleList" prepend="and"> exists (select id from sys_rolemenu where sys_rolemenu.menuid=sys_menu.menuid <iterate property="roleList" prepend="and" open="(" close=")" conjunction="or"> roleid=#roleList[].roleId# </iterate> ) </isNotEmpty> </dynamic> order by sortOrder </select>
另外:插入数据是可以的:
DEBUG - {pstm-100033} Executing Statement: insert into sys_log (id, action_name, employeeId, oper_time) values (?, ?, ?, ?)
DEBUG - before Locale=zh_CN
DEBUG - {pstm-100033} Parameters: [F3D3723DB4E74C2992EA938BB0E08793, workList_toWorkList.do, 1, 2012-06-17 10:57:47.484]
这个可以,对应的xml是:
<insert id="addLog" parameterClass="log">
insert into sys_log (id,
action_name, employeeId, oper_time)
values (#id#,
#actionName#,
#employeeId#,
#operTime#)
</insert>
可以执行成功,那么我就怀疑是不是我原来的mysql 默认的是自动在字符上增加的引号是:"" ,而oracle 需要的是'',请大师给我分析一下如何解决?
[解决办法]
Oracle中字符串必须用 单引号,所以你修改错了,应该是:
<select id="getMenu" resultClass="workmenu"> select * from sys_WorkMenu where parentid='TREEROOT' order by sortOrder </select>
[解决办法]
另一种恶心点的测试方法是:
<isNotEmpty property="menu.parentId" prepend="and">
parentId='$menu.parentId$'
</isNotEmpty>