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"相對應!