欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

精通Hibernate:第一个Hibernate应用(1)(4)

来源: javaer 分享于  点击 43388 次 点评:43

saveCustomer()方法

该方法调用Session的save()方法,把Customer对象持久化到数据库中。

  1. tx = session.beginTransaction();  
  2.  
  3.        session.save(customer);  
  4.  
  5.        tx.commit(); 

当运行session.save()方法时,Hibernate执行以下SQL语句:

  1. insert into CUSTOMERS (ID, NAME, EMAIL, PASSWORD, PHONE, ADDRESS, SEX,  
  2.  
  3.       IS_MARRIED,DESCRIPTION, IMAGE, BIRTHDAY, REGISTERED_TIME)   
  4.  
  5.       values(1,'Tom','tom@yahoo.com','1234',55556666,'Shanghai','M',0,'I am very honest.', ☺,'1980-05-06',null

在test()方法中并没有设置Customer对象的id属性,Hibernate会根据映射文件的配置,采用increment标识符生成器自动以递增的方式为OID赋值。在Customer.hbm.xml文件中相关的映射代码如下:

  1. <id name="id" column="ID" type="long">  
  2.  
  3.      <generator class="increment"/>  
  4.  
  5.   </id> 

findAllCustomers()方法

该方法通过Query接口查询所有的Customer对象。

  1. tx = session.beginTransaction(); //开始一个事务  
  2.  
  3. Query query=session.createQuery("from Customer as c order by c.name asc");  
  4.  
  5. List customers=query.list();  
  6.  
  7. for (Iterator it = customers.iterator(); it.hasNext();) {  
  8.  
  9.   printCustomer(context,out,(Customer) it.next());  
  10.  
  11. }  
  12.  
  13. tx.commit(); //提交事务 

Session的createQuery()方法的参数“from Customer as c order by c.name asc”使用的是Hibernate查询语言。运行Query.list()方法时, Hibernate执行以下SQL语句:

  1. select * from CUSTOMERS order by NAME asc; 

loadAndUpdateCustomer ()方法

该方法调用Session的get()方法,加载Customer对象,然后再修改Customer对象的属性。

  1. tx = session.beginTransaction();  
  2.  
  3.       Customer c=(Customer)session.get(Customer.class,customer_id);  
  4.  
  5.       c.setAddress(address); //修改内存中Customer对象的address属性  
  6.  
  7.       tx.commit(); 

以上代码先调用Session的get()方法,它按照参数指定的OID从数据库中检索出匹配的Customer对象,Hibernate会执行以下SQL语句:

  1. select * from CUSTOMERS where ID=1

loadAndUpdateCustomer()方法接着修改Customer对象的address属性。那么,Hibernate会不会同步更新数据库中相应的CUSTOMERS表的记录呢?答案是肯定的。Hibernate采用脏检查机制,按照内存中的Customer对象的状态的变化,来同步更新数据库中相关的数据,Hibernate会执行以下SQL语句:

  1. update CUSTOMERS set NAME="Tom",EMAIL="Tom@yahoo.com"…ADDRESS="Beijing"…  
  2.  
  3. where ID=1

尽管只有Customer对象的address属性发生了变化,但是Hibernate执行的update语句中会包含所有的字段。

deleteCustomer()方法

该方法调用Session的delete()方法,删除特定的Customer对象:

  1. tx = session.beginTransaction();  
  2.  
  3.       session.delete(customer);  
  4.  
  5.       tx.commit(); 

运行session.delete()方法时,Hibernate根据Customer对象的OID,执行以下SQL delete语句:

  1. delete from CUSTOMERS where ID=1;&nbsp; 

八、效果图


相关栏目:

用户点评