zoukankan      html  css  js  c++  java
  • hibernate中session,HQL,持久化,一对多,多对一

    package com.hanqi.test;
    import java.util.Date;
    import java.util.List;

    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;

    import com.hanqi.entity.Course;
    import com.hanqi.entity.Teacher;
    import com.hanqi.entity.User;

    public class Test01 {
    private SessionFactory sf=null;
    private Session se=null;
    private Transaction ts;

    //在测试用例执行之前自动执行的方法
    //一般用来初始化的公用对象
    //前置方法
    @Before
    public void init()
    {
                //1获取配置文件
                Configuration cfg=new Configuration().configure();
                
                
                //2注册配置
                ServiceRegistry sr=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
                
                
                //3获取SessionFactory(相当于JDBC)
                 sf =cfg.buildSessionFactory(sr);
                
                System.out.println(sf);
                
                //4产生Session
                 se=sf.openSession();
                
                //5启动事务
                 ts=se.beginTransaction();
    }
    
    //后置方法
    //一般用来释放资源
    @After
    public void destroy()
    {
                //7提交事务
        
                ts.commit();
                //8释放资源
                se.close();
                sf.close();
        
    }
    
    //测试Hibernate连接数据库
    
    
    @Test
    public void test() 
    {
        //1获取配置文件
        Configuration cfg=new Configuration().configure();
        
        
        //2注册配置
        ServiceRegistry sr=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
        
        
        //3获取SessionFactory(相当于JDBC)
        SessionFactory sf =cfg.buildSessionFactory(sr);
        
        System.out.println(sf);
        
        //4产生Session
        Session se=sf.openSession();
        
        //5启动事务
         ts=se.beginTransaction();
        
        //6操作事务
        //添加数据
         //实例化的新对象处于临时状态
        User u1=new User();
        u1.setBirthday(new Date());
        u1.setMoney(2000);
        u1.setPassword("123456");
        u1.setUserName("测试一");
        
        //保存数据
        //通过save方法把对象从临时状态转成持久化状态
        se.save(u1);
        System.out.println(u1);
        
    }
    //测试查询方法
    @Test
    public void test1()
    {
        //查询数据
        //提供两个参数:
        //1需要返回哪一个持久化类的实例
        //2实例的标识(数据的主键值)
        //通过Session的get方法获得的对象处于持久化状态
        User u2=(User)se.get(User.class,3);
        
        u2.setUserName("修改的");
        
        System.out.println(u2);
        
        //删除
        se.delete(u2);//使持久化对象进入删除状态
    }
    @Test
    public void test2()
    {
        User u1=(User)se.get(User.class, 4);
        
        System.out.println(u1);
        
        User u2=(User)se.get(User.class, 4);//立即加载数据
        System.out.println(u2);
    }
    @Test
    public void test3()
    {
        User u1=(User)se.load(User.class, 4);//延时加载  懒加载
        System.out.println("dsad");
        System.out.println(u1);//当使用时才加载
    }
    
    //测试游离状态
    
    
    @Test
    public void test4()
    {
        //得到持久化状态的对象
        User u1=(User)se.get(User.class,4);
        System.out.println("u1="+u1);
        //关闭session 
        se.close();
        
        //使u1进入游离状态
        u1.setUserName("测试游离");
        //把OID置成null
        u1.setUserID(null);
        
        
        //重新创建session
        se=sf.openSession();
        //重新开启事务
        ts=se.beginTransaction();
        
        
        se.saveOrUpdate(u1);
        System.out.println(u1);     
    }
    //测试HQL
    @Test
    public void test5()
    {
        //使用HQL
        //1创建Query对象
        Query qu=se.createQuery("from User where userID >? and "
                + "userName like '测试%' order by userID");
        
        //设置占位符
        qu.setInteger(0, 10);
                
        
        //执行查询
        List<User> lu=qu.list();
        
        //方法链调用
        //lu=se.createQuery("from User where userID >?").setInteger(0, 10).list();
        
        
        for(User e:lu)
        {
            System.out.println(e);
        }
    }
    //测试分页
    @Test
    public void test6()
    {
        //设置开始行号:页码=2
        //(页码-1)*每页行数
        List<User> lu=se.createQuery("from User order by userID")
                .setMaxResults(5)
                .setFirstResult(5)
                .list();
    
    
        for(User e:lu)
        {
            System.out.println(e);
        }
    
    }
    //分组查询
    @Test
    public void test7()
    {
        List<Object>lo=se.createQuery("select userName from User group by userName").list();
    
        for(Object o:lo)
        {
        System.out.println(o);
        }
    
    }
    //测试投影查询
    @Test
    public void test8()
    {
        List<Object[]>lo=se.createQuery("select userID,userName from User").list();
        
        for(Object[] o:lo)
        {
            System.out.println(o[0]+" "+o[1]);
        }
        System.out.println("dasdasadfa");
        //返回持久化对象的集合
        List<User> lu=se.createQuery("select new User(userID,userName) from User").list();
    
        for(User u:lu)
        {
            System.out.println(u);
            
        }
    
    }
    //测试多对一
    @Test
    public void test10()
    {
        Course cs=(Course)se.get(Course.class,"9-888");
                System.out.println(cs);
    }
    //测试一对多
    @Test
    public void test11()
    {
        Teacher  tc=(Teacher)se.get(Teacher.class,"831");
        System.out.println(tc);
    }

    }

  • 相关阅读:
    task打印执行结果
    九宫格----记网易游戏2015年研发类笔试题
    第一篇博客
    http超时机制
    SVN错误解决办法
    FFmpeg源码编译
    闲来无事——第一弹 Java基础 基本数据类型
    一个比较好的图标搜索网站
    JS 跑马灯
    Jquery
  • 原文地址:https://www.cnblogs.com/HRZJ/p/6064316.html
Copyright © 2011-2022 走看看