MyBatis中大于号以及小于号的表达方式

mybatis使用的是xml格式的文件。使用>和<号的时候,会存在与xml的标签的规范冲突。

1.场景还原

在实际项目中,有很多需求需要通过设定一个具体的时间段来搜索或过滤所需的数据,今天笔者就mybatis中时间比较涉及到的大于,小于号的应用方法作个详尽的讲解。

2.实现方案

以下介绍两种可行方法:

①转义法

大于:>

小于:<

大于等于:>=

小于等于:<=

笔者案例:

<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)  &gt;= UNIX_TIMESTAMP(#{dateStart})</if><if test="dateEnd != null and dateEnd !='' ">AND UNIX_TIMESTAMP(t.date_work)  &lt;= UNIX_TIMESTAMP(#{dateEnd})</if>GROUP BY t.order_noORDER BY t.date_work
</select>

运行效果:

img

注意:这里的 日期入参类型为String

②<![CDATA[ sql语句 ]]>

<![CDATA[ sql语句 ]]>中的<![CDATA[ ]]>在mybatis中自动注释

笔者案例:

<select id="selectByTime" resultType="Date" parameterType="map">SELECTr.stop_timeFROMrtg r   <![CDATA[WHERE  UNIX_TIMESTAMP(r.stop_time) >= UNIX_TIMESTAMP(#{startTime})AND UNIX_TIMESTAMP(r.stop_time) <= UNIX_TIMESTAMP(#{endTime}) ]]>
</select>

运行效果:

img

一、简要概述

  1. 平时在mybatis的映射文件写sql时,很多时候都需要写一些特殊的字符。例如:"<" 字符 “>” 字符 “>=” 字符 “<=” 字符,但是在xml文件中并不能直接写上述列举的字符,否则就会报错。
  2. 因为在解析xml文件时候,我们如果书写了特殊字符,在没有特殊处理的情况下。这些字符会被转义,但我们并不希望它被转义,所以我们要使用<![CDATA[ ]]>来解决。
  3. 那为什么要这样书写呢?<![CDATA[ ]]> ,不言而喻:这是XML语法。在CDATA内部的所有内容都会被解析器忽略。
  4. 所以,当我们在xml文本中包含了很多的"<" 字符 “<=” 和 “&” 字符—就像程序代码一样,那么最好把他们都放到CDATA部件中。

二、实际书写规范

  1. 有个问题需要注意的就是在我们的mybatis的映射文件中,以下 等这些标签都不会被解析,所以我们只把有特殊字符的语句放在 <![CDATA[ ]]>中,尽量缩小 <![CDATA[ ]]> 的范围。
  2. 案例
 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语句时需要转义的字符

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   &amp; #{topic_num}

将语句中的位运算(与)”&“符使用“&”替换

mybatis配置文件写SQL语句的某些字符需要转义:

	&lt;          < &gt;          >  &lt;&gt;     <>&amp;        & &apos;       '&quot;       "

注意:要加上分号!

ok,以上全是笔者实际需求提炼的心得,望能够帮助更多的伙伴

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

脚手架 - props

一、props — 让组件接收外部传过来的数据 传递数据 <Example name"xxx"/>接收数据 // 1. 只接收 props: [name]// 2. 接收并限制类型 props: {name: String }// 3. 接收、限制类型、必要性、默认值 props: {name: {type: String, // 类型required: true, /…

mybatis plus当月数据查询_Springboot+mybatis(plus)+druid多数据源

前言:我不太喜欢AOP读自定义注解来切换数据源.因为如果我一个业务里需要同时查2个数据源的数据而又不想把这个业务拆成2个方法的时候,就比较麻烦了.所以我打算根据package来扫描注入不同的DataSource.可能是我搜索的姿势不太对 , 资料比较少.也会碰到不少坑.所以记录一下.正文:…

mybatis里mapper.xml中SQL语句if语句嵌套if语句

为了实现一个sql可以根据条件不同实现sql语句的动态查询&#xff0c;所以在使用mybatis时&#xff0c;对应的mapper.xml的sql语句可以根据条件值的不同执行不同的sql语句&#xff0c; 最开始在我的where子句中我的if语句是这么写的&#xff1a; <where><if test"…

脚手架 mixin (混入)

可以把多个组件共用的配置提取成一个混入对象 使用方式&#xff1a; 定义混合 {data() {},methods() {}... }使用混合 // 1. 引入混合 import {hunhe1, hunhe2} from /..mixin/// 1. 在 main.js 中全局混入&#xff1a; Vue.mixin(hunhe1)// 2. 局部混入 mixins: [hunhe1]

ug冲模标准件库_昆山兴模lt;携手gt;武汉益模,打通冲模“智能设计+精益管理”的最后一道关卡...

武汉益模科技股份有限公司是国内领先的工业互联网及智能制造的解决方案提供商&#xff0c;为模具、装备、军工、汽车、家电及等有柔性化生产需求的工厂提供专业的智能设计/信息化管理/智能加工/数字化工厂等工业软件、工业机器人自动化以及智能装备&#xff0c;拥有麦格纳、安波…

SpringBoot 异常回滚 事务的使用___Springboot @Transactional 事务不回滚

Springboot中事务的使用&#xff1a; 1、启动类加上EnableTransactionManagement注解&#xff0c;开启事务支持&#xff08;其实默认是开启的&#xff09;。 2、在使用事务的public&#xff08;只有public支持事务&#xff09;方法&#xff08;或者类-相当于该类的所有public…

简述网络调研的作用_利用龙伯球透镜天线提升高铁4G网络覆盖

透镜天线&#xff0c;一种能够通过电磁波&#xff0c;将点源或线源的球面波或柱面波转换为平面波从而获得笔形、扇形或其他形状波束的天线。通过合适设计透镜表面形状和折射率 n&#xff0c;调节电磁波的相速以获得辐射口径上的平面波前。透镜天线吸收了许多光信息工程技术&…

脚手架 插件

一、定义插件 plugin.js --> export default{} --> install() --> // 全局过滤器 Vue.filter(myFilter, function (value) {return value.slice(0, 4); });// 全局指令 Vue.directive("fbind", {bind(element, binding) {element.value binding.value;},i…

SQLIntegrityConstraintViolationException: 异常解决

SQLIntegrityConstraintViolationException: Duplicate entry ‘xxx’ for key yyyzzz’异常解决 一. 异常现象 在做Java Web项目操作数据库添加数据的时候&#xff0c;突然发现曝出如下图所示异常&#xff1a; Caused by: java.sql.SQLIntegrityConstraintViolationExceptio…

scoped 样式

一、加不加 scoped &#xff1f; 加上之后&#xff0c;让样式在局部生效&#xff0c;防止冲突 <!-- a.vue --> <style lang"less" scoped> #bg-red {background-color: #f00; } </style>不加&#xff0c;相当于是定义的全局样式&#xff0c;每个…

一步怎么测量图片_测量不容易?15套测量仪器实操手册+自动计算表格,自学也可以...

测量不容易&#xff1f;15套测量仪器实操手册自动计算表格&#xff0c;自学也可以很多施工羡慕测量工资高&#xff0c;但是测量工资高也就意味着责任大&#xff0c;施工在休息的时候测量就下工地了&#xff0c;施工聚会的时候&#xff0c;测量在埋头苦算。如果施工想要干测量该…

controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常

controller的异常处理以及service层的事务控制 最近写代码涉及到一些事务&#xff0c;上午终于把代码给理顺了&#xff0c;之前不太清楚在哪里做异常处理&#xff0c;导致代码遍地try-catch&#xff0c;相当难看。 还是基于controller-service-dao三层来写代码&#xff0c;从…

Java 中判断一个字符串是否包含另外一个字符串的方法

方法一&#xff1a;indexOf(String s) 可以配合indexOf(String s)的使用&#xff0c;如果包含&#xff0c;返回的值是包含该子字符串在父类字符串中起始位置&#xff1b;如果不包含必定全部返回值为-1 public void test02() {String str1"张三";String str2"是…

速看!销冠高效给客户群发消息的秘诀

你是不是也有过这样的疑问&#xff1a;明明都是给客户群发消息&#xff0c;为什么别人的成交率那么高&#xff0c;自己却效果一般呢&#xff1f; 今天就给大家分享销冠常用的高效群发消息秘诀&#xff0c;让大家都能更好地与客户进行沟通&#xff0c;提高成交率&#xff01; …

不显示_电脑不显示桌面图标怎么办?

在现在这个社会时代中&#xff0c;人们对电脑的使用频率非常的高&#xff0c;电脑可以说已经成为了大家在生活中不可或缺的必备品。但是在使用电脑过程中的时候也都容易出现故障。那么&#xff0c;若碰上 电脑开机后只显示桌面的背景而没有任何程序和应用的情况&#xff0c;莫急…

Xshell 的基本使用

软件长这样 Xshell 链接地址 一、输入 ifconfig 查看 linux ip 地址 二、远程连接服务器 三、测试连接

Java中String类的concat方法___java的String字符串的concat()方法连接字符串和“+“连接字符串解释

Java中String类的concat方法 在了解concat&#xff08;&#xff09;之前&#xff0c;首先需要明确的是String的两点特殊性。 长度不可变值不可变 这两点从源码中对String的声明可以体现&#xff1a; private final char[] value ;其中final对应值的不可更改的特性&#xff1b…

大于小于优化_架构 - 以MySQL为例,详解数据库索引原理及深度优化

一、摘要本文以MySQL数据库为研究对象&#xff0c;讨论与数据库索引相关的一些话题。特别需要说明的是&#xff0c;MySQL支持诸多存储引擎&#xff0c;而各种存储引擎对索引的支持也各不相同&#xff0c;因此MySQL数据库支持多种索引类型&#xff0c;如BTree索引&#xff0c;哈…

Xftp 基本使用

vmware tool 安装 连接终端Xshell5_安装vmtools_

MySQL:日期函数、时间函数总结

MySQL 获得当前日期时间 函数 获得当前日期时间&#xff08;date time&#xff09;函数&#xff1a;now() mysql> select now();--------------------- | now() | --------------------- | 2008-08-08 22:20:46 | ---------------------获得当前日期时间&#xff08;date…