jsp Hibernate入门教程

  例如:

  

复制代码 代码如下:

  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: 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() +

  "\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: F

   Hibernate对于数据的更新、删除等动作,是依懒id值来判定,如果您已知id值,则可以使用load()方法来加载资料,例如:

  User user = (User) session.load(User.class, id);

   更多有关于Hibernate资料更新操作的说明,您可以看看参考手册的第九章内容。