Hibernate学习笔记

1. 配置了<property name="current_session_context_class">thread</property> 后,才可使用sf.getCurrentSession();

2.基本用法,getCurrentSession()不用Close()   

             openSession() 需要 Close()

teacher s = new teacher();
s.setTitle("title");
s.setName("wzh");

Configuration cfg = new AnnotationConfiguration();
SessionFactory sf = cfg.configure().buildSessionFactory();

Session session = sf.openSession();
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
session.close();

Session session2=sf.getCurrentSession();
session2.beginTransaction();
session2.save(s);
session2.getTransaction().commit();

sf.close();

 

3.核心操作

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.wzh.hibernate.model.teacher;

public class HibernateCoreAPITest {

    private static Configuration cfg;
    private static SessionFactory sf;

    @BeforeClass
    public static void BeforeClass() {
        cfg = new AnnotationConfiguration();
        sf = cfg.configure().buildSessionFactory();
    }

    @Test
    public void testSaveWith3State() {
        // 三种状态
        teacher s = new teacher();
        s.setTitle("title");
        s.setName("wzh");
        // 保存之前是 Transient 内存中一个对象,没ID,缓存也没有
        Session session = sf.getCurrentSession();
        session.beginTransaction();
        session.save(s);
        // 保存之后是 Persistent 内存中有,缓存中有,数据库有(ID)
        System.out.println(s.getId());
        session.getTransaction().commit();
        // 提交之后是 Detached 内存有,缓存没有,数据库有
        System.out.println(s.getId());
    }

    @Test
    public void testDelete() {
        teacher s = new teacher();
        s.setId(1);
        // s.setTitle("title");
        // s.setName("wzh");
        // Session session = sf.getCurrentSession();
        // session.beginTransaction();
        // session.save(s);
        // System.out.println(s.getId());
        // session.getTransaction().commit();
        // System.out.println(s.getId());

        Session session2 = sf.getCurrentSession();
        session2.beginTransaction();
        session2.delete(s);
        session2.getTransaction().commit();
    }

    @Test
    public void testLoad() {
        Session session = sf.getCurrentSession();
        session.beginTransaction();
        teacher t= (teacher) session.load(teacher.class, 2);
        //load是懒加载,在用对象时才发出sql语句取数据
        //生成的是动态代理对象,该对象是元对象的子类
        System.out.println(t.getClass());
        System.out.println(t.toString());
        session.getTransaction().commit();
        System.out.println(t.getName());
        System.out.println(t.toString());
    }
    
    @Test
    public void testGet() {
        Session session = sf.getCurrentSession();
        session.beginTransaction();
        teacher t = (teacher) session.get(teacher.class, 2);
        //get 是直接发sql语句取数据
        System.out.println(t.getClass());
        System.out.println(t.toString());
        session.getTransaction().commit();
        System.out.println(t.toString());
    }

    @AfterClass
    public static void AfterClass() {
        sf.close();
    }

    public static void main(String[] args) {
        BeforeClass();
    }
}
View Code

 

posted on 2013-12-19 22:03  上校  阅读(221)  评论(0编辑  收藏  举报