mybatis使用的是xml格式的文件。使用>和<号的时候,会存在与xml的标签的规范冲突。
在实际项目中,有很多需求需要通过设定一个具体的时间段来搜索或过滤所需的数据,今天笔者就mybatis中时间比较涉及到的大于,小于号的应用方法作个详尽的讲解。
以下介绍两种可行方法:
①转义法
大于:>
小于:<
大于等于:>=
小于等于:<=
笔者案例:
<select id="view" parameterType="map" resultMap="BaseResultMap">
SELECT * FROM task t,staff s,product p WHERE t.staff_id = s.id AND t.product_id = p.id
<if test="companyId != null ">
AND t.company_id = #{companyId}
</if>
<if test="workshopId != null">
AND t.workshop_id = #{workshopId}
</if>
<if test="opunitId != null">
AND t.opunit_id = #{opunitshopId}
</if>
<if test="processId != null">
AND t.process_id = #{processId}
</if>
<if test="@Ognl@isNotEmpty(equipmentId)">
AND t.equipment_id = #{equipmentId}
</if>
<if test="dateStart != null and dateStart !='' ">
AND UNIX_TIMESTAMP(t.date_work) >= UNIX_TIMESTAMP(#{dateStart})
</if>
<if test="dateEnd != null and dateEnd !='' ">
AND UNIX_TIMESTAMP(t.date_work) <= UNIX_TIMESTAMP(#{dateEnd})
</if>
GROUP BY t.order_no
ORDER BY t.date_work
</select>
运行效果:
注意:这里的 日期入参类型为String
②<![CDATA[ sql语句 ]]>
<![CDATA[ sql语句 ]]>中的<![CDATA[ ]]>在mybatis中自动注释
笔者案例:
<select id="selectByTime" resultType="Date" parameterType="map">
SELECT
r.stop_time
FROM
rtg r <![CDATA[ WHERE UNIX_TIMESTAMP(r.stop_time) >= UNIX_TIMESTAMP(#{startTime}) AND UNIX_TIMESTAMP(r.stop_time) <= UNIX_TIMESTAMP(#{endTime}) ]]>
</select>
运行效果:
一、简要概述
二、实际书写规范
SELECT * FROM (SELECT t.*, rownum FROM bst_busi_msg t
<where>
<if test="targetId != null">
and (t.busi_sys_order = #{targetId,jdbcType=VARCHAR}
or t.busi_intf_seq = #{targetId,jdbcType=VARCHAR}
)
</if>
<if test="targetId == null and shardingTotal > 0">
and (t.task_status = '0'
OR (t.task_status = '3'
AND t.task_count <![CDATA[ < ]]> ${@com.asiainfo.bst.common.Constant@max_handle_count()}
)
)
and MOD(t.msg_id,#{shardingTotal,jdbcType=NUMERIC}) = #{shardingIndex,jdbcType=NUMERIC}
</if>
</where>
ORDER BY t.msg_id ASC
) WHERE rownum <![CDATA[ <= ]]> #{rownum,jdbcType=NUMERIC}
[说明]因为这里有 ">" "<=" 特殊字符所以要使用 来注释,但是有标签,所以把等放外面
mybatis配置文件,sql语句中含有转义字符:
错误语句:
select * from table_base where flag_topic & #{topic_num}
错误信息:
Caused by: org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 54; The entity name must immediately follow the '&' in the entity reference.
正确语句:
select * from table_base where flag_topic & #{topic_num}
将语句中的位运算(与)”&“符使用“&”替换
mybatis配置文件写SQL语句的某些字符需要转义:
< <
> >
<> <>
& &
' '
" "
注意:要加上分号!
ok,以上全是笔者实际需求提炼的心得,望能够帮助更多的伙伴
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_43842093/article/details/122268762
内容来源于网络,如有侵权,请联系作者删除!