codecamp

1.b.38 发行注记

1.b.38 发行注记

自 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 的官网,我们会不断的充实它的内容,比如最近做的

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

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

Nutz 小白测试计划

我们希望这个计划,能让更多人方便的参与测试,提交测试结果,这样我们就能为更多的人提供更稳定的 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 之后,这个包没了。因为我们不再需要它了。你的建表 可以用:

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

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

dao.drop(Pet.class);

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

EL 兼容性问题

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

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

并且EL的预编译,不再是

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

而是

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

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

问题修复

  • 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 个单元测试用例,代码覆盖率达到 (按line计算)

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

文档

修改了很多文档 ...

主要贡献者名单

贡献的种类:

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

如有遗漏,请提醒我们 ^_^

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

贡献者问题博客支持代码示例文档测试
Toni.xutaoO------
caji.netO------
conancaO------
feiyanO------
fjayblueO------
haoyoushuai1986O------
hongchongyuanO------
hzzdongO------
jentrees2008O------
jinghui70O------
juqkaiO-OO-OO
liuxiaogang1987O------
lwk0571O------
mamacmmOO----O
ming300O------
muyushi85O------
shao0707O------
shine----O--
superhanliuO------
superxlm1985O------
wangyingdongO------
wendalOOOOOOO
windywanyO------
ywjno.devO------
zhuyingxiO------
zozohO-OOOOO
Jay 蓝色幽默O--O--O

另外,很多朋友都在:

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

欢迎访问官网,以获取 最新的快照版 和 用户手册

1.b.39 发行注记
1.b.37 发行注记
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

表达式引擎

maplist结构

图像处理小军刀

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }