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