你确定是 query.setParameter() ?
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static Session session;
static {
// 由配置文件获得会话工厂
sessionFactory = new Configuration().configure().buildSessionFactory();
}
// 获得会话工厂对象
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
// 获得session
public static Session getSession() {
session = sessionFactory.openSession();
return session;
}
// 关闭session
public static void closeSession(Session session) {
if (session != null) {
session.close();
}
}
}
你说的很对
该类通过单例模式封装了获取SessoinFactory的代码,体现面向对象封装的思想。在其他类中可使用该类直接获取SessionFactory,以便之后获取Session,实现对数据库的操作。
就是实现封装,封装之后达到复用效果,你可以在你想要获取SessionFactory的时候调用该类获取即可,优化了代码,体现面向对象的编程思想。
Session session = sessionFactory.OpenSession(); 至于 getCurrentSession 它适合本地操作。 得到一个线程安全的实例 public Session getSession() throws HibernateException{ ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); session = threadLocal.get(); if(session==null || !session.isOpen() { session = (sessionFactory!=null) ? sessionFactory.OpenSession() : null } return session; }
那就直接调用config.buildSessionFactory()
看看你的HIbernate版本,3,4,5版本他们是有些不同的,建议使用和老师一样的版本也就是HIbernate4
工厂就是一种常用设计模式,session是域对象,工厂模式可以分为三类,简单工厂模式(Simple Factory)、工厂方法模式(Factory Method) 、抽象工厂模式(Abstract Factory)
萌新看的不是很懂...
配好环境先
可以不创建,但是这样的话每次都要new 一个session,不方便操作和管理,当然,小的项目还行,大了的话就不好了,然后还有就是一般一个数据库(比如Mysql,SQL server等)对应一个sessionFactory。