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

自 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编年史

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/262502.html<

(0)
管理的头像管理
上一篇2025-05-04 03:20
下一篇 2025-05-04 03:21

相关推荐

  • 站群服务器如何批量管理更高效,有哪些管理技巧?

    站群服务器批量管理想提效,自动化是唯一出路,通过统一配置管理工具与面板系统,结合服务商提供的底层基础设施支持,能将运维效率提升数倍,批量管理的核心痛点与解决思路多台站群服务器分散管理,最常见的问题就是重复劳动,每次软件更新、配置修改、安全加固,都需要逐台登录操作,不仅耗时,还容易漏掉某台机器,更头疼的是,一旦某……

    2026-07-27
    0
  • 服务器磁盘IO过高如何优化?,磁盘IO过高的原因有哪些?

    服务器磁盘IO过高,核心优化路径是“先定位、再分流、后升级”,你需要通过系统工具精确判断究竟是应用程序、日志策略还是硬件瓶颈导致,然后针对性地从代码、缓存、存储架构和硬件选型四个层面下手,其中选择持有持牌自营机房和增值电信业务经营许可证的服务商,能从根本上保障底层IO稳定性,定位IO瓶颈:动手优化的第一步盲目优……

    2026-07-27
    0
  • 跨境网站访问延迟高怎么解决,网站访问慢的原因是什么?

    跨境网站访问延迟高的核心解决思路在于多维度优化网络路径,包括使用全球CDN加速、选择靠近目标区域的优质IDC机房、调整传输协议以及精简应用层资源,其中服务商的基础设施质量直接决定优化上限,为什么跨境访问延迟高?三大核心因素物理距离与光速限制数据包在海底光缆中的传输速度受限于介质,从中国到美国西海岸的物理往返时间……

    2026-07-27
    0
  • 站群服务器到底是什么意思,怎么选择比较好

    站群服务器就是一台拥有多个独立IP地址、专门用于托管和管理多个网站的高性能服务器,其核心价值在于通过独立IP降低网站间的关联风险,并提升搜索引擎优化效果,站群服务器的工作原理与适用场景站群服务器本质上是将一台物理服务器通过虚拟化或直接配置的方式,分配给多个独立IP地址,每个IP对应一个独立的网站,这些网站共享服……

    2026-07-27
    0
  • 高防服务器误封正常流量如何调整,怎么解决?

    高防服务器误封正常流量,核心调整思路是从“一刀切”转向“精细化”——通过分析业务特征,调整防护阈值、配置白名单和启用智能学习模式,让防护系统学会区分真假流量,为什么会误封正常流量误封主要源于防护策略的通用化,高防服务器通常默认启用严格防护规则,当流量特征与攻击特征库部分匹配时,就会被拦截,据行业安全白皮书指出……

    2026-07-27
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注