Mybatis中如何查询时间段内的数据
2017-12-20 16:56
281 查看
最后一个是正确的,前边的三个是可能遇到的坑,给大家展示一下,如果不需要的,可以直接跳到最后看:
有时候我们需要查询一张表内一段时间内操作的数据,大家很容易就想到了 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中如何查询时间段内的数据
- C#如何将Access中以时间段条件查询的数据添加到ListView中
- mybatis分页多条件查询指定时间段数据的sql语句
- mybatis中如何查询一对多的关联列表数据
- mybatis学习之一对多查询如何避免只查出一条数据
- mybatis学习之一对多查询如何避免只查出一条数据
- oracle 如何固定查询一个时间段的数据
- Mysql 如何查询两个时间段之间的数据?
- mybatis查询如何返回List<Map>类型数据
- mybatis查询如何返回List<Map>类型数据
- 【机房收费系统】如何查询固定时间段内的数据MSHflexGrid
- Mybatis根据时间段查询结果一直为空(在确定有数据时还是为空)
- mybatis查询如何返回List<Map>类型数据
- 【ASH】如何导出视图DBA_HIST_ACTIVE_SESS_HISTORY的查询结果数据
- 如何将数据库中的多表的查询数据导出到excel中
- 使用MyBatis(二)使用java注解查询单行数据
- springMVC+mybatis查询数据,返回resultType=”map”时,如果数据为空的字段,则该字段省略不显示的解决方案
- SQL Server 2005中的分区表 如何添加、查询、修改分区表中的数据
- Ecshop中是如何将查询到的数据传送到页面并显示的呢?
- 3分钟让你学会如何用超级表格发布搜索,查询数据