|
不同版本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();
|
|