阅读更多
对于 Java 程序员来说,除 SSH 之外,可能还有另外一个选择 -- Nutz

当然,它是开源的,并且是完全免费的。

同传统的 SSH 相比,它具备如下特点:

  • -- 当前最新版,整个 jar 文件共 524k
  • -- 针对JDBC的薄封装,无缓存
  • -- 提供了 Dao (ORM, SQL 管理), Ioc, Mvc, Json解析 等必要功能
  • -- 各个部分可以独立使用,比如在 Spring 里采用 Nutz.DaoNutz.Ioc 里使用 Hibernate
  • -- 除了AOP部分依赖了 javassist,其它所有部分均不依赖第三方 jar 文件。就是说,如果一个 Web 应用,你在 WEB-INF/lib 下只需要放一个 nutz.jar 就够了,当然你要使用其它的连接池,打印PDF什么的,还需要自行添置 jar 包。


Nutz 的为谁而设计?
  • 如果你觉得 Hibernate 控制比较繁琐,iBatis 编写SQL又比较麻烦,那么 Nutz.Dao 专为你设计。
  • 如果你觉得在多个服务器部署或者修改Spring配置文件很麻烦,Nutz.Ioc 专为你设计
  • 如果你觉得直接写 XML 配置文件很麻烦,可视化编辑器又没控制感,Nutz.Mvc 专为你设计。
  • 如果你觉得 JSON 转换很麻烦(要写超过一行以上的代码),Nutz.Json 专为你设计
  • 如果你觉得 Java 语法不如 Ruby 便捷, Nutz.Castor 以及 Nutz.Lang 专为你设计
  • 如果你以前根本没接触过 SSH,只使用 JDBC 编程, 整个 Nutz 专门为你设计
  • 你只要在你的 classpath 下部署这个 500多K 的小 jar 包,你会得到上述所有好处



关于 1.a.15 版本
  • 1.a.15 是第15个 Alpha 版,其部分底层在这个版里被重写
  • 经过了 14 个版本的发布,这个版本已经比较稳定。
  • 这里是 Nutz 的jar包命名规则
  • 全部单元测试为 309 个,其中有106个用例是专门针对数据库的,在 Oracle/Psql/MySql 上全部通过
  • Nutz 还设计支持 DB2 以及 SQLServer ,但是本版发布时并未运行过测试
  • 对于更多的数据库,提供扩展点便于用户扩展


关于文档和路线图
  • 由于资源有限,Nutz 的源代码几乎没有注释,
  • 某些关键接口的 JDoc 注释稍后会被添加。
  • 函数内注释也很少,因为大部分函数很短,通过函数名和参数,基本能猜测出这个函数的意图。
  • 用户文档正在编写阶段,所有 Dao 部分的文档已经编写完毕,可以下载,项目成员正在排错
  • Ioc, Mvc, 的文档正在编写中 ...
  • Json 部分的文档,有一个简单的 PDF: http://nutz.googlecode.com/files/Nutz_Json_Book.pdf
  • 项目的 Wiki 页面也在整理中,国庆过后,1-2周内推出
  • 整个项目在年底有望发布 Beta 版。


关于交流


关于应用
  • 现在只有一个商业应用采用了这个框架。
  • 等超过 5 个商业应用采用了这个框架,我们会做一些总结,并制作一个 Wiki 页
  • 我们还在寻找这样的商业项目,并给于其免费的支持。

67
7
评论 共 83 条 请登录后发表评论
83 楼 away5678 2017-11-29 08:53
用了应该有4,5年了,简直是一发不可收拾,根本离不开,兽总威武
82 楼 wizzer 2017-11-16 21:46
8周年围观~~~
81 楼 springlys 2011-01-23 22:56
看了下API,方法说的不是很清楚,而且口语化,或许可以拿来学习
80 楼 zozoh 2009-12-29 15:09
canca 写道
白老鼠来了。

哈哈 
79 楼 canca 2009-12-23 17:10
白老鼠来了。
78 楼 fireflyc 2009-11-23 12:44
仔细阅读了一下源代码,单纯的几个技术观点:
1.数据库的封装。这里的封装我觉得太薄太脆弱。和hibernate比起来根本没有办法比,hibernate的HQL是一种语法分析的推导。而这里只有SQL,虽然简单但是意味着耦合。对sql的执行我看到SqlMaker这样写道
"INSERT INTO %s (%s,%s) VALUES(@%s,@%s)"
也就是说,所谓的封装是对字符串的一种封装。把SQL的各个部分进行拼装。这种做法我不觉得有什么地方好,反而不如直接写sql,不做任何封装的好。这里估计是想要模仿什么,同样的道理注解的加入也是想要模仿什么。或许模仿的那个不合适这里的设计哲学。作者的设计哲学应该是输入sql,输出对象(或map)。那么很显然,作者如果能忍痛割爱把那些违反这个哲学的“对某些东西的模仿”剔除掉,那么这个东西会更加简洁明确。(我只是推测作者的设计哲学,可能有偏差。呵呵。。莫气)

2.对controller的封装,我觉的也是想在模仿什么,头部的那些注解暗示着返回的状态和输入的url都是由配置决定的,或者说是写死在代码里面的(我的哲学是,注解=代码而非配置)。我不知道这些注解和直接写死在代码里面有什么区别。两者都需要重新比编译。我还没有找到数据绑定相关的内容,难道直接使用request?这个我喜欢,但是问题是应该有一些工具类给我方便把request绑定到对象上才行。否则如果属性多无聊的代码也就多了。

3.代码整体结构有点out了。试举两例:
在日志的org.nutz.log.file.FileWriterPool中,26行getWriter方法,作者把打开的Writer放到一个HashMap里面,然后在getWriter的时候为了保证线程安全有如下代码段
		Writer w = writers.get(file.getAbsolutePath());
		if (null == w)
			synchronized (this) {
				w = writers.get(file.getAbsolutePath());
				if (null == w) {
					try {
						w = new BufferedWriter(new FileWriter(file, true));
						writers.put(file.getAbsolutePath(), w);
					} catch (IOException e) {
						throw Lang.wrapThrow(e);
					}
				}
			}
		return w;

synchronized这个锁,太大了,java早已经在jdk5的时候重写了所有的并发相关的内容,引入了Lock类。
再看这里是否有必要自己来加锁?打开java.lang.concurrent包,引入眼帘的是ConcurrentHashMap类。应该猜到是干什么了的吧?

4.作者太偏执,作者的偏执体现在不引用任何除jdk以外的第三方包,也许是对混乱的jar愤怒到了极点。但是这种做法意味着你将与开源世界完全脱离,你重新制作一切,不利用社区的任何帮助。这是一种浪费,我觉得和开源哲学背离(个人观点中的开源哲学)

5.整个框架的封装说不上好用,有些东西明明是两样背离的东西却被试图封装在一起。与其破坏一个东西,不如去修改一个东西。我们的框架被我偷梁换柱替换几乎把struts1架空了,把hibernate限制的几乎只有HQL了,甚至把事务变成了手工的,把spring和guice都做了一层封装,但是我没有再去考虑自己重写这一切,因为我曾经这样尝试过,最后发现远不如修改来的直接和巧妙。至少它还是struts、hiberate、spring之类的。
77 楼 ayaga 2009-10-13 14:57
再次鼓励LZ,赶快完善后面的文档,偶等你的米下锅呢。
76 楼 longer042 2009-09-30 12:51
pearson 写道
我更关心的是MVC “控制器” ,“视图” 表现。有没有比struts ,webwork.精巧,简单。

我支持你这句话。。。我也是觉得ssh2太臃肿了。。。
75 楼 zozoh 2009-09-29 16:23
strongkill 写道
用了一下,不好用.

如果你多写一句,为什么不好用,是因为 ...
我会感激你
74 楼 strongkill 2009-09-27 18:27
用了一下,不好用.
73 楼 fnet 2009-09-26 16:15
支持楼主,支持作者。

我以前搞PHP,现在搞JAVA、SSH2,虽然大量使用Annotation,和Nutz相比,还是过于臃肿。

公司之前的SSI开发的项目更是生涩难懂,复杂麻烦。

作者把敏捷作为发展方向让我们看到了曙光。
72 楼 mx285545974 2009-09-26 11:45
前天才在JE上看到这个框架 感觉很好  所以建了个Q群 希望能和大家一起讨论75818186 
71 楼 panlw 2009-09-25 23:53
不错,值得学习!
70 楼 hzzdong 2009-09-25 19:30
今天下了下源码,看了castor和json部分,确实非常不错,值得学习。支持!
69 楼 wkbulletin 2009-09-25 11:41
支持, 很早就开始关注这个框架了.

项目源码值得大家学习.
68 楼 zozoh 2009-09-25 10:32
j2eelee 写道
看了下JSON文档,居然没有对List的转换

List<ABC> abc = XXXX;
String s = Json.toJson(abc);
ABC[] abc2 = Json.fromJson(ABC[].class,s);
67 楼 j2eelee 2009-09-25 09:37
看了下JSON文档,居然没有对List的转换
66 楼 qbq 2009-09-25 09:20
好是很好
只不过我还是不习惯json
65 楼 xly_971223 2009-09-25 09:19
支持一下 希望能够长久做下去
64 楼 hubo888168 2009-09-25 09:19
看到这么名字..总让我联想到纳粹..

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • JBuilder编程实例(源代码)

    提供JBuilder源码,里面有很多系统实例。

  • Java JBuilder应用开发实例集.rar

    Java JBuilder应用开发实例集,用JBuilder开发Java应用程序的新手朋友,如果对JBuilder下的JAva布局不熟悉,可以通过这些简单的实例做些了解,现在JBuilder大多情况下都用于移动平台的应用开发了,多学无害处。

  • JBuilder程序设计实例教程-源代码(上)

    java swing非常实用的例子,适合初学者研究

  • JBuilder程序设计实例教程-源代码(下)

    JBuilder程序设计实例教程-源代码(下)

  • 图解Java开发工具JBuilder 9.0(三)

    三)对象浏览器  在用户界面设计器上任选一个控件,则在右下方就会出现对象浏览器。对象浏览器在程序开发中具有非常重要的作用,是用户进行可视化编程的基础。对象浏览器的主要作用是向用户提供对象的声明段中的属性(Properties)的访问,如读取和修改。同时,对象浏览器还提供了对象的事件(Events)的设置,在这些设置中往往可以完成在面向对象技术中需要很多工作才能完成的任务,甚至这些改变属性和事件的工

  • 利用JBuilder开发调试Servlet(一)

    利用JBuilder开发调试Servlet(一)黄微、陆伯鹰  Borland JBuilder 2.0(以下简称JBuilder)是Java开发工具中的佼佼者,它提供了Servlet Wizard帮助用户进行Servlet的开发与调试。下面介绍利用JBuilder 2.0进行Servlet开发调试的步骤。  1.安装JSDK,建立Servlet开发环境  利用JBuilder开发调试Se

  • 用Eclipse调试Java程序

    这篇文章主要介绍如何用Eclipse来调试一个Java程序,用一个例子来说明具体的过程。 1.何为断点 所谓断点是调试器设置源程序在执行过程中自动进入中断模试的一个标记,当程序运行到断点时,程序中断执行,进入调试状态。程序运行到断点所在代码行时就会断开挂起,该行代码还没有运行,接下来进行手动调试。 2.调试过程 下面通过一个简单的java application 来说明调试的过程。该程序是一个用于...

  • JBuilder 单步调试J2ME心得

    单步调试是一种挑战,有些很隐蔽的错误,只要你认真去调试,是可以重现出来,并可以解决了。以前我调试一般都不用debug,而是3GEYE"BgvN4Ll{F打印(print)出来,这样的做法很吃力,要比拼经验,一些问题也只是猜想,很多内在的东西是想不到的,所以靠print的方法是不行3GEYE#@9^e:Q&kS"EH/~"[的。不过到了新公司,公司很是重视调试,所以也慢慢的改掉以前

  • JBuilder开发Spring实例

    1.        下载spring包,网址如下http://www.springframework.org/download.html解压后的目录中包含了dist、lib等子目录 2.        在JBuilder2005中增加spring库,选择菜单Tools-Configure-Libraries,在弹出的对话框中点击New按钮,输入spring库的名称:spring,点

  • jbuilder——D版之痛

         一直以来都是Borland的忠实粉丝,当然也只能以D版来表现我的敬畏。可是久而久之,对于JBuilder实在不敢恭维,从早期JBuilderX版本就出现的“吃代码事件”,到JBuilder2006的破解不完整所带来的烦恼,一切的一切,我都在容忍之中。虽然,很多人对我说过,算了吧,哥们,用Eclipse吧,别坚持了。但是心中总有一份不舍。甚至同事告诉我一个更BT的事件后,我也一直坚持拥护B

  • 详细介绍用JBuilder9开发的Struts实例

    本文将给大家介绍在JBuilder 9 集成开发环境下,如何运用Struts Framework来开发Web 应用程序,我们这里所说的JBuilder9是指JBuilder 9 Developer 与 Enterprise两个版本。    一、JBuilder 对于 Struts 之支持    JBuilder 提供图形使用者接口以简化组件文件 struts-config.xml 之编辑与设定,此

  • JBuilder高级开发篇.JBuilder.X.2005

    JBuilder高级开发篇.JBuilder.X.2005:

  • Jbuilder2006的JSP调试功能

    今天很高兴摸索到Jbuilder2006的JSP调试功能。很简单:1.在Jbuilder的Library里新建一Lib2.把Work目录下的网站目录包含到Lib里的Class标签里,以及Source标签里。3.调试时,用Ctrl + - 把查类的窗口打开,从Brower标签里把要调试的Jsp页面对应的Java文件打开。4.在里面设断点。调试时,Jbuilder会把Jsp页面打开

  • JavaScript电子表

       在这个例子中将用JAVASCRIPT实现一个电子表。它是动态的。窍门在于时间对象的构造和setTimeout、clearTimeout方法的调用。以下是实现动态显示电子表的程序清单,你可以将其拷贝到记事本,另存为*.html查看。在这么长的程序里,最关键的东西就是setTimeout("time()",1000),它每隔1秒(等于1000毫秒)调用一次time函数,time函数控制显示文本.

Global site tag (gtag.js) - Google Analytics