处理大于小于号的方法:

https://www.cnblogs.com/winner-0715/p/6132755.html

第一种方法:
用转义字符把">"和"<"替换掉,就没有问题了。

<if test="startTime != null ">
AND order_date &gt;= #{startTime,jdbcType=DATE}
</if>
<if test="endTime != null ">
AND order_date &lt;= #{endTime,jdbcType=DATE}
</if>

注意下,这里的startTime,endTime都是Date类型的~

附:XML转义字符

&lt;      <    小于号   
&gt;      >    大于号   
&amp;      &    和   
&apos;      ’    单引号   
&quot;      "    双引号   

第二种方法:
因为这个是xml格式的,所以不允许出现类似">"这样的字符,但是可以使用<![CDATA[ ]]>符号进行说明,将此类符号不进行解析 
mapper文件示例代码

<if test="startTime != null ">
AND <![CDATA[ order_date >= #{startTime,jdbcType=DATE} ]]>
</if>
<if test="endTime != null ">
AND <![CDATA[ order_date <= #{endTime,jdbcType=DATE} ]]>
</if>

====================================

附带问题:

使用情况:mybatis  xml中写的mapper  对接的是postgresql数据库

问题:在同一个项目中不同的mapper.xml文件中,分别出现了>= 和<=的比较运算符,但是在一个xml中需要额外处理才能使用,一个xml文件中不需要额外处理>或者<符号可以直接使用

下面附上两个xml文件代码和截图,

1.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.rollong.chinatower.server.persistence.mapper.FinanceReportMapper">
<resultMap id="financeBriefDataResultMap"
type="com.rollong.chinatower.server.api.payload.finance.FinanceBriefData">
<id property="id" column="id"/>
</resultMap>
<select id="search" resultMap="financeBriefDataResultMap">
SELECT
*
FROM
(
SELECT
( CAST ( partner.id AS VARCHAR ) || '@partner' ) AS ID,
partner.id AS partnerId,
project.id AS projectId,
construction.id AS constructionId,
NULL AS takerId,
NULL AS maintenanceId,
count(report.id) as reportsCount,
sum(report.amount) as totalAmount,
max(report.updated_at) as reportLatestUpdatedAt
FROM
"project"."project_construction_partners" AS partner
LEFT JOIN "project"."project_construction" AS construction ON partner.construction_id = construction.id
LEFT JOIN "project"."projects" AS project ON construction.project_id = project.id
LEFT JOIN "finance"."finance_reports" as report on partner.id = report.partner_id
WHERE
#{isConstruction} = TRUE
AND construction.deleted_at IS NULL
<if test="null != partnerType">
AND partner.name = '${partnerType}'
</if>
<if test="null != provinceId">
AND project.province_id = #{provinceId}
</if>
<if test="null != cityId">
AND project.city_id = #{cityId}
</if>
<if test="null != districtId">
AND project.district_id = #{districtId}
</if>
<if test="null != subCompanyId">
AND project.sub_company_id = #{subCompanyId}
</if>
<if test="null != thirdPartCompanyId">
AND partner.third_part_id = #{thirdPartCompanyId}
</if>
<if test="null != leaderEmployeeId">
AND partner.leader_employee_id = #{leaderEmployeeId}
</if>
<if test="null != workerEmployeeId">
AND exists(
select 1 from "third_part"."worker_involved_constructions" as involved
where involved.worker_id = #{workerEmployeeId} AND involved.project_partner_id = partner.id
)
</if>
<if test="null != reportStatus">
AND exists(
select 1 from "finance"."finance_reports" as r
where r.partner_id = partner.id
<choose>
<when test="'Submit' == reportStatus">
and r.approved_at is null and r.rejected_at is null and r.paid_at is null
</when>
<when test="'Approved' == reportStatus">
and r.approved_at is not null and r.rejected_at is null and r.paid_at is null
</when>
<when test="'Rejected' == reportStatus">
and r.approved_at is null and r.rejected_at is not null and r.paid_at is null
</when>
<when test="'Paid' == reportStatus">
and r.paid_at is not null
</when>
</choose>
)
</if>
<if test="null != keyword">
AND project.name like #{keyword}
</if>
GROUP BY partner.id,project.id,construction.id
UNION
SELECT
( CAST ( taker.ID AS VARCHAR ) || '@maintenance' ) AS ID,
NULL AS partnerId,
project.ID AS projectId,
NULL AS constructionId,
taker.ID AS takerId,
maintenance.ID AS maintenanceId,
count(report.id) as reportsCount,
sum(report.amount) as totalAmount,
max(report.updated_at) as reportLatestUpdatedAt
FROM
"project"."project_maintenance_takers" AS taker
LEFT JOIN "project"."project_maintenance" AS maintenance ON taker.maintenance_id = maintenance.id
LEFT JOIN "project"."projects" AS project ON maintenance.project_id = project.id
LEFT JOIN "finance"."finance_reports" as report on taker.id = report.taker_id
WHERE
#{isMaintenance} = TRUE
AND maintenance.deleted_at IS NULL
AND taker.deleted_at IS NULL
<if test="null != provinceId">
AND project.province_id = #{provinceId}
</if>
<if test="null != cityId">
AND project.city_id = #{cityId}
</if>
<if test="null != districtId">
AND project.district_id = #{districtId}
</if>
<if test="null != subCompanyId">
AND project.sub_company_id = #{subCompanyId}
</if>
<if test="null != thirdPartCompanyId">
AND taker.third_part_id = #{thirdPartCompanyId}
</if>
<if test="null != leaderEmployeeId">
AND taker.leader_employee_id = #{leaderEmployeeId}
</if>
<if test="null != workerEmployeeId">
AND exists(
select 1 from "third_part"."worker_involved_maintenance" as involved
where involved.worker_id = #{workerEmployeeId} AND involved.taker_id = taker.id
)
</if>
<if test="null != reportStatus">
AND exists(
select 1 from "finance"."finance_reports" as r
where r.taker_id = taker.id
<choose>
<when test="'Submit' == reportStatus">
and r.approved_at is null and r.rejected_at is null and r.paid_at is null
</when>
<when test="'Approved' == reportStatus">
and r.approved_at is not null and r.rejected_at is null and r.paid_at is null
</when>
<when test="'Rejected' == reportStatus">
and r.approved_at is null and r.rejected_at is not null and r.paid_at is null
</when>
<when test="'Paid' == reportStatus">
and r.paid_at is not null
</when>
</choose>
)
</if>
<if test="null != keyword">
AND project.name like #{keyword}
</if>
GROUP BY maintenance.id,project.id,taker.id
) AS table_all
WHERE TRUE
<if test="minReportsCount != null">
AND table_all.reportsCount &gt;= #{minReportsCount}
</if>
<if test="maxReportsCount != null">
AND table_all.reportsCount &lt;= #{maxReportsCount}
</if>
<choose>
<when test="sort == 'Latest'">
ORDER BY table_all.reportLatestUpdatedAt DESC
</when>
<when test="sort == 'AmountAsc'">
ORDER BY table_all.totalAmount ASC
</when>
<when test="sort == 'AmountDesc'">
ORDER BY table_all.totalAmount DESC
</when>
</choose>
</select>
</mapper>

2.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.rollong.chinatower.server.persistence.mapper.OrderMealTimeMapper">
<resultMap id="OrderMealResult"
type="com.rollong.chinatower.server.api.payload.canteen.OrderMealTime" autoMapping="true">
<result property="years" column="years"/>
<result property="months" column="months"/>
<result property="days" column="days"/>
<result property="counts" column="counts"/>
<result property="checkOut" column="checkOut"/>
</resultMap>
<select id="search" resultMap="OrderMealResult">
SELECT
ors.year_meal AS years,
ors.month_meal AS months,
ors.day_meal AS days,
SUM (ors.counts) AS counts,
SUM (ors.checkd_out) AS checkOut
FROM canteen.order_meal ors
WHERE TRUE
<if test="null != canteenId">
AND ors.canteen_id = #{canteenId}
</if>
<if test=" null != startY and null != startM and null != startD" >
AND <![CDATA[ (ors.year_meal *10000 + ors.month_meal *100 + ors.day_meal) >= (#{startY}*10000+#{startM}*100+#{startD}) ]]>
</if>
<if test=" null != endY and null != endM and null != endD" >
AND <![CDATA[ (ors.year_meal *10000 + ors.month_meal *100 + ors.day_meal) <= (#{endY}*10000+#{endM}*100+#{endD}) ]]>
</if>
GROUP BY ors.year_meal,ors.month_meal,ors.day_meal
</select>
</mapper>

【究竟是xml的问题/还是对接的数据库的问题/还是数据库中对于某些类型字段处理不一样】

如果有兴趣或者刚好知道,遇到过这种情况的 希望大家能给个反馈,多多交流!!

【Mybatis】 Mybatis在xml文件中处理大于号小于号的方法【问题】的更多相关文章

  1. MyBatis 3在XML文件中处理大于号小于号(<>)的方法(转)

    说明:以下方式支持XML和注解的方式. 一. 用了转义字符把>和<替换掉. AND start_date <= CURRENT_DATE AND end_date >= CUR ...

  2. Mybatis在xml文件中处理大于、小于、不等于号的方法

    在mapper.xml使用大于.小于等符号会和xml语法冲突,解决冲突有两种方式. 方法一: 使用转义字符: 字符名称 字符符号 转义字符 大于号 > > 小于号 < < 与 ...

  3. maven的setting.xml文件中只配置本地仓库路径的方法

    maven的setting.xml文件中只配置本地仓库路径的方法 即:settings标签下只有一个 localRepository标签,其他全部注释掉即可 <?xml version=&quo ...

  4. mybatis 基础(二) xml文件中的其他知识点

    mybatis xml文件中一些标签的使用 此标签主要用作 配置 "别名" 如果实体类与数据库中字段名在不区分大小写的情况下相同的话, 那就不需要配置resultMap,因为mys ...

  5. 转!!mybatis在xml文件中处理大于号小于号的方法

    第一种方法: 用了转义字符把>和<替换掉,然后就没有问题了. SELECT * FROM test WHERE 1 = 1 AND start_date  <= CURRENT_DA ...

  6. Mybatis在xml文件中处理大于号小于号的方法

    第一种方法:用了转义字符把">"和"<"替换掉,然后就没有问题了. AND start_date <= CURRENT_DATE AND en ...

  7. 【转】mybatis在xml文件中处理大于号小于号的方法

    http://blog.csdn.net/zheng0518/article/details/10449549 第一种方法: 用了转义字符把>和<替换掉,然后就没有问题了. SELECT ...

  8. 在AndroidManifest.xml文件中设置Android程序的启动界面方法

    从网上搜集了一堆的Android代码,比如Android的Login程序和Android的Helloworld程序,但是却总不能正确运行一个正确的程序,郁闷了很久,终于在一次一次的测试后成功的在And ...

  9. iBATIS sql(XML)中的大于、小于、like等符号写法

    其实就是xml的特殊符号,因为它的配置就是xml,所以可以用下面这种写法转义 <          <     >          >      <>   < ...

随机推荐

  1. jquery如何获取手机网页触屏坐标:ontouchstart 、ontouchend、ontouchmove

    function handleTouchEvent(event) { //只跟踪一次触摸 ) { var output = document.getElementById("output&q ...

  2. day23 03 组合的例子

    day23 03 组合的例子 一.用到组合的方式,编写一个圆环,并能够计算出它的周长和面积 from math import pi # 从内置函数里面导入pi # 先定义一个圆类 class Circ ...

  3. 第一章 pyhton基础

    一 .pyhton2与python3的区别 在pyhton2中,其中编码默认使用的是ascii编码,输出格式为print"xxx",输入为raw_input(“请输入”),在整型中 ...

  4. python面向对象(反射)(四)

    1. isinstance, type, issubclass isinstance: 判断你给对象是否是xx类型的. (向上判断 type: 返回xxx对象的数据类型 issubclass: 判断x ...

  5. 经典:区间dp-合并石子

    题目链接 :http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=737 这个动态规划的思是,要得出合并n堆石子的最优答案可以从小到大枚举所有石子合并 ...

  6. python 多线程、多进程、协程性能对比(以爬虫为例)

    基本配置:阿里云服务器低配,单核2G内存 首先是看协程的效果: import requests import lxml.html as HTML import sys import time impo ...

  7. 【LeetCode】Jewels and Stones(宝石与石头)

    这道题是LeetCode里的第771道题. 题目要求: 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝 ...

  8. 【C#】重写和重载的区别

    导读:学习C#的时候,其实没想那么多的.就想着把视频看完,把例子做一下就好了,其实真心不懂那些玩意儿是什么,就好像是又回到了学VB的时候.可是,边上师哥压榨我这本就不聪明的脑袋瓜,问了我好多问题,于是 ...

  9. 【Luogu】P2059卡牌游戏(概率DP)

    题目链接 这绝壁是道紫难度的题 请移步xyz32678的题解. 设f[i][j]是有i个人参加了游戏,1是庄家,最后j胜出的概率. 我们可以发现,这个游戏影响胜出的概率的只有庄家的相对位置和人数,跟玩 ...

  10. codeblocks 中文编码问题

    参考文章: code::blocks 初使用遇到的问题记录 codeblocks 中文编码问题 string var="汉"; cout<<var<<end ...