java

位置:IT落伍者 >> java >> 浏览文章

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


发布日期:2019年10月12日
 
编程技术分享:Hibernate开发心得

hibernate核心接口

Session Transaction Query Configuration

Configuration 配置根启动Hibernate 创建SessionFactory对象

SessionFactory 初始化Hibernate创建Session对象

Sesssion 负责保存更新删除加载和查询对象

Transaction 管理事务

Query和Criteria 执行数据库查询

Query query = sessioncreateQuery(from Customer c where cname =:name);

querysetParameter(nametomHibernateSTRING);

Sessin 接口方法

save()

updata()

delete()

load()

find()

Session 通过 SessionFactoryopensession()方法获得

控制事务一起Transaction

Session session = SessionFactoryopenSession();

Transaction tx = null ;

try{

tx = sessionbegionTransaction();

//逻辑方法

mit();

}

catch(Exception e){

eprintStackTace();

if(tx != null)txrollback();

thows e ;

}

finlly{

sessionclose();

}

//sessionsave(customers)执行下列SQL语句

insert into CUSTMERS (ID NAME EMAIL PASSWORD PHONE ADDRESS SEX IS_MARRIED DESCRIPTION

IMAGE BIRTHDAY REGISTERED_TIME ) VALUES ( TOM SHANGHAIM

I AM VERY HONEST @ NULL);

//sessionfind(from customer as c order by cname asc)执行下列SQL语句

select * from CUSTOMERS order by name asc ;

//(customer)sessionload(customerclasscustomer_id)执行下列SQL语句

select * from CUSTOMERS WHERE ID = ;

update CUSTOMERS SET NAME = TOM EMAIL =TOM@YAHOOCOM ADDRESS = BEIJING WHERE ID = ;

//sessiondelete(from CUSTOMER AS C);执行下列SQL语句

select * from CUSTOMERS ;

DELETE FROM CUSTOMERS WHERE ID = ;

或是sessionload(customersclassid);

sessiondelete(customer);

或是

sessionload(customersclassnew int());

/////////////////映射对象标识符

Hib中的标识符来建立内存中的对象和数据库表中记录的对应关系对象的OID和数据库表的主键对应为了保证OID的唯一性和不可变性应该让Hib给OID赋值

/////////////////映射一对多关联关系

在关系数据库中只存在外键参照关系而且总是由many方参照one方为了消除数据冗余关系性数据库只能支持多对一或是一对一的单向关联

/////////////////操作持久化对象

session的实体对象状态分为三种游离对象持久化对象临时对象

临时对象 不处于session的缓存中不和任何的session实例关联数据库中无记录

order o = new order()通过new刚刚创建的java对象处于临时状态

session的delete方法使游离态持久化的对象转变为临时状态

持久化对象位于session的缓存中总是被一个session实例关联和数据库中记录对应

session的save方法使临时态变为持久化

session的loadget方法返回对象总是处于持久化状态

session的find方法返回list存放的都是持久化对象

session的updatesaveOrUpdatelock方法使游离态转换为持久态对象

一个持久化对象和临时对象有级联保存的时候session在清空缓存的时候会

把临时对象转化为持久对象

游离态对象不位于session的缓存中不被session关联数据库中可能有记录

session的close方法使缓存清空缓存中的所有持久化对象变为游离态

session的evict方法从缓存中删除一些持久化对象不推荐使用应该通过

查询语句来控制对象的深度

////////////////session的保存更新删除和查询

保存sessionsave();

customer c = new coustomer();

csetid(new log()) ;

csetname (tom);

session s = sessionFopensession();

transaction tx = sbeginTransaction();

ssave(c);

mit();

sessionclose();

如果想改变OID的值应使用save的重载save(customernew long());不推荐使用

save方法是当session清理缓存时才会执行insert语句如果在save以后又对对象进行 修改session会再执行一次update操作

如果save方法已执行不能修改其OID属性

更新sessionupdate();

customer c = new customer();

csetname(tom);

session s = sessionFopensession();

Transaction tx = sbeginTransaction();

ssave(c);

mit();

sessionclose();//游离态

csetname(too);

sessionupdate(c);

sessionclose();//使session和c关联都会执行一次update修改操作

session的saveOrUpdate方法同时包含了save和update方法如果传入的是临时对象调 用save方法如果传入是游离态就调用update方法如果传入是持久化就直接返回

查询session的loadget和find方法

session的load和get方法根据给定的OID从数据库中加载一个对象load方法在没有找 到对象时抛出notFoundException异常get方法返回null

get和load和其他查询方法返回的对象位于session的缓存中修改了对象的属性后 session清理缓存时会根据持久化对象的属性来更新数据库

list CUSTOMER = SESSIONFIND(FROM CUSTOMER AS C WHERE CID = )返回关于 customer的一个集合

删除sessiondelete方法由于从数据库中删除对象对应的记录如果出入的是持久化对象session就计划执行一个delete语句如果出入的参数是游离态对象先使它成为持久化对象然后计划执行一个delete语句session只有在清理缓存的时候才会执行delete语句只有当调用session的close()方法时才会从session的缓存中删除对象

sessiondelete(from customer as c where cid > ) ;

/////////////session的检索机制 load()get()find();

用来对数据库中检索对象load()和get()方法按照给定的OID加载一个持久化对象find方法按照参数指定的HQL语句加载一个或多个持久化对象

CUSTOMER C = (CUSTOMER)SESSIONLOAD(CUSTOMERCLASSNEW LOAG());

CUSTOMER C = (CUSTOMER)SESSIONGET(CUSTOMERCLASSNEW LOAG());

LIST CUSTOMER = SESSIONFIND(FROM CUSTOMER AS C WHERE CID = );

上一篇:如何在JAVA SE中使用Hibernate

下一篇:浅谈Struts分页中的Hibernate如何实现