Nutz1.b.38发布实现Dao更快速的插入

数据库
自 Nutz 1.b.37 发布以来,时隔近3个月。为什么间隔这么时间呢?因为我们做了很多重大的调整。

自 Nutz 1.b.37 发布以来,时隔近3个月。为什么间隔这么时间呢?因为我们做了很多重大的调整:

  1. 重构了 Dao -- 兑现了我们之前的承诺
  2. 重构了 EL
  3. Nutz 的源码管理迁移到了 Github 上

以后,希望大家报 Issue 到 Nutz Github 的问题列表 中。Google Code 的问题列表还有66个 Issue 没有处理,我们会在后续的版本中尽快修复。如果都修复了,我们就会关闭 Google Code 的问题列表,只维护 Github 的问题列表。

另外,如果你在 Github 上有帐号,欢迎随时 fork Nutz,请记住我们的口号就是: 喜欢 Nutz,就 Fork 它

当然,Nutz 的下载地址仍然一直会是 Google Code 下载列表,并且 Nutz 在 Google Code 的项目主页 也会一直维护。

同时,我想提醒大家注意一下 Nutz 的官网,我们会不断的充实它的内容,比如最近做的

  1. Nutz 的文档
  2. Nutz 的小白测试

说到小白测试,不得不提一下 Dao 重构。我们这次重构 Dao 后总是不放心,其实我们在今年 5 月初就重构完了,然后我们测试呀,测试,毕竟是重构 Dao 了嘛,但是我们还是不放心,于是又测试呀测试... 但是我们还是不放心...

于是 Juqkai 同学在我和 Wendal 的撺掇下痛下决心,写了这个应用:

Nutz 小白测试计划

我们希望这个计划,能让更多人方便的参与测试,提交测试结果,这样我们就能为更多的人提供更稳定的 Jar 包。同时,我们也能更准确的统计贡献者名单。

当然如果没有人参与这个测试计划,最差的结果就是维持现状。令人欣慰的是,还是有4位同学(包括我)参加了1.b.38测试的小白测试

那么,让我们看看,以后的版本参加的人是会越来越多,还是越来越少 ^_^!

Dao 兼容性问题

作为一篇发行注记,这次我们要上点干货了

1.b.38 的 Dao 与之前的 Dao 使用上的主要区别

  1. 更快的批量操作 -- 比如大数据量的插入
  2. 提供了 Criteria 接口,扩展了 Condition 接口,这样查询的时候,可以用 PreparedStatement 参数
  3. 同时 Criteria 接口也非常方便你组织更复杂的 SQL 条件
  4. 自定义 SQL 可以设置 fetchSize,但是依然不能支持 pager,你还得自己用 SQL 方言来翻页
  5. 重新设计的 Entity ,可以方便的扩展,这样有些偏爱 JPA 或者配置文件的同学,可以扩展自己的实体配置方式
  6. 重新设计的 LOG,可以让 SQL 打印的更清晰
  7. 你甚至可以 dao.insert 或者 dao.update 一个 Map
  8. 支持 dao.create/dao.drop 方式来建表和删表
  9. org.nutz.dao.Dao 原有的接口函数统统保持不变,从而保证了兼容性不会有太大问题。

为了上述的优点,我们放弃了一点点兼容性,你的项目如果用 Nutz.1.b.38 可能需要少量修改几行代码。

Cnd 类的兼容问题

当然,如果你直接实现 Condition 接口也不会有问题。

  1. Cnd.exp 的返回值类型变成了 SqlExpression
  2. Cnd.exps 的返回值类型变成了 SqlExpressionGroup

Entity 接口的兼容问题

极个别很有 Hacking 精神的同学使用 Nutz 的时候,使用了 Entity 类,但是不幸的是现在 Entity 已经变成一个接口并且某些方法已经变了名字,但是原来 Entity 类所有的功能,现在 Entity 接口都能提供。如果你发现某些方法找不到了,耐心看看新的 Entity 接口的定义,我想你很快就能找到你要找的方法。

最重要的一个改变,就是原来的 entity.fields() 方法,变成了 entity.getMappingFields()。这个是有同学向我抱怨过,因此觉得有必要在这里特别提一下。

org.nutz.dao.tool 包的兼容问题

某些很有探索精神的同学可能偶然发现了 Nutz 还隐藏了一个 Dao 工具类的包,里面的方法可以跨数据库的建表,所以很有可能在自己的项目里也这么应用了。但是不幸的是,1.b.38 之后,这个包没了。因为我们不再需要它了。你的建表可以用:

Java代码

 

  1. dao.create(Pet.classtrue);   // true 表示如果存在,先 DROP 掉再建, false 表示如果存在就不建了  

来完成。当然,删表,可以用:

Java代码

  1. dao.drop(Pet.class); 

除此之外,Nutz.Dao 不会有和之前不兼容的地方了。当然如果你发现了,请随时告诉我们,应该都不是大问题。

EL 兼容性问题

EL 作为比较新的一个功能,可能用的人比较少,我们之后会再各个模块里逐渐发掘 EL 的潜力。本次发布 EL 经过了重构,效率提升了将近1倍。当然,作为一个用反射实现的东东,它的还是很慢,但是我们设计 EL 的时候假定它的使用场景是配置文件,后台进程等一些不是非常需要效率的地方。它可以让你的程序更有弹性。如果非常需要效率的地方,恐怕它不是一个很好的选择。

重构后的 EL,eval 的结果不再是 ElValue,而是普通的 Object,这样,你使用的时候会更方便一些。

并且EL的预编译,不再是

Java代码

  1. BinObj exp = El.compile("3+4"); 

而是

Java代码

  1. El exp = new El("3+4"); 

看起来更清爽一些不是吗? Juqkai 同学的设计 ^_^

#p#

问题修复

Issue 34 dao: support JPA Annotation by zozoh

Issue 85 NutDao 中需要提供批量更新操作的方法. by ming300

Issue 121 Nutz是否有根据实体上的注解来自动创建数据库表等对象的计划? by hzzdong

Issue 137 数据库操作是否可以增加对Blob类型的支持 by Toni.xutao

Issue 155 Dao 的 @Column注解可否标注在getter函数上 by jinghui70

Issue 192 NutDao性能问题:关于批量操作,使用PreparedStatement的Batch功能 by hzzdong

Issue 230 关于nutz dao能否动态根据tables.dod 更新表结构 by shao0707

Issue 267 NutzDao能否提供设置fetchSize的方法 by superxlm1985

Issue 294 Nutz Dao 大量数据插入效率问题 by fjayblue

Issue 332 sqlserver2005 nutz@google Junit测试 by haoyoushuai1986

Issue 416 建议nutz提供一个拼接复杂的查询条件的方法 by liuxiaogang1987

Issue 420 Sqls.create语句中包含'@'会出错。 by wangyingdong

Issue 426 Condition Cnd.where + orderBy by muyushi85

Issue 433 MVC的代码覆盖率实在太低,很多都没测试用例! by wendal

Issue 437 SqlLiteral中的@过滤 by zhuyingxi

Issue 457 Json:增加字段映射方式 by wendal

Issue 458 ActionChainMakerConfiguration类名拼写错误 by jentrees2008

Issue 466 使用MySQL数据库,使用Nutz.dao的自定义SQL报错 by mamacmm

Issue 469 Json.toJson 对char类型没有加引号 by lwk0571

Issue 471 Dao: 添加对Hsql数据库的支持 by wendal

Issue 473 使nutz兼容OSGi by windywany

Issue 478 1.b.38 的新 Dao 应该忽略 Column 不存在的情况 -- by Jay by zozoh

Issue 479 38 update 问题 by fjayblue

Issue 482 将Nutz打成jar, 2 个 Scans 的测试过不了 by zozoh

Issue 485 EL表达式引擎在某些情况下会出现错误 by ywjno.dev

Issue 487 ioc中某个属性的值是Map时,如果是null偶尔报:String can not cast to java.util.Map by superhanliu

Issue 489 AnnotationIocLoader类对set方法处理@Inject 有bug by feiyan

Issue 490 38的Dao,在DB2下,使用@Column('abc')的话,insert会报错 by wendal

Issue 493 Lang的str2number方法在某些情况下会出错 by ywjno.dev

Issue 494 自定义SQL wiki by superhanliu

Issue 497 Nztz.Dao 注释没写全,和注释重写 by hongchongyuan

Issue 500 nutz.Json 应扩展一下@JsonField注解 by conanca

质量

共通过了 697 个单元测试用例,代码覆盖率达到

Nutz.Dao 经测试在如下数据库上可以工作正常

  1. H2
  2. SQLite
  3. MySql
  4. Oracle
  5. Postgresql
  6. SqlServer2005
  7. SqlServer2000
  8. DB2

回答新手的问题,我们现在只能根据印象草草统计,贡献列表非常不完善。我们正在想办法,争取在不远的将来,能记录下来大家每一点一滴的付出 ^_^!

【编辑推荐】

  1. 大数据时代已来临,你准备好了吗?
  2. HBase数据库性能调优
  3. 自己动手丰衣足食,DIY SQL字符串分解函数Split
  4. 秘籍:如何做中小企业BI项目规划
  5. 说说SQL Server编年史
责任编辑:艾婧 来源: ITEYE
相关推荐

2012-02-15 10:07:02

JavaNutz

2020-11-01 16:14:27

PythonPyston v2.0

2011-06-21 15:07:46

2010-01-28 09:18:03

Scala 2.8

2010-12-08 09:55:57

VirtualBox

2011-08-24 09:03:55

PostgreSQL

2012-04-05 15:47:51

JavaRichFaces

2011-05-05 09:17:41

Firefox 5.0

2015-12-01 15:30:34

Visual Stud发布

2009-06-02 09:05:11

netbeans 6.netbeans下载netbeans发布

2012-04-16 15:18:15

JythonJVM

2012-03-19 10:04:06

JActorJava

2009-05-20 16:28:47

LinuxMusix2.0 Beta 1

2011-12-16 09:49:38

Java

2012-01-13 11:02:27

JavaWebOpenXava

2012-06-08 16:12:51

Ubuntu 12.1下载地址

2011-10-28 14:23:46

Ruby

2012-01-04 09:36:55

Java

2009-06-21 13:37:53

2012-03-15 16:46:02

JavaMyBatis
点赞
收藏

51CTO技术栈公众号