【 tulaoshi.com - Web开发 】
                             
                            例如: 
代码如下:
HibernateTest.java 
import onlyfun.caterpillar.*; 
import net.sf.hibernate.*; 
import net.sf.hibernate.cfg.*; 
import java.util.*; 
public class HibernateTest { 
public static void main(String[] args) throws HibernateException { 
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
Session session = sessionFactory.openSession(); 
List users = session.find("from User"); 
User updated = null; 
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { 
User user = (User) iterator.next(); 
if(updated == null) 
updated = user; 
System.out.println(user.getName() + 
"ntAge: " + user.getAge() + 
"ntSex: " + user.getSex()); 
} 
updated.setName("justin"); 
session.flush(); 
users = session.find("from User"); 
session.close(); 
sessionFactory.close(); 
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { 
User user = (User) iterator.next(); 
System.out.println(user.getName() + 
"ntAge: " + user.getAge() + 
"ntSex: " + user.getSex()); 
} 
} 
} 
 这个程序会显示数据表中的所有数据,并将数据表中的第一笔数据更新,一个执行的结果如下: 
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). 
log4j:WARN Please initialize the log4j system properly. 
Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ 
caterpillar 
Age: 28 
Sex: M 
momor 
Age: 25 
Sex: F 
Bush 
Age: 25 
Sex: M 
Becky 
Age: 35 
Sex: F 
Hibernate: update USER set name=?, sex=?, age=? where user_id=? 
Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ 
justin 
Age: 28 
Sex: M 
momor 
Age: 25 
Sex: F 
Bush 
Age: 25 
Sex: M 
Becky 
Age: 35 
Sex: F 
 如果您开启了一个Session,从数据表中取出数据显示到使用者接口上,之后关闭Session,当使用者在接口上操作完毕并按下储存时,这时您要重新开启一个Session,使用update()方法将对象中的数据更新至对应的数据表中,一个例子如下: 
代码如下:
HibernateTest.java 
import onlyfun.caterpillar.*; 
import net.sf.hibernate.*; 
import net.sf.hibernate.cfg.*; 
import java.util.*; 
public class HibernateTest { 
public static void main(String[] args) throws HibernateException { 
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
Session session = sessionFactory.openSession(); 
List users = session.find("from User"); 
// 关闭这个Session 
session.close(); 
User updated = null; 
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { 
User user = (User) iterator.next(); 
if(updated == null) 
updated = user; 
System.out.println(user.getName() + 
"ntAge: " + user.getAge() + 
"ntSex: " + user.getSex()); 
} 
// 使用者作一些操作,之后储存 
updated.setName("caterpillar"); 
// 开启一个新的Session 
session = sessionFactory.openSession(); 
// 更新数据 
session.update(updated); 
users = session.find("from User"); 
session.close(); 
sessionFactory.close(); 
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { 
User user = (User) iterator.next(); 
System.out.println(user.getName() + 
"ntAge: " + user.getAge() + 
"ntSex: " + user.getSex()); 
} 
} 
} 
 这个程序执行的结果范例如下,您可以看看实际上执行了哪些SQL: 
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). 
log4j:WARN Please initialize the log4j system properly. 
Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ 
justin 
Age: 28 
Sex: M 
momor 
Age: 25 
Sex: F 
Bush 
Age: 25 
Sex: M 
Becky 
Age: 35 
Sex: F 
Hibernate: update USER set name=?, sex=?, age=? where user_id=? 
Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ 
caterpillar 
Age: 28 
Sex: M 
momor 
Age: 25 
Sex: F 
Bush 
Age: 25 
Sex: M 
Becky 
Age: 35 
Sex: F 
 Hibernate提供了一个saveOrUpdate()方法,为数据的储存或更新提供了一个统一的操作接口,藉由定义映像文件时,设定id标签的unsaved-value来决定什么是新的值必需,什么是已有的值必须更新: 
User.hbm.xml 
代码如下:
id name="id" type="string" unsaved-value="null" 
column name="user_id" sql-type="char(32)" / 
generator class="uuid.hex"/ 
/id 
unsaved-value 
可以设定的值包括: 
any - 总是储存 
none - 总是更新 
null - id为null时储存(预设) 
valid - id为null或是指定值时储存 
 这样设定之后,您可以使用session.saveOrUpdate(updated);来取代上一个程序的session.update(updated);方法。 
 如果要删除数据,只要使用delete()方法即可,直接看个例子。 
代码如下:
HibernateTest.java 
import onlyfun.caterpillar.*; 
import net.sf.hibernate.*; 
import net.sf.hibernate.cfg.*; 
import java.util.*; 
public class HibernateTest { 
public static void main(String[] args) throws HibernateException { 
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
Session session = sessionFactory.openSession(); 
List users = session.find("from User"); 
User updated = null; 
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { 
User user = (User) iterator.next(); 
if(updated == null) 
updated = user; 
System.out.println(user.getName() + 
"ntAge: " + user.getAge() + 
"ntSex: " + user.getSex()); 
} 
session.delete(updated); 
users = session.find("from User"); 
session.close(); 
sessionFactory.close(); 
for (ListIterator iterator = users.listIterator(); iterator.hasNext(); ) { 
User user = (User) iterator.next(); 
System.out.println(user.getName() + 
"ntAge: " + user.getAge() + 
"ntSex: " + user.getSex()); 
} 
} 
} 
 一个执行的结果范例如下: 
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment). 
log4j:WARN Please initialize the log4j system properly. 
Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ 
justin 
Age: 28 
Sex: M 
momor 
Age: 25 
Sex: F 
Bush 
Age: 25 
Sex: M 
Becky 
Age: 35 
Sex: F 
Hibernate: delete from USER where user_id=? 
Hibernate: select user0_.user_id as user_id, user0_.name as name, user0_.sex as sex, user0_.age as age from USER user0_ 
momor 
Age: 25 
Sex: F 
Bush 
Age: 25 
Sex: M 
Becky 
Age: 35 
Sex: F 
 Hibernate对于数据的更新、删除等动作,是依懒id值来判定,如果您已知id值,则可以使用load()方法来加载资料,例如: 
User user = (User) session.load(User.class, id); 
 更多有关于Hibernate资料更新操作的说明,您可以看看参考手册的第九章内容。