Mybatis分页处理

今天被MyBatis使用statementType="STATEMENT"坑的吐血。发火

这个声明下,必须使用${}方式来传递动态参数,然后Mybatis里面用了动态的include语句,测试其他部分的时候,因为没有用到这个声明,所有程序没问题,而在查询总数时,用了这个,导致一直传不进参数。就把那个传不进的参数修改了一下取值,在动态语句里面用条件过滤掉了,就正常了莫名其妙,还以为那个变量名字打错了,看的眼睛都花了。就用复制粘贴来。改了一圈,并没有效果(因为本来也就没拼错)。后面查来查去,发现了程序里面一些小的错误,就是本来是int类型的字段,我把那个字段当成了string,不过这其实不影响程序运行。本以为错误在这里,改了一圈,发现还是没有效果。又发现之前的在sql语句上把参数类型设置为了String,以为错误在这里,但是删了还是没有。啊,最后才发现,这个查询总数的sql语句用了statementType="STATEMENT"的声明,删掉就正常了。

附代码:

<!-- sql片段对应选取准则,id属性值任意 -->
	<sql id="criteria">
		<where>
			<if test="phone!=null and phone!='' ">
				and phone=#{phone}
			</if>
			<if test="beginTime !=null and beginTime !='' ">
				and gmtcreate >= #{beginTime}
			</if>
			<if test="endTime !=null and endTime !='' ">
				and gmtcreate < #{endTime}
			</if>
			<if test="status!=0">
				and status = #{status}
			</if>
		</where>
	</sql>

	<!-- sql片段对应表名,id属性值任意 -->
	<sql id="tb">
		<!-- 去掉最后一个, -->
		<trim suffixOverrides=",">
			<if test="tablename == 't_charge_rechargerecord' ">
				${tablename}
			</if>
			<if test="tablename == 't_charge_consumerecord'">
				${tablename}
			</if>
		</trim>
	</sql>

	<select id="itemsCount" resultType="long">
		select count(1)
		from
		<include refid="tb"></include>
		<include refid="criteria"></include>
	</select>


	<select id="selectRecharge" resultMap="rechargemap">
		select *
		from
		<include refid="tb"></include>
		<include refid="criteria"></include>
		order by gmtcreate desc
		<if test="pagesize !=0 and offset !=-1">
			limit #{pagesize} offset #{offset}
		</if>
	</select>

	<select id="selectConsume" resultMap="consumemap">
		select *
		from
		<include refid="tb"></include>
		<include refid="criteria"></include>
		order by gmtcreate desc
		<if test="pagesize !=0 and offset !=-1">
			limit #{pagesize} offset #{offset}
		</if>
	</select>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值