Hibernate学习笔记——SessionFactory和Session

1)SessionFactory:

openSession():每次新建一个Session对象,每次用完自己close掉

getCurrentSession():如果有session,就用当前的session,如果没有就新建


一个session,不需要关闭commit后自动关闭
2)Sesion:
  对象的三种状态:
     瞬时状态,无ID,内存有,缓存没有,数据库没有
     持久化状态:有ID,内存有,缓存有,数据库有
     游离状态:有ID,内存有,缓存没有,数据库有
     save():
     delete():瞬时状态不能删除,持久态和游离         态可以删除
     load()和get():
     get():没有延迟,直接从数据库进行sql语句执行,如果数据不存在,  


 返回NULL
     load():延迟,如果调用对象的方法,代理才发送sql语句执行;如果数


据不存在,抛异常
   update():a)不能修改瞬时状态
             b)带有Id的瞬时状态对象
             c)游离态对象
        只修改要修改的字段
           a) 不灵活
               annotation:
                  @Column( updatable=false)
               XML方式:
                      <property update="false">
        b)XML方式:
<class name=" " dynamic-update="true">
             
        c)HQL:
            Query q=session.createQuery("update Student s set 
s.name='ccc' where s.id=31");
q.executeUpdate();

   源码实现

public class DeptTest {


/**
* @param args
*/
public static void main(String[] args) {

Configuration cfg=new AnnotationConfiguration();
SessionFactory sf=cfg.configure().buildSessionFactory();//读取hibernate.cfg.xml文件
Session session=sf.getCurrentSession();//产生Session对象
Transaction tx=session.beginTransaction();

try{
//查询数据
//Dept dept = (Dept)session.get(Dept.class,2);
//Dept dept1 = (Dept)session.load(Dept.class, 1);//通过get和load方式的区别
/*
* 通过load方式时延迟获取数据,只用用的给对象时才执行所查询语句,输出对象时如果不存在抛出异常,
* load返回的是一个代理对象,当commit后再调用对象此时对象已经不存在
* 通过get方式立即通过数据库获得数据,输出对象如果不存在的话输出null
* */
//System.out.println(dept);
//System.out.println(dept.getDeptNo()+dept.getLoc());
//System.out.println(dept1.getDeptNo()+dept1.getLoc());
//删除数据
Dept dept = (Dept)session.get(Dept.class,40);

tx.commit();
//修改数据
/*
Dept dept = (Dept)session.get(Dept.class,40);//查询数据
//System.out.println(dept.getDeptNo()+" "+dept.getDname()+dept.getLoc());
tx.commit();
dept.setDname("dsf");
Session session1 = sf.getCurrentSession();
session1.beginTransaction();
session1.update(dept);
session1.getTransaction().commit();*/
//通过hql方式更新数据
/*Query q = session.createQuery("update Dept set dname = 'zhangsan' where deptno = 39");
q.executeUpdate();*/
}catch(Exception ex){

ex.printStackTrace();
tx.rollback();
}finally{

sf.close();
}


}


}   

             
       

你可能感兴趣的:(Hibernate学习笔记——SessionFactory和Session)