不同版本MyEclipse生成的HibernateSessionFactory是有不同的:
一,在MyEclipse4.1(对应Eclipse3.1)中只生成HibernateSessionFactory,不生成相关的DAO类,也没有相关的getSession()函数,
则访问Session 要用
SessionFactory sf = new Configuration().configure().buildSessionFactory(); Session session = sf.openSession(); Transaction tx = session.beginTransaction();
Student student = new Student(); student.setUsername("hibernateasdfjj"); student.setPassword("q11"); student.setAge(22);
session.save(student);
tx.commit(); session.close(); |
二,在6.5MyEclipse中 ,生成了相关的DAO类,并且有getSession()函数
访问对象时比较简单,并且是线程安全的,注意各种DAO类的继承关系(Session在BaseHibernateDAO 中调用了HibernateSessionFactory.getSession();其中是通过线程调用
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen())
{
if (sessionFactory == null)
{
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession(): null;
threadLocal.set(session);
})
在获得 session的时候是先去threadLocal上取 如果取到了就直接返回,取不到SessionFactory就 生成一个 并 通过set注册到当前线程上.其本质上还是一样的
// 实例化 DAO TeacherDAO dao = new TeacherDAO(); // 打开 transaction Transaction tran = dao.getSession().beginTransaction(); // 生成普通 Java 类 Teacher bean = new Teacher(); // 设置属性 bean.setId("20080902");
// 插入数据 dao.save(bean); // 提交事务 tran.commit();
// 读取数据 java.util.List<Teacher> results = dao.findAll();
// 列出列表中的所有数据 for(Teacher o : results) { System.out.println("ID:" + o.getId()); // }
dao.getSession().close(); |