`
picksun
  • 浏览: 10683 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

SQL动态查询“万法归一”解决方案

阅读更多

这是原创文章,转载请注明javaeye的picksun所作,谢谢~

 

Hibernate使用的criteria语法过于复杂,使用的很多类及常量需要特别引入,

因此本人设计一个小型的条件查询,满足基本的查询需要,可以通过map实现多表查询、“group by”等

类似于PCI的插拔式结构,条件一般都是可以随意插拔的。

当然你可以并联,就想历史上大名鼎鼎的"巫毒"显卡一样,

把两个条件并联起来("or" 关联或者"between"条件的时候使用,可以使用括号)

实现一个语法,一般是通过拼接,完成对单追加条件(可以在后面追加条件),

where条件可以在conList不断添加,完全不加也可以,这样就实现了sql查询的”万法归一“:

既不用写一堆重载的findByProperties,也不用自己拼接SQL(或者HQL)

 

List<SqlConditionGroup> conList = new ArrayList<SqlConditionGroup>();


PageControl pageControl    = PageControl.getQueryOnlyInstance();
//PageControl pageControl    = PageControl.getPageEnableInstance(start, limit);

pageControl .setOrder("order by school desc, dataContent asc");

//pageControl .groupBy("group by xxx");

 

 

conList.add(new SqlConditionGroup("school","1","=","and"));

conList.add(new SqlConditionGroup("dataContent","%"+bean.getDataContent()+"%","like","and"));

conList.add(new SqlConditionGroup("school",Arrays.asList(new String[]{"1","2"}),"in","and"));

conList.add(new SqlConditionGroup("(dataValue",new Double(1.0),"between",""));

conList.add(new SqlConditionGroup("and",new Double(2.0),"",")and"));

conList.add(new SqlConditionGroup("schoolId",null,"in (select schoolId from tableA)","and"));

 

 

 

conList.add(new SqlConditionGroup("((fDate", beg_date,"=","and"));

conList.add(new SqlConditionGroup("fTime", end_time,"<=",")or("));
conList.add(new SqlConditionGroup("fDate", end_date,"=","and"));
conList.add(new SqlConditionGroup("fTime", end_time,"<=","))"));

 

 

//使用SQL
List<PDayData> day_list = curService.findByNativeCondition(pageControl, conList, "select * from PDayData ", PDayData.class);//PDayData.class,Map.class都可以

 

//使用HQL
List<PDayData> day_list = curService.findByCondition(pageControl, conList);

 

 

简单说明:SqlConditionGroup的结构,sign 默认为"=",type默认为"and"

/**
     * Sql参数查询条件
     *
     * @param name  属性名
     * @param value 值,可以是Array,List或者单值
     * @param sign  符号,如>,<,=,like,<>,in,isnull等等
     * @param type  连接类型,and或or,视情况可加括号
     */
    public SqlConditionGroup(String name, Object value, String sign, String type) {
        super();
        this.name = name;
        this.value = value;
        this.sign = sign;
        this.type = type;
    }

  • 大小: 5.3 KB
分享到:
评论

相关推荐

    SQL Server 2008 商业智能完美解决方案C

    SQL Server 2008 商业智能完美解决方案(3/4) 资源共享、一律免费

    SQLServer的性能调优:解决查询速度慢的五种方法

    本文主要通过一下几个方面介绍:使用SQLDMV查找慢速查询、通过APM解决方案查询报告、SQLServer扩展事件、SQLAzure查询性能洞察等相关内容。本文来自博客园,由火龙果软件Anna编辑、推荐。SQLServer的一个重要功能是...

    SQL Server 2008商业智能完美解决方案

    《SQL Server 2008商业智能完美解决方案》,高清扫描。

    《kettle中实现动态SQL查询》博客文章示例代码

    本文将深入探讨如何在Kettle中实现动态SQL查询,这对于处理复杂的数据库操作和数据迁移至关重要。我们将讨论问号占位符和命名参数这两种方法,并分析它们的区别。 首先,让我们理解什么是动态SQL查询。在传统的SQL...

    SQL注入安全问题解决方案-JAVA

    SQL注入安全问题解决方案-JAVA SQL注入安全问题解决方案-JAVA

    SQL2005 233错误 解决方案

    SQL2005 233错误 解决方案 SQL2005 233错误 解决方案

    两台SQL-Server数据同步解决方案

    ### 两台SQL Server数据同步解决方案详解 #### 一、概述 在当今信息化时代,数据同步成为企业级应用中不可或缺的一部分。特别是在分布式环境中,确保不同地理位置的数据库保持一致性和实时性变得尤为重要。本文将...

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    用递归逻辑、具体化路径或嵌套集合解决方案查询特殊的数据结构;通过逻辑难题提高你的逻辑能力并掌握查询问题的核心等。  你将学习到如何:  理解逻辑和物理的查询处理;  使用方法论优化查询;  解决关系分区...

    SQL Server 2008商业智能完美解决方案 1/3

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    使用MSDE创建移植到SQL Server的可伸缩的解决方案.pdf

    "使用MSDE创建移植到SQL Server的可伸缩的解决方案" MSDE(Microsoft Data Engine)是一种可靠的、可伸缩的解决方案,能够帮助开发者快速创建基于SQL Server的应用程序。MSDE是一种关系数据库管理系统,能够提供...

    sql server 2008 商务智能解决方案

    sql server 2008 商务智能 BI解决方案。

    基于jquery js自定义sql条件查询

    用户自己定义动态组织sql查询条件,对于用户来说相当方便的啦。可以自由选择查询字段、条件条件、条件值,选择与或关系,包括括号优先的使用。根据查询字段不同,查询条件值的动态改变,如日期控件、下拉框、可输入...

    SQL Server 2008 商业智能完美解决方案A

    SQL Server 2008 商业智能完美解决方案(1/4) 资源共享,一律免费

    extjs 在线sql查询

    在“在线SQL查询”这个场景中,ExtJS 被用来构建一个用户界面,允许用户在浏览器中直接执行SQL查询,这对于数据库管理或数据分析来说非常方便。 `Ext.ux.window.VisualSQLQueryBuilder` 是ExtJS的一个扩展组件,...

    SAP ABAP SQL查询分析器(ABAP动态SQL执行)ZSQLEXPLORER

    这个是国外人使用ABAP写的一个类似一SQL Server的查询分析器,它能够直接运行ABAP的OPEN SQL,由于SE11或者是SE16都只能对一表进行查询,但很多的时候我们需要对多个表进行联合查询,这时就可以发挥很大作用了,希望...

    高并发操作SQLSERVER的解决方案

    将所有的请求全部压入一个队列中。服务器监控队列,如果队列中有请求,则处理请求。如下面的代码中,服务器就起了100个线程来监控队列,如果队列中有请求,则插入数据库。在实际的应用中,服务器监控程序也可以起到...

    Microsoft SQL Server 2005技术内幕:T-SQL查询

    目录 致谢 引言 第1章 T-SQL查询和编程基础  1.1 理论背景  1.2 SQL SERVER体系结构 ... 1.3 创建表和定义数据完整性 ...第2章 单表查询 ... 10.6 动态SQL  10.7 例程  10.8 错误处理  10.9 总结

    1 SQL Server 2012 高可用性解决方案.pptx

    1 SQL Server 2012 高可用性解决方案.pptx

    普元 命名sql 处理动态sql

    对于同一个查询的命名sql,列或者表名都是动态的,如有些时候命名sql为select custID,custName from cust,有些时候是select custID from cust,这时候列名是变量。EOS中默认是不支持的,会报列错误。 解决方案...

Global site tag (gtag.js) - Google Analytics