最后一个是正确的,前边的三个是可能遇到的坑,给大家展示一下,如果不需要的,可以直接跳到最后看:

有时候我们需要查询一张表内一段时间内操作的数据,大家很容易就想到了 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中如何查询时间段内的数据的更多相关文章

  1. Sqlite查询时间段内的数据问题解决!

    最近搞Sqlite本地查询,需求为查询某时间段内的数据,在SQL中我们都知道为: select * from tblName where rDate Between '2008-6-10' and   ...

  2. oracle查询时间段内的数据

    select * from persons o where trunc(o.create_date) = to_date('2018-07-30','yyyy-mm-dd') minus  对比数据完 ...

  3. mysql查询时间段内的数据

    https://blog.csdn.net/ls1645/article/details/79118464

  4. 关于MYSQL的查询时间段、删除数据、查询目标行的命令用法。

    Q1.第一次工作写命令时,写了一个把一个表的数据插入到另一个表中,运行时命令长时间处于执行状态. A.第一次处理数据库大量数据,长时间按运行属于正常现象,这与学校中的小数据不同. Q2.如何查询数据库 ...

  5. Mybatis中文模糊查询,数据库中有数据,但无结果匹配

    1.Mybatis中文模糊查询,数据库中有数据,但无结果匹配 1.1 问题描述: Mybatis采用中文关键字进行模糊查询,sql语句配置无误,数据库有该数据,且无任何报错信息,但无查询结果 1.2 ...

  6. mybatis中的查询缓存

    一: 查询缓存 Mybatis提供查询缓存,用于减轻数据压力,提高数据库压力. Mybatis提供一级缓存和二级缓存. 在操作数据库时需要构造SqlSession对象,在对象中有一个数据结构(Hash ...

  7. mybatis中模糊查询的使用以及一些细节问题的注意事项

    页面有个功能 为 根据 品牌名进行 关键字查询,对应到数据库的是brand表的name字段的模糊查询 如果用的是SSM框架,在mybatis中我们需要自己写sql语句,涉及到like的模糊查询,myb ...

  8. mybatis中的查询语句in用法的相关问题

    在开发的时候,mybatisl中使用in的时候会遇到一些问题,如果我们传的参数是String类型,以“,”来进行隔开的,例如:参数是0,1,2字符串,mybatis中的语句如下 <select ...

  9. laravel中通过查询构造器,实现数据的curd

    //查询构造器: public function query1(){ //利用查询构造器,插入数据: /*$num=DB::table('student')->insert( ['name'=& ...

随机推荐

  1. HDU 5617 DP

    沿着一条条斜线DP即可,dp[k][i][j]表示第k步,一端在第j列,另一端在第i列,构成回文的个数,沿着四个方向推下去即可. #include <iostream> #include ...

  2. Linux防火墙配置—SNAT2

    1.实验目标 以实验"Linux防火墙配置-SNAT1"为基础,为网关增加外网IP地址,为eth1创建虚拟接口,使外网测试主机在Wireshark中捕获到的地址为eth1虚拟接口的 ...

  3. MySQL常见建表选项以约束

    一.CREATE TABLE 选项 1.在定义列的时候,指定列选项 1)DEFAULT <literal>:定义列的默认值 当插入一个新行到表中并且没有给该列明确赋值时,如果定义了列的默认 ...

  4. 【算法系列学习】[kuangbin带你飞]专题二 搜索进阶 D - Escape (BFS)

    Escape 参考:http://blog.csdn.net/libin56842/article/details/41909459 [题意]: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消 ...

  5. CI Weekly #18 | flow.ci iOS 最佳实践出炉,正式支持 Git@OSC 构建

    如大家所期待,flow.ci 现已支持开源中国的代码仓库 - 码云,可以直接构建 Git@OSC 的项目了,点击创建项目-选择代码仓库-选择码云-绑定 OSChina 账户-选择要构建项目,教程看这里 ...

  6. SQL中LEFT JOIN 和 inner join 的区别

    student表 sc 表 首先where条件a.Sid = b.Sid 查询 SELECT * FROM student a,sc b WHERE a.Sid = b.Sid GROUP BY a. ...

  7. Python批量修改文件名与后缀

    引言: 有时因为文件版本的更新,后缀名会发生变化,例如Word13的docx到Word16的doc,又例如我们想修改音频文件的后缀.一个一个修改后缀名往往很麻烦,于是我们便可以写一个Python的脚本 ...

  8. haproxy安装配置for mysql负载均衡(ubantu)

    1.安装pcre apt-get update (apt-get install openssl libssl-dev  ==>可能需要安装的依赖包) apt-get install libpc ...

  9. ECMAScript迭代语句

    迭代语句又叫循环语句,声明一组要反复执行的命令,直到满足某些条件为止. 循环通常用于迭代数组的值(因此而得名),或者执行重复的算术任务. do-while, while, for, for-in -- ...

  10. 漫话JavaScript与异步·第二话——Promise:一诺千金

    一.难以掌控的回调 我在第一话中介绍了异步的概念.事件循环.以及JS编程中可能的3种异步情况(用户交互.I/O.定时器).在编写异步操作代码时,最直接.也是每个JSer最先接触的写法一定是回调函数(c ...