当前位置: 网学 > 编程文档 > JAVA > 正文

Hibernate 的原理与配置

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/08/04
库某个表的同一个记录。在这里我们选择了长整型作为我们的id值,但这不是必需的。Hibernate允许我们使用任意的类型来作为对象的id值,在后面我们会对此作详细描述。    你可能注意到Message类的代码类似于JavaBean的代码风格,并且它有一个没有参数的构造函数,在我们以后的代码中我将继续使用这种风格来编写持久类的代码。    Hibernate会自动管理Message类的实例,并通过内部机制使其持久化,但实际上Message对象并没有实现任何关于Hibernate的类或接口,因此我们也可以将它作为一个普通的Java类来使用:    Message message = new Message("Hello World");   System.out.println( message.getText() );    以上这段代码正是我们所期望的结果:它打印“hello world”到屏幕上。但这并不是我们的最终目标;实际上Hibernate与诸如EJB容器这样的环境在持久层实现的方式上有很大的不同。我们的持久类(Message类)可以用在与容器无关的环境中,不像EJB必须要有EJB容器才能执行。为了能更清楚地表现这点,以下代码将我们的一个新消息保存到数据库中去:    Session session = getSessionFactory().openSession();   Transaction tx = session.beginTransaction();   Message message = new Message("Hello World");   session.save(message);   tx.commit();   session.close();    以上这段代码调用了Hibernate的Session和Transaction接口(关于getSessionFactory()方法我们将会马上提到)。它相当于我们执行了以下SQL语句:    insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)   values (1, 'Hello World', null)    在以上的SQL语句中,MESSAGE_ID字段到底被初始化成了什么值呢?由于我们并没有在先前的代码中为message对象的id属性赋与初始值,那它是否为null呢?实际上Hibernate对id属性作了特殊处理:由于它是一个对象的唯一标识,因此当我们进行save()调用时,Hibernate会为它自动赋予一个唯一的值(我们将在后面内容中讲述它是如何生成这个值的)。    我们假设你已经在数据库中创建了一个名为MESSAGE的表,那么既然前面这段代码让我们将Message对象存入了数据库中,那么现在我们就要将它们一一取出来。下面这段代码将按照字母顺序,将数据库中的所有Message对象取出来,并将它们的消息正文打印到屏幕上:    Session newSession = getSessionFactory().openSession();   Transaction newTransaction = newSession.beginTransaction();   List messages =newSession.find("from Message as m order by m.text asc");   System.out.println( messages.size() + " message(s) found:" );   for ( Iterator iter = messages.iterator(); iter.hasNext(); ) {   Message message = (Message) iter.next();   System.out.println( message.getText() );   }   newTransaction.commit();   newSession.close();    在以上这段代码中,你可能被find()方法的这个参数困扰着:"from Message as m order by m.text asc",其实它是Hibernate自己定义的查询语言,全称叫Hibernate Query Language(HQL)。通俗地讲HQL与SQL的关系差不多就是方言与普通话之间的关系,咋一看,你会觉得它有点类似于SQL语句。其实在find()调用时,Hibernate会将这段HQL语言翻译成如下的SQL语句: &

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号