分享
 
 
 

编程技术分享:Hibernate开发心得

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有