Mybatis中如何查询时间段内的数据
最后一个是正确的,前边的三个是可能遇到的坑,给大家展示一下,如果不需要的,可以直接跳到最后看:
有时候我们需要查询一张表内一段时间内操作的数据,大家很容易就想到了 between ? and ? 这个 句型的sql 对不对? ,如果现在需要两个参数(比如一个开始日期,一个结束日期)来传递,需求是选择一个参数或者两个参数都可以查询,但是如下边这个条件判断使用and连接,此时需要两个参数都要有,才会有查询结果,当其中有一个日期参数为空的时候,这个sql就不会被执行,必须要两个参数才可以查询,这与我们的需求不符合,所以不可取,
<if test="beginDate != null and beginDate != '' and endDate != null and endDate != ''">
stock_bill.bill_date between #{beginDate} and #{endDate}
</if>
现在我们将其中的两个条件之间的and 改为or试一试
<if test="beginDate != null and beginDate != '' or endDate != null and endDate != ''">
AND stock_bill.bill_date between #{beginDate} and #{endDate}
</if>
此时如果输入两个日期参数同样可以查询到对应的数据,但是如果只输入一个开始日期参数,此时查询结果为空,通过打印sql,我们可以看到只有一个开始日期,没有结束日期,between ? and ? 的两个日期参数不完整,一个参数为空,所以这个sql 就发生了错误,这显然与我们的初衷不符合,所以这个方法也不可取,打印sql如下:

看来想要通过一个参数就可以查询到对应的数据,使用between?and ?是不行的,我只好放弃了between? and? ,而把他们都拆开来。代码如下:
<if test="beginDate != null and beginDate != ''"> AND stock_bill.bill_date >= #{beginDate}</if>
<if test="endDate != null and endDate != ''">AND stock_bill.bill_date <= #{endDate}</if>
此时的我又遇到了另外的坑,报错信息如下

The content of elements must consist of well-formed character data or markup. 这个错误是说我的><号不符合xml规范,仔细一想真是,脑子不够用了,这么简单地错误都出来了,看来真是不能心急,于是把>< 号使用了<![CDATA[ ]]>标签括起来,代码如下:
<if test="beginDate != null and beginDate != ''">AND stock_bill.bill_date <![CDATA[>=]]> #{beginDate}</if>
<if test="endDate != null and endDate != ''">AND stock_bill.bill_date <![CDATA[<=]]>#{endDate}</if>
ok,然后启动之后,我只选择开始时间,只选择结束时间,同时选择开始时间和结束时间,发现查询的结果都是正确的。
Mybatis中如何查询时间段内的数据的更多相关文章
- Sqlite查询时间段内的数据问题解决!
最近搞Sqlite本地查询,需求为查询某时间段内的数据,在SQL中我们都知道为: select * from tblName where rDate Between '2008-6-10' and ...
- oracle查询时间段内的数据
select * from persons o where trunc(o.create_date) = to_date('2018-07-30','yyyy-mm-dd') minus 对比数据完 ...
- mysql查询时间段内的数据
https://blog.csdn.net/ls1645/article/details/79118464
- 关于MYSQL的查询时间段、删除数据、查询目标行的命令用法。
Q1.第一次工作写命令时,写了一个把一个表的数据插入到另一个表中,运行时命令长时间处于执行状态. A.第一次处理数据库大量数据,长时间按运行属于正常现象,这与学校中的小数据不同. Q2.如何查询数据库 ...
- Mybatis中文模糊查询,数据库中有数据,但无结果匹配
1.Mybatis中文模糊查询,数据库中有数据,但无结果匹配 1.1 问题描述: Mybatis采用中文关键字进行模糊查询,sql语句配置无误,数据库有该数据,且无任何报错信息,但无查询结果 1.2 ...
- mybatis中的查询缓存
一: 查询缓存 Mybatis提供查询缓存,用于减轻数据压力,提高数据库压力. Mybatis提供一级缓存和二级缓存. 在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构(Hash ...
- mybatis中模糊查询的使用以及一些细节问题的注意事项
页面有个功能 为 根据 品牌名进行 关键字查询,对应到数据库的是brand表的name字段的模糊查询 如果用的是SSM框架,在mybatis中我们需要自己写sql语句,涉及到like的模糊查询,myb ...
- mybatis中的查询语句in用法的相关问题
在开发的时候,mybatisl中使用in的时候会遇到一些问题,如果我们传的参数是String类型,以“,”来进行隔开的,例如:参数是0,1,2字符串,mybatis中的语句如下 <select ...
- laravel中通过查询构造器,实现数据的curd
//查询构造器: public function query1(){ //利用查询构造器,插入数据: /*$num=DB::table('student')->insert( ['name'=& ...
随机推荐
- IP设置
由于家里的IP地址与公司的不一样,每次都要修改很麻烦,所以自己只做了一个IP修改bat. 打开记事本,把一下代码复制到记事本里,保存成bat就OK了.在23行设置自己的IP地址就可以了. @echo ...
- HR最喜欢问的问题_"你的职业规划是什么?"
很多面试官都会问,“你的职业规划是什么?”这个问题往往会难倒很多求职者.今天我跟大家分享,求职者怎样回答,才能更给自己加分 1.对目前自己要从事的这个岗位有清晰的认识,比如这个主要的工作是做什么的,大 ...
- JS基础与循环
JS 简介 [JS的三种方式] 1.HTML标签中内嵌JS <button onclick="javascript:alert('白痴')">呵呵呵</butto ...
- React的学习(上)
摘要 众所周知,前端三大框架Angular.React.Vue,所以为了跟上时代的步伐,最近开始着手学习React,这时候就发现个大问题,框架一直在更新,提倡的编写语法也在更新,网上有许多教程都是一两 ...
- TOMCAT的框架结构
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...
- mui开发app之联网应用传输数据
手机的app分为,在线和单机,在线就是类似于C/S模式,能与服务器与他人共享数据的程序,单机就是在没有网络下可以玩转的app. 目前互联网盛行的时代,99%的程序都是联网环境下工作的.那么如何开发本地 ...
- Angular vs React 最全面深入对比
如今,Angular和React这两个JavaScript框架可谓红的发紫,同时针对这两个框架的选择变成了当下最容易被问及或者被架构设计者考虑的问题,本文或许无法告诉你哪个框架更优秀,但尽量从更多的角 ...
- Arcgis Engine OMD
在UML 图中有三种类型的类:抽象类(abstract class).组件类(COclass)与普通类(instantiable class). 抽象类:不能创建或实例化,从来没有一个抽象类的实例用于 ...
- MongoDB Java Driver 3.4操作
导入jar包 <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-dr ...
- tpcc-mysql安装
1.因为我的虚拟机是centos 7 min版本,所以先得安装gcc gcc++: http://mirror.centos.org/centos/7/os/x86_64/Packages/ rp ...