编程技术分享:Hibernate开发心得
hibernate核心接口:
Session 、 Transaction 、 Query 、Configuration
Configuration :配置、根启动Hibernate 创建SessionFactory对象
SessionFactory :初始化Hibernate创建Session对象
Sesssion :负责保存、更新、删除、加载和查询对象
Transaction :管理事务
Query和Criteria : 执行数据库查询
Query query = session.createQuery("from Customer c where c.name =:name");
query.setParameter("name","tom",Hibernate.STRING);
Sessin 接口方法 :
save();
updata();
delete();
load();
find();
Session 通过 SessionFactory.opensession()方法获得;
控制事务一起Transaction
Session session = SessionFactory.openSession();
Transaction tx = null ;
try{
tx = session.begionTransaction();
//逻辑方法
tx.commit();
}
catch(Exception e){
e.printStackTace();
if(tx != null)tx.rollback();
thows e ;
}
finlly{
session.close();
}
//session.save(customers)执行下列SQL语句:
insert into CUSTMERS (ID , NAME , EMAIL , PASSWORD , PHONE , ADDRESS , SEX , IS_MARRIED , DESCRIPTION ,
IMAGE , BIRTHDAY , REGISTERED_TIME ) VALUES (1 , 'TOM' , '1234', 55556666 ,'SHANGHAI','M' , 0 ,
'I AM VERY HONEST' @ ,'1980-05-06' , NULL);
//session.find("from customer as c order by c.name asc")执行下列SQL语句:
select * from CUSTOMERS order by name asc ;
//(customer)session.load(customer.class,customer_id)执行下列SQL语句:
select * from CUSTOMERS WHERE ID = 1 ;
update CUSTOMERS SET NAME = 'TOM' ,EMAIL ='TOM@YAHOO.COM' ,ADDRESS = 'BEIJING' WHERE ID = 1;
//session.delete("from CUSTOMER AS C");执行下列SQL语句:
select * from CUSTOMERS ;
DELETE FROM CUSTOMERS WHERE ID = 1;
或是:session.load(customers.class,id);
session.delete(customer);
或是:
session.load(customers.class,new int(1));
/////////////////映射对象标识符
Hib中的标识符来建立内存中的对象和数据库表中记录的对应关系,对象的OID和数据库表的主键对应。为了保证OID的唯一性和不可变性,应该让Hib给OID赋值。
/////////////////映射一对多关联关系
在关系数据库中,只存在外键参照关系,而且总是由many方参照one方。为了消除数据冗余,关系性数据库只能支持多对一或是一对一的单向关联。
/////////////////操作持久化对象
session的实体对象状态分为三种:游离对象,持久化对象,临时对象
临时对象 :不处于session的缓存中,不和任何的session实例关联,数据库中无记录。
例:order o = new order();通过new刚刚创建的java对象处于临时状态
session的delete方法使游离态,持久化的对象转变为临时状态
持久化对象:位于session的缓存中,总是被一个session实例关联,和数据库中记录对应
session的save方法使临时态变为持久化
session的load,get方法返回对象总是处于持久化状态
session的find方法返回list存放的都是持久化对象
session的update,saveOrUpdate,lock方法使游离态转换为持久态对象
一个持久化对象和临时对象有级联保存的时候session在清空缓存的时候会
把临时对象转化为持久对象
游离态对象:不位于session的缓存中,不被session关联,数据库中可能有记录
session的close方法使缓存清空,缓存中的所有持久化对象变为游离态
session的evict方法从缓存中删除一些持久化对象,不推荐使用应该通过
查询语句来控制对象的深度。
////////////////session的保存,更新,删除和查询
保存:session.save();
customer c = new coustomer();
c.setid(new log(9)) ;
c.setname ("tom");
session s = sessionF.opensession();
transaction tx = s.beginTransaction();
s.save(c);
tx.commit();
session.close();
如果想改变OID的值应使用save的重载save(customer,new long(9));不推荐使用
save方法是当session清理缓存时才会执行insert语句,如果在save以后又对对象进行 修改session会再执行一次update操作。
如果save方法已执行不能修改其OID属性。
更新:session.update();
customer c = new customer();
c.setname("tom");
session s = sessionF.opensession();
Transaction tx = s.beginTransaction();
s.save(c);
tx.commit();
session.close();//游离态
c.setname("too");
session2.update(c);
session2.close();//使session2和c关联都会执行一次update修改操作。
session的saveOrUpdate方法同时包含了save和update方法,如果传入的是临时对象调 用save方法,如果传入是游离态就调用update方法如果传入是持久化,就直接返回。
查询:session的load,get和find方法
session的load和get方法根据给定的OID从数据库中加载一个对象,load方法在没有找 到对象时抛出notFoundException异常,get方法返回null。
get和load和其他查询方法返回的对象位于session的缓存中,修改了对象的属性后, session清理缓存时,会根据持久化对象的属性来更新数据库。
list CUSTOMER = SESSION.FIND("FROM CUSTOMER AS C WHERE C.ID = 1")返回关于 customer的一个集合。
删除:session.delete方法,由于从数据库中删除对象对应的记录,如果出入的是持久化对象session就计划执行一个delete语句。如果出入的参数是游离态对象,先使它成为持久化对象,然后计划执行一个delete语句。session只有在清理缓存的时候才会执行delete语句。只有当调用session的close()方法时才会从session的缓存中删除对象。
session.delete("from customer as c where c.id > 8") ;
/////////////session的检索机制 load(),get(),find();
用来对数据库中检索对象,load()和get()方法按照给定的OID加载一个持久化对象,find方法按照参数指定的HQL语句加载一个或多个持久化对象
CUSTOMER C = (CUSTOMER)SESSION.LOAD(CUSTOMER.CLASS,NEW LOAG(1));
CUSTOMER C = (CUSTOMER)SESSION.GET(CUSTOMER.CLASS,NEW LOAG(2));
LIST CUSTOMER = SESSION.FIND("FROM CUSTOMER AS C WHERE C.ID = 1");
分享到:
相关推荐
本篇文章将基于标题"Hibernate学习心得"和提供的压缩包文件,深入探讨Hibernate的相关知识点。 首先,让我们从Hibernate的基础开始。`Hibernate第一章.txt`可能涵盖了这一主题。Hibernate是一个Object-Relational ...
在本文中,我们将深入探讨Hibernate的使用心得,特别是关注HQL(Hibernate Query Language)查询的技巧和优化策略。HQL是Hibernate框架中用于操作对象关系映射的SQL方言,它允许开发者以面向对象的方式来编写查询,...
对于初学者来说,学习 Hibernate 可以简化数据库操作,提高开发效率。以下是对 Hibernate 学习过程的详细说明: 一、配置 Hibernate 与 MyEclipse 连接 在开始使用 Hibernate 之前,你需要先配置 Hibernate 与...
“工具”标签则暗示Hibernate作为一个开发工具,如何与其他开发工具(如IDE、构建工具等)配合使用,提高开发效率。 **文件名分析:**“Hibernate学习映射心得.doc” 这是一个文档文件,很可能是作者详细记录的...
总的来说,这个压缩包文件的内容涵盖了Hibernate的基础知识到高级应用,通过学习和实践,开发者可以掌握如何利用Hibernate进行高效、便捷的数据库操作,提升Java开发的效率和质量。在每个章节中,理解源码的实现逻辑...
### Hibernate 二级缓存实验心得与手册 #### 一、二级缓存概述 在学习Hibernate的过程中,二级缓存是一个非常重要的概念。与一级缓存不同的是,一级缓存默认为每个`Session`开启,用于存储当前`Session`内的实体...
《Hibernate开发指南》一书由夏昕撰写,旨在为开发者提供深入理解Hibernate框架的路径,尤其适合那些希望从零开始掌握或进一步深化Hibernate技能的读者。本书不仅涵盖了Hibernate的基础概念和核心功能,还融入了作者...
### Hibernate开发指南知识点详解 #### 一、简介与背景 本文档源于夏昕同志在2003年底的一个咨询项目中为客户所做的持久层设计培训文案。文档内容不仅涵盖了Hibernate的基本使用方法,还融入了作者在实际项目中的...
【Hibernate开发资料】是一份全面且实用的资源集合,涵盖了从初学者到高级开发者所需的各种Hibernate知识。Hibernate作为Java领域中最流行的Object-Relational Mapping(ORM)框架,它简化了数据库与Java对象之间的...
学习Spring Struts Hibernate 整合开发必看的书
在本文中,我们将重点讨论通过注解方式使用Hibernate的心得体会。 在使用Hibernate进行开发时,注解是必不可少的一部分。`@Entity`注解用于标记一个Java类为实体类,这意味着该类将与数据库中的一个表相对应。如果...
本心得旨在分享对Hibernate深入理解的关键点,希望对你在使用Hibernate进行开发时能有所帮助。 一、Hibernate概述 Hibernate是一个开源的ORM框架,它允许我们将Java类与数据库表进行映射,通过对象的方式来操作...
【hibernate简介】 Hibernate是一个开源的Java框架,主要用于简化企业级应用中的对象关系映射(Object-Relational Mapping,ORM)。它允许开发者将数据库操作转换为对Java对象的操作,从而降低了开发人员处理SQL和...
本文将深入探讨JSP(Java Server Pages)、Hibernate、JavaScript以及数据库这四个关键领域的核心概念和技术,分享一些实用的心得体会,帮助你提升开发效率和代码质量。 首先,JSP是Java Web应用中的视图层技术,...
Struts和Hibernate是Java开发中两个非常重要的框架,它们分别关注于Web应用的MVC(Model-View-Controller)架构的实现和数据持久化的处理。 Struts是一个经典的MVC框架,它帮助开发者将业务逻辑、用户界面和数据...
- **主要内容**:涉及Hibernate框架的使用方法、实践经验以及作者在Hibernate官方论坛上的交流心得。 - **定位区别**:不同于Hibernate官方参考文档(Hibernate Reference),本文档旨在为开发者提供一个学习和掌握...