hibernate中的hql语句,字符串时间范围筛选处理
一、疑难问题
1、数据表的业务时间是字符串类型。
2、如何通过hql语句进行业务时间范围筛选。
二、解决方法
1、将业务时间字符串类型转换成时间类型。
mysql中字符串转时间:str_to_date(‘字符串时间’,‘%Y-%m-%d %H:%i:%s’);oracle中字符串转时间:to_date('字符串时间,‘yyyy-MM-dd hh24:mi:ss’)。
2、范围筛选:between … and …
三、具体代码
/*** 查询大数据数据列表* @param req 请求参数对象* @param res 响应参数对象* @param ctx* @throws SecurityException* @throws ServiceException*/
public void getAllBigData(Map<String, Object> req, Map<String, Object> res,Context ctx) throws SecurityException, ServiceException {Map<String,Object> params = new HashMap<String, Object>();String where = getCnd(req,res,ctx);StringBuffer buffer = new StringBuffer();StringBuffer total = new StringBuffer();buffer.append(" FROM X");total.append(" FROM X");if (null != req.get("cnd")) {buffer.append(where);total.append(where);} else {buffer.append(" where 1=1");total.append(" where 1=1");}// 获取mpi标识Object mpiFlag = req.get("mpiFlag");if (null != mpiFlag){buffer.append(" and mpiFlag ='F'");total.append(" and mpiFlag ='F'");}// 获取解包标识Object unpackFlag = req.get("unpackFlag");if (null != unpackFlag){buffer.append(" and unpackFlag ='F'");total.append(" and unpackFlag ='F'");}// 获取业务开始时间Object effectiveTime_start = req.get("effectiveTime_start");// 获取业务结束时间Object effectiveTime_end = req.get("effectiveTime_end");if (null != effectiveTime_start && null != effectiveTime_end){// 转换为字符串类型的业务时间String effectiveTimeStartStr = effectiveTime_start.toString().concat(" 00:00:00";String effectiveTimeEndStr = effectiveTime_end.toString().concat(" 23:59:59";// 获取数据库配置db.propertiesProperties properties ;// 数据库的连接地址String dbUrl = null;try {properties = PropertiesLoaderUtils.loadAllProperties("platform/config/db.properties");dbUrl = properties.getProperty("db.url");}catch (IOException ioEx){ioEx.printStackTrace();logger.error("获取数据库配置db.properties异常:"+ioEx.getMessage());}// 数据库的连接地址是包含mysql还是oracleif (null != dbUrl && dbUrl.contains("mysql")) {// mysql中字符串转时间:str_to_date()buffer.append(" and str_to_date(effectiveTime,'%Y-%m-%d %H:%i:%s') between str_to_date('" + effectiveTimeStartStr + "','%Y-%m-%d %H:%i:%s')");buffer.append(" and str_to_date('" + effectiveTimeEndStr + "','%Y-%m-%d %H:%i:%s')");total.append(" and str_to_date(effectiveTime,'%Y-%m-%d %H:%i:%s') between str_to_date('" + effectiveTimeStartStr + "','%Y-%m-%d %H:%i:%s')");total.append(" and str_to_date('" + effectiveTimeEndStr + "','%Y-%m-%d %H:%i:%s')");}if (null != dbUrl && dbUrl.contains("oracle")) {// oracle中字符串转时间:to_date()buffer.append(" and to_date(effectiveTime,'yyyy-MM-dd hh24:mi:ss') between to_date('" + effectiveTimeStartStr + "','yyyy-MM-dd hh24:mi:ss')");buffer.append(" and to_date('" + effectiveTimeEndStr + "','%Y-%m-%d %H:%i:%s')");total.append(" and to_date(effectiveTime,'yyyy-MM-dd hh24:mi:ss') between to_date('" + effectiveTimeStartStr + "','yyyy-MM-dd hh24:mi:ss')");total.append(" and to_date('" + effectiveTimeEndStr + "','yyyy-MM-dd hh24:mi:ss')");}}Integer page = Integer.parseInt(req.get("pageNo").toString());Integer pageSize = Integer.parseInt(req.get("pageSize").toString());Integer start = (page - 1) * pageSize;List list = SqlUtils.createQuery_NoPage(buffer, params, start, pageSize);Integer totalNum = SqlUtils.createQuery_NoPage(total,params).size();res.put("body", list);res.put("totalCount",totalNum);
}
四、总结
1、数据表字段类型设计,需要考虑好字段类型,选择合适的字段类型。
2、对于字段类型不一样的情况,需要考虑到如果修改字段类型影响大,那就选择转换字段类型。
hibernate中的hql语句,字符串时间范围筛选处理相关推荐
- 应用hibernate中的hql语句对日期的操作总结
------------------------------------------------------------------------这篇文章是我在进行hibernate查询时由于百度搜索很 ...
- hibernate中的hql查询语句list查询所有与iterate查询所有的区别
hibernate中的hql查询语句list查询所有与iterate查询所有的区别 list查询所有: 01,会立即产生一条select语句1select查询出来的所有语句都会被session管理, ...
- hibernate 学习之——hql 语句
hibernate 学习之--hql 语句 hibernatre hql 语句:是对于hibernate的orm模式的一种类似于JDBC语句的面对对象的操作语句 特点 : 1.对于类名属性名区分大小写 ...
- 使用SQLQuery 在Hibernate中使用sql语句
对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...
- Hibernate中的HQL的基本常用小例子,单表查询与多表查询
<span style="font-size:24px;color:#3366ff;">本文章实现HQL的以下功能:</span> /*** hql语法:* ...
- hibernate中的hql带有参数的参数语句以及二级缓存
hql带有参数的参数语句直接写到test方法里面 package com.hp.dao; import java.util.List; import org.hibernate.Session; im ...
- 在Excel中使用SQL语句查询和筛选
本文转自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html 今天在微博上看到@数据分析精选 分享的一篇文章,是关于<在Excel中使用SQ ...
- sql转java对象_关于hibernate中使用sql语句时,类对象的转换问题。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 @SuppressWarnings("unchecked") public List getAllStorytell(Long use ...
- HQL语句中数据类型转换,及hibernate中createQuery执行hql报错
一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...
最新文章
- ACMNO.42 C语言-第几天 定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。利用结构体的在最下面
- 【转载】ATI显卡在Ubuntu下设置方法(很全面)
- java basic认证_Basic认证
- 计算机与图像处理论文标题,数字图像处理论文各种题目.doc
- SQL Server 2000 JDBC驱动的完整安装及测试说明
- 字符串混淆技术应用 设计一个字符串混淆程序 可混淆.NET程序集中的字符串
- 14--用两个栈实现队列
- 信息安全系统设计基础第四周学习总结—20135227黄晓妍
- 满足StrataFlash嵌入式存储器要求的LDO应用电路
- 如何设置几个循环出来的span其中一个宽度_css几个概念
- python基于协程的网络库gevent、eventlet
- Python进阶(九)常用高级函数Counter、defaultdict、nametuple、map、reduce、filter、groupby
- 闭合导线平差计算(表面)
- java暗装没有快捷键,java强行videos
- 堆排序算法实现(最小堆)
- NPN和PNP型传感器或开关如何接线?
- 揪出系统中秘密隐藏的木马(下)
- 联想android怎么解密,联想G886手机如何解密
- 常用的大功率电阻有哪些,电阻功率降额设计要注意什么
- 科学家学习天竺葵特性,研制出用水分子来驱动的微型机器人
热门文章
- Python制作 .fasta文件的解析器
- 微信小程序文字转语音并播放
- linux 创建用户命令
- 通过国家码切换默认输入法
- 动态规划篇——最长公共子序列(c++)
- python中打印5个空格的代码是_如何在Python中打印空格?
- 近百种围巾的系法和搭配
- C++11中模板类std::enable_shared_from_this的使用
- 快手推出“原片”对标字节“醒图”,百亿修图市场好进吗?
- W3c phpl基础参考手册-2016-01参考