superwei

导航

<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

统计

常用链接

留言簿(4)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

十分钟在jb(JBuilder)里面运行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

代码如下

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

<?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>

然后就是测试类

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设计思想等着你自己发掘。

多看看它自己的文档,可以学到很多东西,它的文档真的非常好。

posted on 2005-10-31 11:27 小辞猬 阅读(328) 评论(0)  编辑  收藏 所属分类: JAVA


只有注册用户登录后才能发表评论。


网站导航: