zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    MockMvc control层单元测试 参数传递问题
    @GetMapping和@PostMapping接收参数的格式
    获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
    测试驱动开发实践—从testList开始
    深度解读
    深度解读
    3年不辭職!記住,在石頭上也要坐3年!(但也要区分5种不值得留的公司,12种留不住人才的公司)
    Configuring Your EMS Server or EMS Console Server on Windows/Linux
    XML 标准诞生 20 周年:这个世界,它无处不在
    通富微电石明达:成熟接班人也是先进生产力(执行力+判断力=抄底)
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3482950.html
Copyright © 2011-2022 走看看