mybatis动态sql(下)

    之前说过试了用动态sql发现方便多了,可以把以往多个方法集中在一个方法中完成。对比jdbc也可以摆脱拼接sql带来的麻烦。

    其实对动态sql的使用本质上就是使用标签,以下介绍常用的标签:

       if:这个是最常用到的,主要用于在一些条件查询中,有的查询有数据则执行相应的语句,有的没数据传过来则不则行。我第一次使用是在项目的筛选条件中,因为所有条件都不是必选的,有的用户没选择就不会没数据,我跟前端规定没数据就传null给后台。这种情况下以前是需要写好几种情况的接口整合在一起,现在用了动态sql则一个接口能完美解决。

以下为mapper.xml文件中的代码

	<select id="findEnterpriseByBussiness"
		resultType="com.indechy.nyj.bean.BusinessSwitch">
		SELECT
		t_user_enterprises.competent_authority competentAuthority,
		t_user_enterprises.username username,
		t_user_enterprises.is_eading_companies
		leadingLevel,
		batch.bacth bacth,
		history.time_of_submission
		timeofsubmission,
		history.record_type recordType
		FROM
		history,t_user_enterprises,batch
		<where>
			AND
			history.eid=t_user_enterprises.id
			AND
			history.batch_id=batch.id
			<if test="age != null">
				AND history.time_of_submission like
				CONCAT(CONCAT('%',#{age} ,'%'))
			</if>
			<if test="recordType != null">
				AND history.record_type = #{recordType}
			</if>
			<if test="bacth != null">
				AND batch.bacth = #{bacth}
			</if>
			<if test="competentAuthority != null">
				AND t_user_enterprises.competent_authority =
				#{competentAuthority}
			</if>
			<if test="leadingLevel != null">
				AND t_user_enterprises.is_eading_companies = #{leadingLevel}
			</if>
			<if test="username != null">
				AND
				t_user_enterprises.username like
				CONCAT(CONCAT('%',#{username} ,'%'))
			</if>

			<if test="startTimeOfSubmission != null">
				AND history.time_of_submission &gt;=
				#{startTimeOfSubmission}
			</if>
			<if test="endTimeOfSubmission != null">
				AND history.time_of_submission &lt;=
				#{endTimeOfSubmission}
			</if>
			<if test="recordType != null">
				GROUP BY
				t_user_enterprises.username
			</if>
			ORDER BY
			history.time_of_submission
			DESC
			limit #{pageNum},#{num}
		</where>
	</select>

 

里面的t<if test=“ ”>引号中的变量是传入到xml文件中的数据,如果是null则不执行,只有当变量值不等于null时才会执行该条相应语句。

       上面代码中除了if标签外还出现了where标签,这个标签是为了防止当后面的所有if标签中内容都为null时出现语法错误,当后面的if标签中内容都不执行时,会自动忽略where标签,一般情况下与if标签同时使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值