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

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

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