Mabatis 由 ORDER BY 编号 1 标识的 SELECT 项包含一个变量报错解决

Mabatis 由 ORDER BY 编号 1 标识的 SELECT 项包含一个变量,作为标识列位置的表达式的一部分。按照引用列名的表达式排序时,只允许使用变量。

报错代码

 <select id="selectXmList"  resultType="java.util.Map">
   SELECT DISTINCT 
	xm.dfsjzj,xm.xmmc,xm.xmdm,
	yw.spjdmc,
	sqzt.fr_name,
	xm.sbsj
	FROM HN_CSGCJS_SPGL_XMJBXXB xm with(nolock)
	LEFT JOIN SX_PRO_SPGL_DFXMSPLCJDXXB_YW yw with(nolock) on yw.XM_DFSJZJ = xm.dfsjzj
	LEFT JOIN HN_CSGCJS_SPGL_JD_SQZT sqzt with(nolock) on sqzt.XM_DFSJZJ = xm.dfsjzj
	LEFT JOIN HN_CSGCJS_SPGL_TAG_GROUP tg  on tg.xm_dfsjzj = xm.dfsjzj 
	where
	xm.SJYXBS =1 and DQJD=1 and yw.SJYXBS =1  and xm.projectlev=1
	<if test="tag_id != null">
        and  tg.tag_id = #{tag_id}
      </if>
	<if test="c_tag_id != null">
        and  tg.c_tag_id = #{c_tag_id}
      </if>
	<if test="spjdxh != null">
        and  yw.spjdxh = #{spjdxh}
      </if>
	<if test="fr_name != null">
        and  sqzt.fr_name like #{fr_name}
      </if>
	<if test="xmmc != null">
        and  xm.xmmc like #{xmmc}
      </if>
	<if test="xmdm != null">
        and  xm.xmdm like #{xmdm}
      </if>
	<if test="orderCause != null">
        order by #{orderCause}
      </if>
  </select>

这里orderCause是在代码里拼接的排序字段和分页条件

paramMap.put("orderCause", "sbsj desc offset "+(pageNo-1)*pageSize+" rows fetch next "+pageSize+" rows only");

解决方法:

很简单,把#换成$即可。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
你可以通过MyBatis的关联查询来获取到该成员变量对象。假设你有两个实体类User和OrderOrder中有一个成员变量user,表示该订单所属的用户,那么你可以通过以下的方式来关联查询: 1. 在OrderMapper.xml中添加如下的关联查询语句: ```xml <select id="selectOrder" resultType="Order"> SELECT * FROM orders LEFT JOIN users ON orders.user_id = users.id WHERE orders.id = #{id} </select> ``` 2. 在Order类中添加一个User类型的成员变量user,并提供getter和setter方法。 ```java public class Order { private int id; private int userId; private User user; // 省略getter和setter方法 @Override public String toString() { return "Order{" + "id=" + id + ", userId=" + userId + ", user=" + user + '}'; } } ``` 3. 在UserMapper.xml中添加如下的查询语句: ```xml <select id="selectUserById" resultType="User"> SELECT * FROM users WHERE id = #{id} </select> ``` 4. 在OrderMapper.xml中添加如下的关联映射: ```xml <resultMap id="orderMap" type="Order"> <id property="id" column="id" /> <result property="userId" column="user_id" /> <association property="user" resultMap="userMap" /> </resultMap> <resultMap id="userMap" type="User"> <id property="id" column="id" /> <result property="name" column="name" /> <result property="age" column="age" /> </resultMap> ``` 5. 在OrderMapper接口中添加一个查询方法,用于获取指定id的订单信息: ```java public interface OrderMapper { @Select("SELECT * FROM orders WHERE id = #{id}") @ResultMap("orderMap") Order selectOrder(int id); } ``` 现在你就可以调用OrderMapper的selectOrder方法来获取指定id的订单信息了。在查询结果中,Order类中的user成员变量会自动填充为对应的User对象。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值