精通Hibernate:第一个Hibernate应用(1)(4)
saveCustomer()方法
该方法调用Session的save()方法,把Customer对象持久化到数据库中。
- tx = session.beginTransaction();
- session.save(customer);
- tx.commit();
当运行session.save()方法时,Hibernate执行以下SQL语句:
- insert into CUSTOMERS (ID, NAME, EMAIL, PASSWORD, PHONE, ADDRESS, SEX,
- IS_MARRIED,DESCRIPTION, IMAGE, BIRTHDAY, REGISTERED_TIME)
- 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文件中相关的映射代码如下:
- <id name="id" column="ID" type="long">
- <generator class="increment"/>
- </id>
findAllCustomers()方法
该方法通过Query接口查询所有的Customer对象。
- tx = session.beginTransaction(); //开始一个事务
- Query query=session.createQuery("from Customer as c order by c.name asc");
- List customers=query.list();
- for (Iterator it = customers.iterator(); it.hasNext();) {
- printCustomer(context,out,(Customer) it.next());
- }
- tx.commit(); //提交事务
Session的createQuery()方法的参数“from Customer as c order by c.name asc”使用的是Hibernate查询语言。运行Query.list()方法时, Hibernate执行以下SQL语句:
- select * from CUSTOMERS order by NAME asc;
loadAndUpdateCustomer ()方法
该方法调用Session的get()方法,加载Customer对象,然后再修改Customer对象的属性。
- tx = session.beginTransaction();
- Customer c=(Customer)session.get(Customer.class,customer_id);
- c.setAddress(address); //修改内存中Customer对象的address属性
- tx.commit();
以上代码先调用Session的get()方法,它按照参数指定的OID从数据库中检索出匹配的Customer对象,Hibernate会执行以下SQL语句:
- select * from CUSTOMERS where ID=1;
loadAndUpdateCustomer()方法接着修改Customer对象的address属性。那么,Hibernate会不会同步更新数据库中相应的CUSTOMERS表的记录呢?答案是肯定的。Hibernate采用脏检查机制,按照内存中的Customer对象的状态的变化,来同步更新数据库中相关的数据,Hibernate会执行以下SQL语句:
- update CUSTOMERS set NAME="Tom",EMAIL="Tom@yahoo.com"…ADDRESS="Beijing"…
- where ID=1;
尽管只有Customer对象的address属性发生了变化,但是Hibernate执行的update语句中会包含所有的字段。
deleteCustomer()方法
该方法调用Session的delete()方法,删除特定的Customer对象:
- tx = session.beginTransaction();
- session.delete(customer);
- tx.commit();
运行session.delete()方法时,Hibernate根据Customer对象的OID,执行以下SQL delete语句:
- delete from CUSTOMERS where ID=1;
八、效果图
用户点评