1. 一般来说,sessionFactory实例的创建需要hibernate.cfg.xml配置文件,但是我们已经把它合并到applicationContext.xml配置文件中了,刚开始我也试了很久,都提示没有创建实例,后来,终于被我得出了结论:
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
SessionFactory sf = (SessionFactory)ctx.getBean("sessionFactory");
于是我就利用sf.openSession().save(user);
但是保存以后数据库没有数据,又琢磨了很长时间,原来是没有将save方法放在事务中,这一下子明白了:
Session session = sf.openSession();
Transaction tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();
数据库里面终于有信息了!
2. 我们可以不在Java类里面创建SessionFactory实例,因为ApplicationContext.xml已经创建好了,直接使用就可以了,我们只要把这个类注入到sessionFactory就ok了!注入的好处就是不用自己创建对象,直接使用就可以了,但是需要在Java类里面具有get()和set()方法,例如:
<bean id="HelloWorld" class="action.HelloWorld">
<property name = "sf">
<ref local = "sessionFactory"/>
</property>
</bean>
HelloWorld.java里面必须有这两条语句:
private SessionFactory sf;
public SessionFactory getSf(){
return sf;
}
public void setSf(SessionFactory sf){
this.sf=sf;
}
而且这样写的好处是把struts.xml与applicationContext.xml联系起来了:
struts.xml的class=“HelloWorld”和applicationContext.xml的id="HelloWorld"相对应!