学习Hibernate in Action读书笔记(1)

原创 2004年12月31日 10:51:00
 

让我们还是以这个经久不衰的例子"Hello World"开始:)

<?xml:namespace prefix = o />

 

1.      Message.java: 一个简单的持久类

package hello;

 

public class Message {

private Long id;   //说明

private String text;

 private Message nextMessage;

 private Message() {}

 

public Message(String text) {

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;

}

}

 

 

 

说明: ID标识符 (identifier) ,它允许应用去访问数据库以一个唯一的标识,这个标识也就是持久类的主键值。如果一个Message对象有两个实例,它们拥有同一个标识,那么代表他们访问的是数据库的同一个数据。在这里我们选择了Long做这个标识的数据类型,但是这不是必须的。因为Hibernate允许这个identifier为任何的数据类型。

 

 

2.         保存数据信息到数据库:

 

Session session = getSessionFactory().openSession();

Transaction tx = session.beginTransaction();

Message message = new Message("Hello World");

session.save(message);

tx.commit();

session.close();

 

在这段代码中,我们引用了HibernateSessionTransaction接口。这段代码的执行,就好像我们做了下面这段SQL所做的事:

insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)

values (1, 'Hello World', null)

 

注:这个例子中,我们假设数据中已经存在MESSAGES这张表了。

 

3.         从数据库中读出信息并打印它们

 

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();

 

这段代码中,大家看到了“from Message as m order by m.text asc”,这是Hibernate自带的面向对象查询语言Hibernate Query Language (HQL).那么翻译一下这句话,就是下面这个SQL了:

select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID

from MESSAGES m

order by m.MESSAGE_TEXT asc

 

输出结果:

1 message(s) found:

Hello World

 

 

4.         简单的XML映射文件

 

"-//Hibernate/Hibernate Mapping DTD//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

name="hello.Message"

table="MESSAGES">

name="id"

column="MESSAGE_ID">

 

name="text"

column="MESSAGE_TEXT"/>

name="nextMessage"

cascade="all"

column="NEXT_MESSAGE_ID"/>

 

这个映射文件告诉HibernateMessage这个类是持久化的MESSAGES这张数据库表,identifier属性对应的是表中的MESSAGE_ID字段,text属性对应的是MESSAGE_TEXT字段,nextMessage是一个多对一的关联,对应的是NEXT_MESSAGE_ID字段。

上面这个文件可以手工编写,也可以借助第三方工具生成。

 

 

5.         更新一条信息

下面让我们修改一下刚才存到数据库里面的第一条信息。

 

Session session = getSessionFactory().openSession();

Transaction tx = session.beginTransaction();

// 1 is the generated id of the first message

Message message =

(Message) session.load( Message.class, new Long(1) );

message.setText("Greetings Earthling");

Message nextMessage = new Message("Take me to your leader (please)");

message.setNextMessage( nextMessage );

tx.commit();

session.close();

 

这段代码等同以下三个SQL语句所要实现的东西:

select m.MESSAGE_ID, m.MESSAGE_TEXT, m.NEXT_MESSAGE_ID

from MESSAGES m

where m.MESSAGE_ID = 1

 

insert into MESSAGES (MESSAGE_ID, MESSAGE_TEXT, NEXT_MESSAGE_ID)

values (2, 'Take me to your leader (please)', null)

update MESSAGES

 

set MESSAGE_TEXT = 'Greetings Earthling', NEXT_MESSAGE_ID = 2

where MESSAGE_ID = 1

 

 

再次运行“Hello World”,输入信息如下:

 

 

2 message(s) found:

Greetings Earthling

Take me to your leader (please)

 

 

*补充,在Hibernate中最核心的五个接口:

Session接口:这是Hibernate中一个主要的接口,Session接口的建立和消毁都是轻量级并且耗费资源很少的。这一点很重要,因为在我们的应用,我们每时每刻都在做着Sessioncreatedistroy工作。它不是线程安全的,原则上它应该设计成一个时间只有一个Session才对。Session可以加载一个与一个工作流相关的对象,它可以监测着这个对象的变化,它被称之为持久对象的管理器,当我们要对数据对象进行编辑操作时,就要调用它了。

 

SessionFactory接口:我们请求一个Session实例,就是从SessionFactory中取得了。当然SessionFactory就不是个轻量级的东西了,它被多个应用的线程所共享。如果你通过Hibernate访问多个数据库,就要为每一个数据库建立一个SessionFactory。在Hibernate的运行时,SessionFactory缓存了SQL段和其它的中介映射数据。它也保持one unit of work正在读取的数据和将来可能被用到的数据。

 

Configuration接口:Configuration用于指定一个应用所使用的映射文件的地址和Hibernate指定的属性文件,然后建立一个SessionFactory

 

Transaction接口:

 

Query and Criteria接口:

 

 

 (未完)

 

学习Hibernate in Action读书笔记(1)

http://dev.csdn.net/article/33/33936.shtm让我们还是以这个经久不衰的例子"Hello World"开始:) 1.      Message.java: 一个简单...
  • vitoecn
  • vitoecn
  • 2004年08月24日 15:05
  • 600

Mahout in Action 读书笔记chapter3 推荐数据的表示

这一章主要讲解的是 在Mahout里面表示和访问推荐程序的相关数据时所用的关键类。 Mahout中用于访问数据的关键抽象:DataModel。 当用户和物品的数据没有评分和偏好值时,也就...
  • feitongxunke
  • feitongxunke
  • 2014年07月11日 00:56
  • 585

Netty In Action 读书笔记 - 第二章 第一个Netty应用

本章包括: 1、获取最新的Netty版本; 2、配置必要的环境来构建、运行Netty示例; 3、创建Netty服务器和客户端; 4、拦截并处理错误; 5、构建并运行N...
  • xingrukun
  • xingrukun
  • 2014年06月23日 14:03
  • 354

Mahout in Action 读书笔记chapter2 推荐系统

​1.推荐定义 基于用户(user-based):要找到你可能喜欢的物品,你可以观察与你志趣相投的人喜欢什么。 基于物品(item-based):通过观察其他人的明显偏好,你可以弄清楚哪些...
  • feitongxunke
  • feitongxunke
  • 2014年07月08日 21:39
  • 573

Mahout in Action 读书笔记chapter4 进行推荐

​这一章主要介绍: 1.深入介绍item-based和user-based。 2.介绍这两种算法背后的相似性度量。 3.在Mahout中实现其他推荐算法,slope-one,基于SVD和基于聚类...
  • feitongxunke
  • feitongxunke
  • 2014年07月11日 22:08
  • 950

轻松掌握Hibernate读书笔记(1)

  • mouyong
  • mouyong
  • 2008年02月09日 08:36
  • 1509

redis in action 笔记

Redis的5种数据结构的Value? String,List,Set,HashSet,Zset 特别说明:    String    中存放的是一个元素,可改变或追加其内容    List Se...
  • he90227
  • he90227
  • 2016年03月28日 17:45
  • 2653

Hibernate in action

one to many 中的inverse="true" 表示这是个双向关联.需要在另一边也声明 many to one.You can map entity associations in meta...
  • dengyin2000
  • dengyin2000
  • 2005年04月22日 12:57
  • 692

Hibernate in Action.pdf 英文原版 免费下载

Hibernate in Action.pdf 下载地址:https://rejoice.ctfile.com/fs/1475340-230006220
  • jiongyi1
  • jiongyi1
  • 2017年12月10日 11:03
  • 97

学会学习 读书笔记

从小学到大学之前,一直都是学习课本知识,并没有多少自主学习的意识,到了大学和研究生之后,虽然自己也有主动去学习,但是一直觉得收获并不是那么大,没有明确的目标,多多少少也看过一些书,但是仅仅局限于看过,...
  • wendy_fly
  • wendy_fly
  • 2016年06月10日 11:51
  • 664
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习Hibernate in Action读书笔记(1)
举报原因:
原因补充:

(最多只允许输入30个字)