如题,详细问题描述如下:
<select id="getListByPager" parameterClass="java.util.Map" resultClass="User" resultMap="UserResult">
<![CDATA[
select * from (select b.*,rownum rn from BBW_USER b where rownum <=#endRow# and user_state <>2
]]>
 
<isNotEmpty prepend="AND" property="user_accounts">
        (user_accounts like #user_accounts#)
        </isNotEmpty> <isNotEmpty prepend="AND" property="user_name">
        (user_name like #user_name#)
        </isNotEmpty> <![CDATA[
) where rn >=#startRow# order by user_id
]]>
</select>
说明:其中endRow、startRow是我定义的一个Pager类中的属性,用于分页的,另外user_accounts、user_name是我定义的User类里面的属性,和表对应的,我传入的Map对象有两个值,如下:
Map objectMap = new HashMap<String, Object>();
objectMap.put("pager", pager);
objectMap.put("user", user);
两个值都是自定义类型,上面的sql书写方法肯定是错误的,请教各位大侠,该如何书写SQL,或者用什么方法解决这种问题?小弟不胜感激。拜谢

解决方案 »

  1.   

    :(   直接如题所述,会不会更清楚一些?---->   "ibatis中parameterClass参数为Map类型,且值为自定义类型如何解决?"
      

  2.   

    楼主的意思是:parameterClass参数为Map类型,想使用其键"pager"对应值的属性值吧。这是行不通的,因为如果parameterClass参数为Map类型,你就不能使用形如“pager.startRow”获取pager对象的startRow属性值。因为如果你这样使用,IBATIS会认为你的Map中的包含键为“pager.startRow”的一个键值对,而不会认为是pager对象的startRow属性值。你可以自己定义一个查询参数类,将pager和user对象作为其属性,你就可以使用形如"pager.startRow"获取pager对象的startRow属性值,并且可以有多个"."号,IBATIS对"."号的数目/层数是没有限制的。