您的位置:首页 > 数据库

十分钟在JB里运行的简单的例子

2010-10-17 14:03 375 查看
一个好的文章,特地偷来。原地址:http://www.javaeye.com/topic/834

终于有点对hibernate入门的感觉。方便门外的学习者,给一个简单的入门例子。
如果你有用过其他持久架构 转到hibernate其实很简单。一些原理方面就不讲了,
robbin讲的肯定比我好的多,自己去精华版看看。
我所给的只是我当初刚开始接触hibernate时候很想要的一个简单例子和设置方法。
一直没有找到,所以现在放到这里给大家看看,(只给想要入门的一个直观的感应,呵呵)

首先当然要新建一个项目

然后在Project Properties->Paths->Required Libraries->add->new 这里定义hibernate的类库 把hibernate的lib下面的所有jar包进去 当然还有hibernate2.jar也要
然后一路ok下去就可以了。

再来就是hibernate.properties
从hibernate的src下面找到
把它拷到你项目的src目录下
(什么,你的项目没有src目录,新建一个随便的类就有src目录了)

这样一个JB下面的hibernate的开发环境就好了

然后在hibernate.properties里面设置你的数据库连接
默认是HypersonicSQL

嗯 接下来的是你最想要做的事情了 其实很简单
新建一个类Message.java
代码如下

Java代码
package hello;

import java.io.Serializable;

/**
* @author getdown
* @version 1.0
*/

public class Message implements Serializable {
private Long id;
private String text;
//定义一个简单链表 指向另外的一个Message
private Message nextMessage;
public Message(); {}

public Message(Long id); {
this.id = id;
}

public Message(String text); {
this.text = text;
}

public Message(Long id, String text); {
this.id = id;
this.text = text;
}

public Long getId(); {
return id;
}

private void setId(Long id); {
this.id = id;
}

public String getText(); {
return text;
}

public void setText(String text); {
this.text = text;
}

public Message getNextMessage(); {
return nextMessage;
}

public void setNextMessage(Message nextMessage); {
this.nextMessage = nextMessage;
}

}

package hello;

import java.io.Serializable;

/**
* @author getdown
* @version 1.0
*/

public class Message implements Serializable {
private Long id;
private String text;
//定义一个简单链表 指向另外的一个Message
private Message nextMessage;
public Message(); {}

public Message(Long id); {
this.id = id;
}

public Message(String text); {
this.text = text;
}

public Message(Long id, String text); {
this.id = id;
this.text = text;
}

public Long getId(); {
return id;
}

private void setId(Long id); {
this.id = id;
}

public String getText(); {
return text;
}

public void setText(String text); {
this.text = text;
}

public Message getNextMessage(); {
return nextMessage;
}

public void setNextMessage(Message nextMessage); {
this.nextMessage = nextMessage;
}

}
接下来是这个类对应的hibernate的配置文件 Message.hbm.xml

Java代码
<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<!--定义类和表的对应-->
<class
name="hello.Message"
table="Messages"
>
<!--定义ID字段和生成ID的策略 这里采用identity-->
<id  name="id"
column="MESSAGE_ID"
>
<generator class="identity"/>
</id>
<!--定义里面的text字段-->
<property
name="text"
type="string">
<!--定义text字段在数据库里面生成的方法-->
<column
name="TEXT"
length="100"
not-null="true"
/>
</property>
<!--定义对象关联之间的对应关系和关联的字段-->
<many-to-one
name="nextMessage"
cascade="all"
column="NEXT_MESSAGE_ID"
/>
</class>
</hibernate-mapping>

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<!--定义类和表的对应-->
<class
name="hello.Message"
table="Messages"
>
<!--定义ID字段和生成ID的策略 这里采用identity-->
<id	name="id"
column="MESSAGE_ID"
>
<generator class="identity"/>
</id>
<!--定义里面的text字段-->
<property
name="text"
type="string">
<!--定义text字段在数据库里面生成的方法-->
<column
name="TEXT"
length="100"
not-null="true"
/>
</property>
<!--定义对象关联之间的对应关系和关联的字段-->
<many-to-one
name="nextMessage"
cascade="all"
column="NEXT_MESSAGE_ID"
/>
</class>
</hibernate-mapping>
然后就是测试类

Java代码
package hello;

import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
import net.sf.hibernate.Session;
import net.sf.hibernate.Query;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.type.LongType;
import net.sf.hibernate.Transaction;

/**
* @author getdown
* @version 1.0
*/

public class Hello {
public Hello(); {
}

public static void main(String[] args); throws Exception {
Configuration cfg = new Configuration();.addClass(Message.class);;

/** 顾名思义 构建表。。。第一次运行的时候运行下面语句可以在数据库生成表
* 之后可以把下面这句去掉
* */
//    new SchemaExport(cfg);.create(true, true);;

//先生成sessionFactory
SessionFactory sessions = cfg.buildSessionFactory();;
//再从sessionFactory得到一个session
Session session = sessions.openSession();;
//启动事务
Transaction tx = session.beginTransaction();;

//开始对数据库的操作
/*----对数据库的创建操作--------*/
Message message = new Message("helloWorld");;
//创建一条记录

session.save(message);;
//存入记录
session.flush();;
//提交事务
tx.commit();;

/*---对数据库的查询操作---------------*/
//    Message message = new Message();;
//    Query q = session.createQuery("from Message as message where message.id=1");;
//    message = (Message); q.list();.get(0);;
//    message.getNextMessage();.setText("helloNext");;
//    session.flush();;
//    session.close();;
//    Long id = new Long(1);;
//    Message message = (Message); session.find("from Message as message where message.id=?", id, Hibernate.LONG);.get(0);;
//    System.out.println(message.getText(););;

//    /*-------事务的处理----------------*/
//    try {
//      Message message = new Message("hello");;
//      session.save(message);;
//      session.flush();;
//      message = new Message("hello");;
//      session.save(message);;
//      session.flush();;
//      tx.commit();;
//    }
//    catch (HibernateException ex); {
//      tx.rollback();;
//    }

/*-------添加1000条记录时间--------------*/
//    long start = System.currentTimeMillis();;
//    for(int i = 0; i < 1000; i ++); {
//      Message message = new Message("hello");;
//      session.save(message);;
//      session.flush();;
//    }
//    tx.commit();;
//    long end = System.currentTimeMillis();;
//    System.out.println("添加1000条记录时间---" + (end-start);/1000 + "s");;

session.close();;

}

}

package hello;

import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
import net.sf.hibernate.Session;
import net.sf.hibernate.Query;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.type.LongType;
import net.sf.hibernate.Transaction;

/**
* @author getdown
* @version 1.0
*/

public class Hello {
public Hello(); {
}

public static void main(String[] args); throws Exception {
Configuration cfg = new Configuration();.addClass(Message.class);;

/** 顾名思义 构建表。。。第一次运行的时候运行下面语句可以在数据库生成表
* 之后可以把下面这句去掉
* */
//    new SchemaExport(cfg);.create(true, true);;

//先生成sessionFactory
SessionFactory sessions = cfg.buildSessionFactory();;
//再从sessionFactory得到一个session
Session session = sessions.openSession();;
//启动事务
Transaction tx = session.beginTransaction();;

//开始对数据库的操作
/*----对数据库的创建操作--------*/
Message message = new Message("helloWorld");;
//创建一条记录

session.save(message);;
//存入记录
session.flush();;
//提交事务
tx.commit();;

/*---对数据库的查询操作---------------*/
//    Message message = new Message();;
//    Query q = session.createQuery("from Message as message where message.id=1");;
//    message = (Message); q.list();.get(0);;
//    message.getNextMessage();.setText("helloNext");;
//    session.flush();;
//    session.close();;
//    Long id = new Long(1);;
//    Message message = (Message); session.find("from Message as message where message.id=?", id, Hibernate.LONG);.get(0);;
//    System.out.println(message.getText(););;

//    /*-------事务的处理----------------*/
//    try {
//      Message message = new Message("hello");;
//      session.save(message);;
//      session.flush();;
//      message = new Message("hello");;
//      session.save(message);;
//      session.flush();;
//      tx.commit();;
//    }
//    catch (HibernateException ex); {
//      tx.rollback();;
//    }

/*-------添加1000条记录时间--------------*/
//    long start = System.currentTimeMillis();;
//    for(int i = 0; i < 1000; i ++); {
//      Message message = new Message("hello");;
//      session.save(message);;
//      session.flush();;
//    }
//    tx.commit();;
//    long end = System.currentTimeMillis();;
//    System.out.println("添加1000条记录时间---" + (end-start);/1000 + "s");;

session.close();;

}

}
ok了  运行一下Hello看看出来什么吧
怎么样 比起CMP的持久 hibernate的持久是不是显得很轻量级。。
还可以试试看hibernate的性能 把Hello.java的最后一段注释去掉运行看看

当然hibernate最重要的还是它的原理,还有很多很好的,很有趣的功能和O/RM设计思想等着你自己发掘。
多看看它自己的文档,可以学到很多东西,它的文档真的非常好。

呵呵 我是刚刚接触hibernate不久 和所有hibernate的学习者共同学习
msn : java_xml@msn.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息