Jul 10, 2017 10:38:44 AM

作者:wendal

1.b.38 发行注记

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

  • 重构了 Dao — 兑现了我们之前的承诺
  • 重构了 EL
  • Nutz 的源码管理迁移到了 上
    以后,希望大家报 Issue 到 Nutz Github 的问题列表 中。还有66个 Issue 没有处理,我们会在后续的版本中尽快修复。如果都修复了,我们就会关闭 Google Code 的问题列表,只维护 Github 的问题列表

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

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

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

  • Nutz 的文档

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

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

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

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

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

Dao 兼容性问题

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

  • 更快的批量操作 — 比如大数据量的插入
  • 提供了 Criteria 接口,扩展了 Condition 接口,这样查询的时候,可以用 PreparedStatement 参数
  • 同时 Criteria 接口也非常方便你组织更复杂的 SQL 条件
  • 自定义 SQL 可以设置 fetchSize,但是依然不能支持 pager,你还得自己用 SQL 方言来翻页
  • 重新设计的 Entity ,可以方便的扩展,这样有些偏爱 JPA 或者配置文件的同学,可以扩展自己的实体配置方式
  • 重新设计的 LOG,可以让 SQL 打印的更清晰
  • 你甚至可以 dao.insert 或者 dao.update 一个 Map
  • 支持 dao.create/dao.drop 方式来建表和删表
  • org.nutz.dao.Dao 原有的接口函数统统保持不变,从而保证了兼容性不会有太大问题。
    为了上述的优点,我们放弃了一点点兼容性,你的项目如果用 Nutz.1.b.38 可能需要少量修改几行代码。

Cnd 类的兼容问题

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

  • Cnd.exp 的返回值类型变成了 SqlExpression
  • Cnd.exps 的返回值类型变成了 SqlExpressionGroup
    Entity 接口的兼容问题

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

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

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

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

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

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

EL 兼容性问题

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

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

而是

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

问题修复

  • dao: support JPA Annotation byzozoh
  • Issue 85 NutDao 中需要提供批量更新操作的方法. byming300
  • 数据库操作是否可以增加对Blob类型的支持 byToni.xutao
  • Issue 155 Dao 的 注解可否标注在getter函数上 byjinghui70
  • Issue 192 NutDao性能问题:关于批量操作,使用PreparedStatement的Batch功能 byhzzdong
  • 关于nutz dao能否动态根据tables.dod 更新表结构 byshao0707
  • Issue 267 NutzDao能否提供设置fetchSize的方法 bysuperxlm1985
  • Nutz Dao 大量数据插入效率问题 byfjayblue
  • Issue 332 sqlserver2005 nutz Junit测试 byhaoyoushuai1986
  • Issue 416 建议nutz提供一个拼接复杂的查询条件的方法 byliuxiaogang1987
  • Sqls.create语句中包含'@'会出错。 bywangyingdong
  • Issue 426 Condition Cnd.where + orderBy bymuyushi85
  • MVC的代码覆盖率实在太低,很多都没测试用例! bywendal
  • Issue 437 SqlLiteral中的@过滤 byzhuyingxi
  • Json:增加字段映射方式 bywendal
  • Issue 458 ActionChainMakerConfiguration类名拼写错误 byjentrees2008
  • 使用MySQL数据库,使用Nutz.dao的自定义SQL报错 bymamacmm
  • Issue 469 Json.toJson 对char类型没有加引号 bylwk0571
  • Dao: 添加对Hsql数据库的支持 bywendal
  • Issue 473 使nutz兼容OSGi bywindywany
  • 1.b.38 的新 Dao 应该忽略 Column 不存在的情况 — by Jay byzozoh
  • Issue 479 38 update 问题 byfjayblue
  • 将Nutz打成jar, 2 个 Scans 的测试过不了 byzozoh
  • Issue 485 EL表达式引擎在某些情况下会出现错误 byywjno.dev
  • ioc中某个属性的值是Map时,如果是null偶尔报:String can not cast to java.util.Map bysuperhanliu
  • Issue 489 AnnotationIocLoader类对set方法处理 有bug byfeiyan
  • Issue 493 Lang的str2number方法在某些情况下会出错 byywjno.dev
  • 自定义SQL wiki bysuperhanliu
  • Issue 497 Nztz.Dao 注释没写全,和注释重写 byhongchongyuan
  • nutz.Json 应扩展一下@JsonField注解 byconanca

质量

共通过了 697 个单元测试用例,代码覆盖率达到 (按line计算)

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

文档

修改了很多文档 …

主要贡献者名单

贡献的种类:

  • 问题: 给项目的问题列表汇报一个上的问题,并且该问题被本次发布包括
  • 博客: 在本版本开发期间,写过关于 Nutz 的文章,并被 收录
  • 代码: 提交过至少一个修订
  • Demo: 为 NutzDemo 提交过代码
  • 文档: 提交过文档,在讨论区发帖或者通过文档上的留言指出现有文档存在的问题
  • 测试: 发布前,参与测试周发布人给出的任务
    如有遗漏,请提醒我们 ^_^

贡献列表,我已经写了一个小程序,根据 Issue 列表来自动统计…

另外,很多朋友都在:

欢迎访问,以获取 最新的快照版

本页面的文字允许在知识共享 署名-相同方式共享 3.0协议和下修改和再使用。