目录[-]
删除代码示例
插入代码示例
更新代码示例
查询代码示例
总结
现在的应用系统中,绝多多数的情况下都是要用到数据库的,而适合Java框架的数据库处理方案太多了,这里就不一一列出了。
现在又比较流行一种DSL(Domain Specific Language)风格的数据库访问方式,比如:JOOQ、Querydsl等等,都比较成熟。仔细研究了一下,觉得存在如下问题:这两货都是收费的,这明显不符合时代潮流么;第二就是有点过度封装的意思,有许多东西都封装了,导致学习及使用成本上升;再就是体量都比较大,能不能又瘦又小又好用?
当然,也有一些同学有自己的实现,不能一一研究并列举,今天仅做验证性开发,不足之处同学们尽快提出来,只要合情合理,我们都会采纳。
OK,说做就做,花点时间看看,可不可以自己做个实现?
删除代码示例
delete(USER).where( USER.NAME.eq("悠然") ); delete(USER).where( USER.NAME.leftLike("A"), USER.AGE.between(20,30) );
插入代码示例
insertInto(USER).values( USER.NAME.value("悠然"), USER.AGE.value(22) );
更新代码示例
update(USER).set( USER.NAME.to("abc"), USER.AGE.to(3) ).where( USER.NAME.eq("悠然") );
查询代码示例
selectFrom(USER); select( customField("%s-%s"), USER.NAME,USER.AGE ).from(USER); select( customField("upper(%s)-%s"), USER.NAME,USER.AGE ).from(USER); selectFrom(USER).orderBy(USER.NAME.desc()); selectFrom(USER).where( USER.NAME.eq("abc") ); selectFrom(USER).where( USER.NAME.like("abc") ); selectFrom(USER).where( or( USER.NAME.like("abc"), USER.AGE.gt(20) ) ); selectFrom(USER).where( USER.AGE.gt(20).and( USER.NAME.like("abc"), USER.AGE.gt(20) ) ); selectFrom(USER).where( USER.NAME.leftLike("abc") ); selectFrom(USER).where( USER.AGE.between(23, 25) ); select(USER.AGE.max()).from(USER); select(USER.AGE.min()).from(USER); select(USER.AGE.avg()).from(USER); select(USER.AGE.count()).from(USER); select(USER.AGE.sum()).from(USER); select(USER.NAME.distinct()).from(USER); select(USER.AGE.sum()).from(USER).having( USER.AGE.sum().gt(100) ).union( select(USER.AGE.sum()).from(USER).having( USER.AGE.sum().gt(100) ) );
查询是最复杂,也是最多变的,上面已经列举了大多数情况。
总结
通过上面的示例,基本上涵盖了四种SQL语句的处理方式。当然每种方案都有它自己的优点与缺点,正所谓萝卜芹菜各有所爱。
这个方案的优点是把SQL逻辑用有语义的代码进行编写,更容易理解;同时由于其与SQL语句的结构相当相似,也更容易写出相应的SQL逻辑,熟悉SQL的人的学习成本非常低;同时也可以非常好的避免SQL注入问题;较SQL拼接是有相当的改善的。也避免了SQL与Java代码分离导致的开发和调试的不方便。
当然也有它的缺点,比如,经常听到的反对声音就是不如写原生SQL。
完整实现版即将推出。
欢迎登录关注:http://bbs.tinygroup.org,本例涉及的代码和框架资料,将会在论坛分享。技术交流群:228977971,让我们一起动手,了解框架的奥秘!
相关推荐
840Dsl_828D编程手册 840Dsl_828D编程手册
领域语言(DSL)的设计与实践领域语言(DSL)的设计与实践领域语言(DSL)的设计与实践
840DSL编程手册
西门子828D_840Dsl车床操作和编程培训手册——内部培训资料 车床目录 工艺基础知识、基本操作、参数操作区域、利用Shopmill车削、利用Shopmil钻削、利用Shop turn车削轮廓、利用ShopTrun铣削轮廓、...
它使用定义数据库模式,并根据DSL更新数据库模式。 (例如厨师/木偶) 变更日志 >= 0.4.8 activerecord-mysql-unsigned现在是可选的。 如果要使用,请在安装 --enable-mysql-unsigned之后传递--enable-mysql-...
西门子828D_840Dsl铣床操作和编程培训手册(内部培训资料) 铣床目录:工艺基础、操作基础知识、参数操作区域、利用Shopmill铣削、利用Shopmil钻削、利用Shopmill铣削轮廓、Shopmill中的直线圆弧、programGUIDE的...
西门子SINUMERIK 840Di SL循环编程手册pdf,西门子SINUMERIK 840Di SL循环编程手册
使用Groovy可以快速灵活完成文本处理,数据库访问,XML处理等常见任务。研究表明,使用Groovy比使用Java写程序,代码量少3-10倍。 DSL是新一代基于领域设计专用语言。由于Groovy的超级灵活性,你可以使用Groovy快速...
西门子SINUMERIK 802D sl的操作编程 - 磨床pdf,西门子SINUMERIK 802D sl的操作编程 - 磨床
808D SIEMENS 编程 循环程序使用
同时,我们还将介绍布尔查询、should查询和must_not查询等与逻辑关系相关的查询语句,帮助您更好地理解DSL的灵活性和强大之处。此外,我们还将深入讨论聚合操作在DSL中的应用。通过使用聚合查询,您可以对检索结果...
完整编程器固件,写入就可以用,
SINUMERIK 840D SL 基础部分 编程手册V4.91
在看JavaScript Template源码的时候,发现有一个很有意思的用法用来生成函数,想到这不就是元编程么? JavaScript 元编程 代码如下: 元编程(Metaprogramming)是指某类计算机程序的编写,这类计算机程序编写或者...
西门子高级编程手册_840D_810Di_810D_FM_NC高级篇 非常不错哦!
西门子802D sl PLC编程软件 RS232通讯 梯形图
本文档详细的讲解了LSM6DSL的详细配置,其中讲解了数据的读取,唤醒模式,计步功能等。
赠送jar包:dsl-1.2.7.jar; 赠送原API文档:dsl-1.2.7-javadoc.jar; 赠送源代码:dsl-1.2.7-sources.jar; 赠送Maven依赖信息文件:dsl-1.2.7.pom; 包含翻译后的API文档:dsl-1.2.7-javadoc-API文档-中文(简体)版...