入門 07 - 更新,刪除資料2004-11-14 11:15:45
如果您是在同一個Session中取出資料並想要馬上進行更新, 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() + "\n\tAge: " + user.getAge() + "\n\tSex: " + 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() + "\n\tAge: " + user.getAge() + "\n\tSex: " + 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() + "\n\tAge: " + user.getAge() + "\n\tSex: " + 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() + "\n\tAge: " + user.getAge() + "\n\tSex: " + 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: FHibernate提供了一個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 可以設定的值包括:
如果要刪除資料,只要使用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() + "\n\tAge: " + user.getAge() + "\n\tSex: " + 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() + "\n\tAge: " + user.getAge() + "\n\tSex: " + 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: FHibernate對於資料的更新、刪除等動作,是依懶id值來判定,如果您已知id值,則可以使用load()方法來載入資料,例如: User user = (User) session.load(User.class, id); 更多有關於Hibernate資料更新操作的說明,您可以看看參考手冊的第九章內容。 |
|
|