zl程序教程

您现在的位置是:首页 >  其他

当前栏目

jspHibernate入门教程

入门教程 jsphibernate
2023-06-13 09:14:07 时间
例如:
复制代码代码如下:

HibernateTest.java
importonlyfun.caterpillar.*;
importnet.sf.hibernate.*;
importnet.sf.hibernate.cfg.*;
importjava.util.*;
publicclassHibernateTest{
publicstaticvoidmain(String[]args)throwsHibernateException{
SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();
Sessionsession=sessionFactory.openSession();
Listusers=session.find("fromUser");
Userupdated=null;
for(ListIteratoriterator=users.listIterator();iterator.hasNext();){
Useruser=(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("fromUser");
session.close();
sessionFactory.close();
for(ListIteratoriterator=users.listIterator();iterator.hasNext();){
Useruser=(User)iterator.next();
System.out.println(user.getName()+
"\n\tAge:"+user.getAge()+
"\n\tSex:"+user.getSex());
}
}
}

 这个程序会显示数据表中的所有数据,并将数据表中的第一笔数据更新,一个执行的结果如下:
log4j:WARNNoappenderscouldbefoundforlogger(net.sf.hibernate.cfg.Environment).
log4j:WARNPleaseinitializethelog4jsystemproperly.
Hibernate:selectuser0_.user_idasuser_id,user0_.nameasname,user0_.sexassex,user0_.ageasagefromUSERuser0_
caterpillar
Age:28
Sex:M
momor
Age:25
Sex:F
Bush
Age:25
Sex:M
Becky
Age:35
Sex:F
Hibernate:updateUSERsetname=?,sex=?,age=?whereuser_id=?
Hibernate:selectuser0_.user_idasuser_id,user0_.nameasname,user0_.sexassex,user0_.ageasagefromUSERuser0_
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
importonlyfun.caterpillar.*;
importnet.sf.hibernate.*;
importnet.sf.hibernate.cfg.*;
importjava.util.*;
publicclassHibernateTest{
publicstaticvoidmain(String[]args)throwsHibernateException{
SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();
Sessionsession=sessionFactory.openSession();
Listusers=session.find("fromUser");
//关闭这个Session
session.close();
Userupdated=null;
for(ListIteratoriterator=users.listIterator();iterator.hasNext();){
Useruser=(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("fromUser");
session.close();
sessionFactory.close();
for(ListIteratoriterator=users.listIterator();iterator.hasNext();){
Useruser=(User)iterator.next();
System.out.println(user.getName()+
"\n\tAge:"+user.getAge()+
"\n\tSex:"+user.getSex());
}
}
}

 这个程序执行的结果范例如下,您可以看看实际上执行了哪些SQL:
log4j:WARNNoappenderscouldbefoundforlogger(net.sf.hibernate.cfg.Environment).
log4j:WARNPleaseinitializethelog4jsystemproperly.
Hibernate:selectuser0_.user_idasuser_id,user0_.nameasname,user0_.sexassex,user0_.ageasagefromUSERuser0_
justin
Age:28
Sex:M
momor
Age:25
Sex:F
Bush
Age:25
Sex:M
Becky
Age:35
Sex:F
Hibernate:updateUSERsetname=?,sex=?,age=?whereuser_id=?
Hibernate:selectuser0_.user_idasuser_id,user0_.nameasname,user0_.sexassex,user0_.ageasagefromUSERuser0_
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
复制代码代码如下:
<idname="id"type="string"unsaved-value="null">
<columnname="user_id"sql-type="char(32)"/>
<generatorclass="uuid.hex"/>
</id>

unsaved-value
可以设定的值包括:
any-总是储存
none-总是更新
null-id为null时储存(预设)
valid-id为null或是指定值时储存
 这样设定之后,您可以使用session.saveOrUpdate(updated);来取代上一个程序的session.update(updated);方法。
 如果要删除数据,只要使用delete()方法即可,直接看个例子。
复制代码代码如下:
HibernateTest.java
importonlyfun.caterpillar.*;
importnet.sf.hibernate.*;
importnet.sf.hibernate.cfg.*;
importjava.util.*;
publicclassHibernateTest{
publicstaticvoidmain(String[]args)throwsHibernateException{
SessionFactorysessionFactory=newConfiguration().configure().buildSessionFactory();
Sessionsession=sessionFactory.openSession();
Listusers=session.find("fromUser");
Userupdated=null;
for(ListIteratoriterator=users.listIterator();iterator.hasNext();){
Useruser=(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("fromUser");
session.close();
sessionFactory.close();
for(ListIteratoriterator=users.listIterator();iterator.hasNext();){
Useruser=(User)iterator.next();
System.out.println(user.getName()+
"\n\tAge:"+user.getAge()+
"\n\tSex:"+user.getSex());
}
}
}

 一个执行的结果范例如下:
log4j:WARNNoappenderscouldbefoundforlogger(net.sf.hibernate.cfg.Environment).
log4j:WARNPleaseinitializethelog4jsystemproperly.
Hibernate:selectuser0_.user_idasuser_id,user0_.nameasname,user0_.sexassex,user0_.ageasagefromUSERuser0_
justin
Age:28
Sex:M
momor
Age:25
Sex:F
Bush
Age:25
Sex:M
Becky
Age:35
Sex:F
Hibernate:deletefromUSERwhereuser_id=?
Hibernate:selectuser0_.user_idasuser_id,user0_.nameasname,user0_.sexassex,user0_.ageasagefromUSERuser0_
momor
Age:25
Sex:F
Bush
Age:25
Sex:M
Becky
Age:35
Sex:F
 Hibernate对于数据的更新、删除等动作,是依懒id值来判定,如果您已知id值,则可以使用load()方法来加载资料,例如:
Useruser=(User)session.load(User.class,id);
 更多有关于Hibernate资料更新操作的说明,您可以看看参考手册的第九章内容。