我占个位,命名为陈氏查询!一帮所谓牛人总说不是什么创新,为我的“陈氏查询”名称感到很不爽!但他们所提供的证据范例个人认为连ibatis的做法都不如,反增加了开发的麻烦!

还是开门见山,本文所要介绍的是针对数据库查询(当然要是ldap什么的基于查询指令的都适用),其目的在于将sql跟代码进行分离,同时能够保持sql或hql语句的

结构完整性(写sql的步骤一般是:在数据库客户端整理好sql并排版好放到代码中用stringbuffer拼起来,要是修改就痛苦了,还得调试代码得到整个语句),请好好看上面红色字的内容,平时是不是这样做的?如果是你就接着看下面的内容,对你帮助很大!

我们有很多时候数据库查询是由多个条件组合而成,但究竟是哪个条件是不确定的

展示一下效果:

提示一下,本功能支持hql查询如(对于hql优点主要体现在查询条件不固定时,hql写法非常优雅):

from HrOrganInfo

where 1=1

#[and createDate>=? and createDate<=?]

#[and ORGAN_NO like ?]

#[and ORGAN_NAME like ?]

#[and IS_ACTIVE=?]]]>

本功能最大的优点在于动态查询条件时hql或sql的写法非常的优雅,结构完整!

同时#[]支持嵌套,如:

#[]相当于if判断

select  t.*

from table_name t

where 1 = 1

and t.type=:type

#[and t.status=:status

and t.orderId=(select orderId

from t2

#[where t2.namelike :name]

)

]

调用方法:

sql语句可以是

select * from t where t.name=:name and t.createDate>:createDate 不一定是?号,以解除使用者需要记住参数顺序

的烦恼。

1、分页调用

通过反调映射到对象

PaginationModel findPageByJdbc(final String sqlOrNamedSql,

final String[] paramsNamed, final Object[] paramsObj,

final PaginationModel paginationModel,

final RowCallbackHandler rowCallbackHandler);

直接返回数据库结果结合,不映射对象

PaginationModel findPageByJdbc(final String sqlOrNamedSql,

final String[] paramsNamed, final Object[] paramsObj,

final PaginationModel paginationModel);

直接转VO式调用

PaginationModel findPageByJdbc(final String sqlOrNamedSql,

final String[] paramsNamed, final Object[] paramsObj,

final PaginationModel paginationModel, final Class voClass);

2、非分页反调方式

直接数据库数据集合返回

List findByJdbcQuery(final String sqlOrNamedSql,

final String[] paramsNamed, final Object[] paramsValue);

通过反调映射到对象

List findByJdbcQuery(final String sqlOrNamedSql,

final String[] paramsNamed, final Object[] paramsValue,

final RowCallbackHandler rowCallHandler)

直接转VO对象调用

List findByJdbcQuery(final String sqlOrNamedSql,

final String[] paramsNamed, final Object[] paramsValue,

final Class voClass)

hql的调用差不多:findByhql 或findPageByhql,参数当然就没有voClass和RowCallbackHandler了,因为hql返回的就是对象集合!

工作机理很简单,就是通过判断参数是否为null(结合sql特性如is null)对sql语句进行重新整理,后台提供了convertSqlParams功能将特定值转为null

this.findPageByJdbc("hr_getOrganInfoByNo", null,new Object[] { organNO,SqlUtil.filterEquals(status,"-1")}, pageModel,OrganInfoVO.class);

提供java反射器直接映射成VO,也提供了RowCallbackHandler通过反调方式生成VO,当然voClass和RowCallbackHandler都为null,就直接返回数组集合!

目前增加了缓存机制

一句分页查询就这么简单:

return this.findPageByJdbc("security_findRole", null, new Object[] {

SqlUtil.filterEqual(roleVO.getActiveFlag(), SystemConstants.FULL),

SqlUtil.filterEqual(roleVO.getLayerFlag(),  SystemConstants.FULL),

SqlUtil.filterBlank(roleVO.getAllRoleNos()) }, pageModel, RoleVO.class);

如果你想藐视请你拿出你的写法,要是更简单我服你,要是觉得不错请回帖顶一下(实在是看到太多没有看明白就否定一切的人)

[本帖最后由 zhongxuchen 于 2009-6-23 17:34 编辑]

柏睿数据java_数据库动态查询最佳实现 陈氏查询相关推荐

  1. 基于自研分布式内存及流数据库技术的柏睿数据宣布获2亿元C轮融资

    大数据产业创新服务媒体 --聚焦数据 · 改变商业 数据猿报道 6月19日,大数据与人工智能公司柏睿数据正式对外宣布完成2亿元C轮融资,由海通证券旗下南方融合基金与盛石资本旗下长三角产业创新基金联合领 ...

  2. 柏睿数据总裁梁雪青:在智能制造上,流数据库用武之地更大

    在11月10日于西安召开的第七届中国信息技术服务产业年会上,柏睿数据公司介绍的流数据库技术及其应用现状和前景,引起与会者强烈兴趣. 应邀出席会议的柏睿数据总裁梁雪青在会上说,流数据库技术将在2018年 ...

  3. 柏睿数据董事长兼CTO刘睿民:未来数据库行业大有可为

    柏睿数据董事长兼CTO刘睿民:未来数据库行业大有可为 大数据数据库 height="16" src="http://hits.sinajs.cn/A1/weiboshar ...

  4. 浪潮集团执行总裁王洪添一行莅临柏睿数据公司商讨战略合作

    7月17日,浪潮集团执行总裁王洪添.浪潮集团甘肃区总经理许国彬.浪潮云服务集团云产品部副总经理祝乃国一行来访我公司洽谈战略合作,公司董事长刘睿民.总裁梁雪青等领导热情接待,工信部软件司原司长陈伟作为嘉 ...

  5. 技术人攻略访谈四十-刘睿民:数据库战国时代,我不跟你们玩政治!

    文:Gracia (本文为原创内容,部分或全文转载均需经过作者授权,并保留完整的作者信息和技术人攻略介绍.) 导语:本期访谈对象刘睿民(Dowson Liu),柏睿数据科技CEO.和Dowson的会面 ...

  6. 技术人攻略访谈四十|刘睿民:数据库战国时代,我不跟你们玩政治!

    文:Gracia (本文为原创内容,部分或全文转载均需经过作者授权,并保留完整的作者信息和技术人攻略介绍.) 导语:本期访谈对象刘睿民(Dowson Liu),柏睿数据科技CEO.和Dowson的会面 ...

  7. CO内外部记账数据对应数据库表(COSP、COSS、COEP、COBK、TBO01)和业务场景操作示例

    文章目录 一.CO记账数据来源的业务场景 二.业务场景示例 2.1 业务场景一示例 2.1.1 FI财务记账计入费用 2.1.2 费用型采购订单计入费用 2.2 业务场景二示例 三.记账数据对应数据库 ...

  8. 图解大数据 | 海量数据库查询-Hive与HBase详解

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  9. sql查询百分之20到百分之40的数据_数据库基础学习——SQL语言知识总结(6)

    1 视图(View) 1.1什么是视图 可以通过创建表的视图来表现数据的逻辑子集或数据的组合.视图是基于表或另一个视图的逻辑表,一个视图并不包含它自己的数据,它象一个窗口,通过该窗口可以查看或改变表中 ...

最新文章

  1. UVa 11059 - Maximum Product
  2. STL中heap算法(堆算法)
  3. apache weblogic ssl linux,apache基于ssl配置weblogic(完结篇)
  4. AUTOSAR从入门到精通100讲(126)-浅谈车载充电系统通信方案
  5. 前端学习(3148):react-hello-react之getSnapBeforeUpdate
  6. opencv 高反差保留算法
  7. python输出元组重复的元素_python – 从n个元素生成所有4元组对
  8. 诡异的json包含bom头
  9. shouldband绑定数据的办法
  10. python写stm32_python开发stm32例程
  11. div css切图在线
  12. 歪门邪道?新技术让智能手机可窃取附近键盘输入信息
  13. 你必须收藏的快速学习Autodesk最新编程接口的免费录像
  14. restful 验证码平台请求验证
  15. 为什么深度学习都在用python,你知道吗
  16. appimage转deb
  17. mLife | DANMEL:面向细菌耐药移动元件分析的手工精细注释参考数据库
  18. linux awk命令深入浅出的解释
  19. Unity 游戏设计模式 — 策略模式(Strategy)
  20. 坑!人民币符号¥为什么有时候一根横线,有时候两根横线?

热门文章

  1. Linux的find命令详解
  2. [享学Eureka] 一、源生Eureka介绍 --- 基于注册中心的服务发现
  3. 权限管理——用户认证和用户授权
  4. 安卓模仿微信通讯录--RecyclerView+SideBar
  5. MADlib——基于SQL的数据挖掘解决方案(6)——数据转换之矩阵分解
  6. STM32F103代码远程升级(五)基于MQTT协议WiFi远程升级代码的实现
  7. 使用M0 DesignStart 的样例SoC(example system) - 3 verdi环境配置
  8. python制作手机通讯录功能
  9. 机械臂正运动学标准DH参数建立技巧
  10. 华为路由器负载均衡_华为路由器双出口负载均衡+备份 (2)