zoukankan      html  css  js  c++  java
  • hibernate session method

    import static org.junit.Assert.*;
    
    import java.io.FileInputStream;
    import java.util.Date;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.service.ServiceRegistryBuilder;
    import org.junit.Test;
    
    
    
    public class App {
        private SessionFactory sessionFactory = new Configuration()
                                                .configure()
                                                .addClass(User.class)
                                                .buildSessionFactory();
    
        
        @Test    
        public void testSave() throws Exception{
            //save 把临时状态转变为持久状态(交给session管理)
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            //------------------------
    
                User user = new User();//临时状态:数据库中没有对应的记录,跟session没有联系
                user.setName("test");
                
                session.save(user);//持久状态:在session的管理中最终数据库中会有对应的记录
    //            session.save(user);//save是立即执行(如果主键是由自己指定的那也是在flush()中执行),delete和update都是默认在flush()执行
    //            session.save(user);//同一个对象执行多次保存,只会保存一个到session集合,session管理的是同一个对象
    //            session.save(user);
                
                user.setName("贱贱");//持久状态:会自动更新数据库中的内容
            
            //------------------------
                tx.commit();//默认调用flush()并执行所有的SQL语句
                session.close();//关闭session
                System.out.println(user);//session关闭之后变为游离状态,数据库中有记录,和session没有联系
                user.setName("小贱aaaa");//游离状态修改对象数据库不会更新
        }
        
        
        //把游离状态转变为持久状态
        //在更新时对象不存在会报错
        @Test
        public void testUpadet() throws Exception {
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            //------------------------
            User user = (User) session.get(User.class, 1);
            System.out.println(user);//持久化状态
            user.setName("小san");
    //        session.flush();//立即执行,更新到数据库        
            System.out.println("----------------");
            
    //        session.clear();//清除session中所有的对象,user变为游离状态
    //        session.evict(user);//清除session中user,user变为游离状态
            
    //        session.update(user);//commit()执行游离状态转变为持久状态
            System.out.println("----------------");    
            //--------------------
            tx.commit();
            session.close();
        }
        
        
        
        @Test
        public void testSaveOrUpdate() throws Exception {
            //把临时游离状态转变为持久状态
            //在更新时对象不存在会报错
            //本方法是根据id来判断对象是什么状态,如果id是原始值(临时状态)就insert,如果不是原始值(游离状态)就update,
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            //------------------------
            User user = new User();//id原始值
    //        user.setId(1);//设置了Id,执行update语句,如果数据库中没有就报错
            user.setName("张三");
            session.saveOrUpdate(user);    
            //--------------------
            tx.commit();
            session.close();
        }
        
        
        @Test
        public void testDelete() throws Exception {
            //把持久化和游离状态转化为删除状态
            //如果删除的对象不存在抛异常
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            //------------------------
    //        User user = (User) session.get(User.class, 15);
    //        session.delete(user);//删除持久化对象
            
            User user = new User();
            user.setId(16);//模拟游离对象
            session.delete(user);//删除游离对象
            //--------------------
            tx.commit();
            session.close();
        }
        
        @Test
        public void testGet(){
            //获取对象,持久化状态
            //如果对象不存在,返回null
            //马上执行SQL语句
            //返回的是真实对象
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            //------------------------
            
            User user = (User) session.get(User.class, 1);
            System.out.println("---------------------");
            
            //------------------------
            tx.commit();
            session.close();
        }
        
        
        @Test
        public void testLoad() throws Exception {
            //获取数据,是持久化状态
            //延时加载,不立即执行SQL语句,而是在使用到除了(User.class, id)才执行SQL语句,用到数据库的数据才加载
            //返回的是代理对象
            //延时加载的实体类不能是final,否则不能生成子类代理
            //如果数据不存在就跑异常objectNotFoundException
            //让延时加载失效的方式:让实体类写成final,或者在**.hbm.xml中配置<class... lazy="false">
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            //------------------------
            User user = (User) session.load(User.class, 1);//返回的是代理对象
            System.out.println(user.getId());
            System.out.println(user.getClass());
            
    //        System.out.println(user.getName());//立即执行SQL语句        
            //--------------------
            tx.commit();
            session.close();
        }
    
        @Test
        public void testBatchSave() throws Exception {
            //操作大量数据要防止session中对象过多而内存溢出
            Session session = sessionFactory.openSession();
            Transaction tx = session.beginTransaction();
            //------------------------
            for (int i = 0 ;i<1000 ; ++i){
                User user = new User();
                user.setName("大数据");
                session.save(user);
                if(i%10 == 0){
                    session.flush();//先提交
                    session.clear();//在清空
                }
            }
            
            //--------------------
            tx.commit();
            session.close();
        }
        
        
    
    }
  • 相关阅读:
    jquery直接操作元素的方式
    ie6下,给a添加事件,如果事件中有http请求,将会无效
    一个Tahoma字体bug引发的思考—关于样式bug的分析流程
    用弧度画圆
    【译】OWIN: Open Web Server Interface for .NET
    【译】Dependency Injection with Autofac
    Asp.net Identity身份与权限体系设计
    winform 数据(双向)绑定 快速更新实体
    泛型与非泛型的区别。
    使用XmlReader读Xml
  • 原文地址:https://www.cnblogs.com/lnzr/p/4175782.html
Copyright © 2011-2022 走看看