阅读:9004次   评论:30条   更新时间:2011-05-26    
Nutz 的使用非常简单,针对 Nutz.Dao, Nutz.Ioc, Nutz.Mvc 在本专栏里会有更详细的介绍,这里就其最重要的一个功能(Nutz.Dao)做一下说明:

1. 首先,你必须安装 JDK1.5 或者以上版本。 如果你直接使用编译好的 jar 包,请保证你的 JDK是1.6 的,因为 Nutz 的jar包是在  1.6.0_11 上编译的。 JDK1.5 的需要重新从源码编译。 好在 Nutz 的源码不依赖任何第三方jar 文件,你拿下来就能编译。

2. 其次,为了运行 Nutz.Dao ,你必须要有一个数据库软件。 Mysql,Postgresql, SQLServer, Oracle, DB2 都可以,如果是其他的数据库,在大数据量分页查询的时候,为了效率可能你需要实现一个 Pager, 关于如何建立 Pager,在 Nutz.Dao 分类中会有详细说明。

3. 建立一个普通的 Java 项目,随便你用什么 IDE,或者你不爱用 IDE 也可以,但是你要将数据库的 JDBC Driver 和你喜欢的连接池加入项目的 classpath

4. 在数据库里建立一张你自己的数据表, 这里我们用 t_person 来举例:

CREATE TABLE t_person (
  id  SERIAL PRIMARY KEY,
  name  VARCHAR(50) NOT NULL UNIQUE,
  age INT
);


5. 在 Java 项目中建立一个POJO,比如 com.zzh.demo.Person :

import com.zzh.dao.entity.annotation.*;

@Table("t_person")   // 声明了Person对象的数据表
public class Person {

	@Column	  // 表示该对象属性可以映射到数据库里作为一个字段
	@Id       // 表示该字段为一个自增长的Id
	private int id;
	
	@Column
	@Name    // 表示该字段可以用来标识此对象,或者是字符型主键,或者是唯一性约束
	private String name;

	@Column
	private int age;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
	
}


6. 随便建立一个有 main 函数的类,在 main 函数里这么写:

Dao dao = new NutDao(dataSource);
Person p = new Person();
p.setName("ABC");
p.setAge(20);
dao.insert(p);


请注意, dataSource 变量应该是你预先设置好的,只要是一个 javax.sql.DataSource 对象就成。像比较常用的连接池都提供了 DataSource 的实现,你可以随便选一个你喜欢的连接池
上面这段代码会想数据库里插入一条记录,至于如何获取,如何删除,如何查询, 你可以通过 IDE 的自动提示工具看一看。不用 IDE 的朋友,可以看看 com.zzh.dao.Dao 接口的源代码,接口函数很容易理解。 更详细的使用说明会在专栏的 Nutz.Dao 分类里给出。不过,这个例子足够作为 Hello World 了, 祝你玩的开心 



评论 共 30 条 请登录后发表评论
30 楼 zozoh 2009-09-28 09:30
strongkill 写道
Oracle还不支持吧.
@Id(next={"select SEQ_person.nextval from sys.dual;"})
总提法出错.但单步跟踪发现执行select SEQ_person.nextval from sys.dual;也出错.

仲有,通过单步执行,发现做一次插入操作,会先把数据插入,再去生成ID,再Update.这样就存在 一个问题,当设置了约束时,就会出错.


你的 SQL 以 分号结尾, Oracle 的 JDBC 不接受。
你直接用 JDBC 做的话,也会是这样的。
把分号去掉即可
29 楼 strongkill 2009-09-28 08:23
Oracle还不支持吧.
@Id(next={"select SEQ_person.nextval from sys.dual;"})
总提法出错.但单步跟踪发现执行select SEQ_person.nextval from sys.dual;也出错.

仲有,通过单步执行,发现做一次插入操作,会先把数据插入,再去生成ID,再Update.这样就存在 一个问题,当设置了约束时,就会出错.
28 楼 zozoh 2009-09-24 14:11
herowzz 写道
可以由模型直接生成数据库表吗?


nutzmole 项目,会根据POJO生成建表语句
但是没有文档
27 楼 herowzz 2009-09-24 13:50
可以由模型直接生成数据库表吗?
26 楼 amosleaf 2009-06-24 10:35
zozoh 写道
switch200500 写道

发现一个问题程序不能放到中文名字的目录下面,否则就会报如下错误:
F:\宸ヤ綔\Java\nutz\WebRoot\WEB-INF\lib\nutz-1[1].a.11.jar (系统找不到指定的路径。)

当把程序放到英文名字目录下面就没问题!

应该是 Eclipse Java 虚拟机的问题。 如果中文路径没问题,将 nutz-1.a.11.jar 改名成 nutz.jar 看看有没有问题。


应该是jvm的编码和你IDE编码不一致造成的,如果你用的是Eclipse,修改下面两项:
(1)preferences-->Workspace,修改file encoding为UTF-8,点击apply.
(2)preferences-->Content Types,修改java source file编码为UTF-8,点击Update.
我碰到过,就这么解决的,good luck.
25 楼 zozoh 2009-06-11 13:02
gaojh 写道

试过针对oracle数据库进行插入操作吗?我看过源码select max(id)还带着分号,根本新增不了。

Oracle 的确有很大的问题,我还没跑测试。
不过你可以暂时用 @Id(next={"一段自己的获取最大值的SQL"})
来顶个先
24 楼 gaojh 2009-06-11 12:50
试过针对oracle数据库进行插入操作吗?我看过源码select max(id)还带着分号,根本新增不了。
23 楼 zozoh 2009-06-03 11:03
switch200500 写道

mvc使用方法出了吗?还有IOC呢?


还在弄, 请看  如何随时获取 Nutz 的进度 一文
22 楼 switch200500 2009-06-03 10:32
mvc使用方法出了吗?还有IOC呢?
21 楼 zozoh 2009-06-02 00:21
sense97 写道

我下载了nutz-source-1.a.12.jar,在eclipse 3.1+jdk1.5.08的环境下编译不了,在有@Override标注的地方(主要是接口的实现)都提示编译错误:必须覆盖超类的方法,如ExecutableSql.java:


因为 JDK1.5 @Override 必需覆盖父类的方法。 JDK1.6 如果继承自一个接口也可以声明 @Override。 建议你用 JDK1.6 来编译。

我编译 Nutz 依赖一个 JDK1.6 的实现以及 Tomcat1.6 关于 Servelet 的实现。
20 楼 zozoh 2009-06-02 00:00
hyc8761 写道

proxool怎么获取DataSource 对象?能不能给个例子?找了一大堆资料,要配置JNDI?谢谢。

见: org.logicalcobwebs.proxool.ProxoolDataSource
19 楼 zozoh 2009-06-01 23:59
hyc8761 写道

proxool怎么获取DataSource 对象?能不能给个例子?找了一大堆资料,要配置JNDI?谢谢。


ProxoolDataSource ds = new ProxoolDataSource();
ds.setDriver("org.postgresql.Driver");
ds.setDriverUrl("jdbc:postgresql://localhost:5432/zzhtest");
ds.setUser("admin");
ds.setPassword("admin");
Connection conn = ds.getConnection();
Statement stat = conn.createStatement();
stat.execute("INSERT INTO trans_cat (name,masterid) VALUES('abc',1)");
ResultSet rs = stat.executeQuery("SELECT * FROM trans_cat");
rs.next();
System.out.println(rs.getString("name"));
rs.close();
stat.close();
conn.close();
18 楼 sense97 2009-06-01 18:16
我下载了nutz-source-1.a.12.jar,在eclipse 3.1+jdk1.5.08的环境下编译不了,在有@Override标注的地方(主要是接口的实现)都提示编译错误:必须覆盖超类的方法,如ExecutableSql.java:

	@Override
	public Object execute(Connection conn) throws Exception {
		PreparedStatement stat = null;
		try {
			stat = conn.prepareStatement(this.getPreparedStatementString());
			super.setupStatement(stat);
			stat.execute();
...
17 楼 hyc8761 2009-05-31 17:11
proxool怎么获取DataSource 对象?能不能给个例子?找了一大堆资料,要配置JNDI?谢谢。
16 楼 zozoh 2009-05-27 08:57
Caspar 写道

源码
com.zzh.mvc.NutServlet
com.zzh.mvc.access.Session
中找不到
com.zzh.Const

在下个版本 (1.a.13) 里,我会放到包里,是 build 文件漏了
15 楼 zozoh 2009-05-27 08:55
switch200500 写道

什么时候发布下个版本,还有mvc什么时候出来?正想把nutz和struts2.0整合起来用,我的第一个nutz程序:自己写了个连接数据库的Resource.java
地址如下:http://www.bsay.net/read.php?tid=3364


端午过后的一个礼拜吧,这个版本主要针对 Http 作了修改。 你现在用 nutz.1.a.12.jar 里就带了 ioc 和 mvc
因为我还没有出文档,所以大家不知道怎么用。我争取在 1.a.13 的时候,出一点 mvc 和 ioc 的例子  
14 楼 switch200500 2009-05-26 21:30
zozoh 写道

zozoh 写道
呵呵,是我的 build 文件漏了,谢谢,下个版本,我会放在源码包里

什么时候发布下个版本,还有mvc什么时候出来?正想把nutz和struts2.0整合起来用,我的第一个nutz程序:自己写了个连接数据库的Resource.java
地址如下:http://www.bsay.net/read.php?tid=3364
13 楼 Caspar 2009-05-26 16:57
源码
com.zzh.mvc.NutServlet
com.zzh.mvc.access.Session
中找不到
com.zzh.Const
12 楼 Caspar 2009-05-26 16:46
import com.zzh.Const;

nutz-source-1.a.12 中没这东西呢~
11 楼 amosleaf 2009-05-24 15:04
switch200500 写道

Dao dao = new NutDao(dataSource);
希望你写个链接sql server2005的datasource,我们参考一下,谢谢!



(1)下载数据库驱动
http://download.microsoft.com/download/C/D/3/CD301BF5-E28F-45EA-A1DA-53F2EB448D78/sqljdbc_1.2.2828.100_enu.exe
(2)下载c3p0的jar包。(如果你有兴趣,你可以自己写一个类 实现 javax.sql.DataSource接口,这里我用c3p0数据源)
http://sourceforge.net/project/showfiles.php?group_id=25357
(3)
ComboPooledDataSource cpds=new ComboPooledDataSource(); cpds.setDriverClass("com.microsoft.sqlserver.jdbc.SQLServerDriver"); cpds.setJdbcUrl("jdbc:microsoft:sqlserver://${ip}:${port};DatabaseName=${dbName}");
cpds.setUser("${userName}");
cpds.setPassword("${password}");

这个cpds就是一个datasource了。
10 楼 zozoh 2009-05-22 21:24
switch200500 写道

发现一个问题程序不能放到中文名字的目录下面,否则就会报如下错误:
F:\宸ヤ綔\Java\nutz\WebRoot\WEB-INF\lib\nutz-1[1].a.11.jar (系统找不到指定的路径。)

当把程序放到英文名字目录下面就没问题!

应该是 Eclipse Java 虚拟机的问题。 如果中文路径没问题,将 nutz-1.a.11.jar 改名成 nutz.jar 看看有没有问题。
9 楼 switch200500 2009-05-22 17:17
发现一个问题程序不能放到中文名字的目录下面,否则就会报如下错误:
F:\宸ヤ綔\Java\nutz\WebRoot\WEB-INF\lib\nutz-1[1].a.11.jar (系统找不到指定的路径。)

当把程序放到英文名字目录下面就没问题!
8 楼 switch200500 2009-05-22 17:13
我在eclipse上成功运行上面的例子!
7 楼 switch200500 2009-05-22 16:38
Dao dao = new NutDao(dataSource);
希望你写个链接sql server2005的datasource,我们参考一下,谢谢!
6 楼 WWQQ 2009-05-22 10:32
嗯  是蛮简洁的
5 楼 zozoh 2009-05-22 01:06
Dao dao = new NutDao(dataSource);

就一行啊,还咋简洁啊?

如何建立DataSource, 这个是数据库连接池的事,我以前由于兴趣的问题,写过一个连接池。但是现在有的连接池(如 c3p0 等) 我也没什么办法做得比他们还要好了,输入 Driver, Url, username, password,怎么我看都是少不了滴~~~
4 楼 switch200500 2009-05-21 22:44
如果能让数据库连接更加简单,那么入门就更简单了!
3 楼 zozoh 2009-05-08 15:26
新版本 a.1.10 修复了这个 Oracle 的问题

请从此处下载: http://code.google.com/p/nutz/
2 楼 zozoh 2009-05-07 08:57
你用的什么数据库 ? 看看你的数据表是否建立正确。
插入是个基本操作,不太可能有问题。 如果不行,你可以把你的代码发给我看
1 楼 gaojh 2009-05-06 18:59
我试了下,怎么总报:Exception in thread "main" com.zzh.dao.DaoException: java.sql.SQLException: ORA-00911: 无效字符

发表评论

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

文章信息

  • zozoh在2009-04-22创建
  • zozoh在2011-05-26更新
Global site tag (gtag.js) - Google Analytics