MyBatis 3实现时间段精确的查询(转)
效果如下:

说明:
时间范围的查询会存在以下问题:
1、如果单纯采用年月日的形式会出现缺少最后一点的数据,比如要查询2015-09-16到2015-09-17,那么2015-09-17 01:00:00的数据不会被查询出来。无论是使用between and还是<=/>=的形式去实现都会有这样的问题。
解决方法可以这样做:
1、如果是以年月日的形式,那么可以采用动态拼接字符串的形式,最后得到2015-09-16 00:00:00到2015-09-17 23:59:59,如果要更精确可以往毫秒级别加。
2、采用加1天的形式,比如使用DATE_ADD去增加最后一天,最终得到2015-09-16到2015-09-18。
3、在前端时间控件上采用更精确的输入,比如可以选择年月日时分秒的级别,但是如果要精确到毫秒级别的,需要另做处理,还是使用拼接字符串的形式,或者采用增加函数去增加毫秒级别。
4、如果采用DATE_ADD去增加1天,那么会面临一个问题,就是如果2017-09-18 00:00:00的数据就会被查出来,所以解决方法还是字符串拼接的形式会靠谱一些;或者如果用函数增加时间时,最好不要加满到1天。(初步想法,没实践)
5、如果想要优雅的解决,最完美的方式应该是时间戳的形式,比如将时间转成时间戳的形式去查询。
MyBatis的时间段查询方案:
说明:以下只是查询的语句,没涉及到精确到毫秒级别的查询。
<!-- 查询条件:创建开始时间 -->
<if test="createdBegintime!=null and createdBegintime!=''">
AND CREATED >= #{createdBegintime}
</if> <!-- 查询条件:创建结束时间 -->
<if test="createdEndtime!=null and createdEndtime!=''">
AND CREATED <= #{createdEndtime}
</if>
<if test="date!=null">
<![CDATA[
AND CREATE_TIME >= CONCAT(#{date},' 00:00:00')
AND CREATE_TIME <= CONCAT(#{finish},' 23:59:59')
]]>
</if>
<![CDATA[ 这里面是sql语句. 大于号.小于号 ]]> 用这个把大于号.小于号包含起来
<select id="selectOrderListByPage" parameterType="com.xhh.webui.system.entity.Order"
resultType="com.xhh.webui.system.entity.Order">
select * from `order`
<where>
<if test="begindate != null and begindate !=''">
createTime>#{begindate,jdbcType=TIMESTAMP}
</if>
<if test="enddate != null and enddate !=''">
and createTime<#{enddate,jdbcType=TIMESTAMP}
</if>
</where>
<if test="sort != null and order != null">
<![CDATA[ order by ${sort} ${order} ]]>
</if>
LIMIT #{start},#{rows}
</select>
参考:
http://www.cnblogs.com/zhangliang88/p/5479682.html
http://www.jquerycn.cn/a_15385
http://blog.csdn.net/luckyboyguo/article/details/50427086
http://blog.csdn.net/zl544434558/article/details/24428307?utm_source=tuicool&utm_medium=referral
http://www.cnblogs.com/winner-0715/p/5912157.html
http://bbs.csdn.net/topics/391838987
MyBatis 3实现时间段精确的查询(转)的更多相关文章
- mybatis 插入日期类型精确到秒的有关问题
mybatis 插入日期类型精确到秒的问题 Mybatis 插入 数据库是为了防止插入空时报错, Mybatis 提供了一套机制,只要给定插入的字段的类型,如果为空,则它会自动处理为相应类型的默认值: ...
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)
使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)
这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...
- 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)
梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...
- MyBatis基础入门《八》查询参数传入Map
MyBatis基础入门<八>查询参数传入Map 描述: 在执行select查询数据的时候,方法传入的参数是java.util.Map类型. 接口方法: xml文件 注意: 书写SQL语句的 ...
- MyBatis基础入门《七》查询参数传入对象
MyBatis基础入门<七>查询参数传入对象 描述: 在执行查询语句的时候,传入的参数是一个对象,依据对象的属性,进行检索数据.此时,书写SQL语句中的条件时,其参数需要和对象中的属性保持 ...
- MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...
- Mybatis中动态SQL多条件查询
Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...
随机推荐
- P4280 [AHOI2008]逆序对
传送门 有一个不会证明的贪心:从左到右考虑每一个位置,然后在每一个位置都贪心选取能让该位置构成的逆序对最少的数.判断逆序对的话只要记一下前缀小于等于某数的总数和后缀小于等于某数的总数就行了 //min ...
- 【Leetcode】474. Ones and Zeroes
Today, Leet weekly contest was hold on time. However, i was late about 15 minutes for checking out o ...
- Hadoop Hive概念学习系列之hive里的桶(十一)
不多说,直接上干货! Hive还可以把表或分区,组织成桶.将表或分区组织成桶有以下几个目的: 第一个目的是为看取样更高效,因为在处理大规模的数据集时,在开发.测试阶段将所有的数据全部处理一遍可能不太 ...
- nodejs全局安装路径的位置
一般nodejs安装在默认的C盘,如果不知道安装在哪里,可以打开控制面板-系统和安全-系统-高级配置中找到 所谓全局安装: 是指安装在node中node_module的根目录里,可以在电脑的任何位置调 ...
- Android 串口驱动和应用测试
这篇博客主要是通过一个简单的例子来了解Android的串口驱动和应用,为方便后续对Android串口服务和USB虚拟串口服务的了解.这个例子中,参考了<Linux Device Drivers& ...
- SQL基本操作——HAVING
HAVING:在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. 我们拥有下面这个 "Orders" 表: O_Id OrderDate Or ...
- java攻城狮之路--复习JDBC
1.JDBC中如何获取数据库链接Connection? Driver 是一个接口: 数据库厂商必须提供实现的接口. 能从其中获取数据库连接. 可以通过 Driver 的实现类对象获取数据库连接. 1. ...
- pycuda installation error: command 'gcc' failed with exit status 1
原文:python采坑之路 Setup script exited with error: command 'gcc' failed with exit status 1 伴随出现"cuda ...
- java中“53”个关键字(含2个保留字)
1.java的关键字(keyword)有多少个? 51+2个保留字=53个关键字(java的关键字都是小写的!!) 2.java的保留字(reserve word)有多少个?问题:分别是什么? 2个保 ...
- requirejs(模块化)
<script src="../../dist/js/require.js" data-main="../../dist/js/main.js">& ...