zoukankan      html  css  js  c++  java
  • hibernate 实现分页查询语句、单条查询语句、多条查询语句、修改、删除语句

    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.Student;
    import com.hanqi.entity.Teacher;
    import com.hanqi.entity.User;
    
    public class Test01 {
        private ServiceRegistry sr=null;
        private SessionFactory sf=null;
        private Session se=null;
        private Transaction ts=null;
        //在测试用例方法类执行之前,自动执行的方法
        //一般用来初始化公用的对象
        //前置方法
        @Before
        public void init()
        {
            
            Configuration cfg=new Configuration().configure();
            
            //2、注册配置
             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 destory()
        {
            ts.commit();
            se.close();
            sf.close();
            
        }
        
        //测试Hibernate连接
        @Test
        public void test() {
        
            //6、操作数据库
            //添加数据
            //实例化的新对象,处于临时状态,
            User u1=new User();
            u1.setBirthday(new Date());
            u1.setMoney(2000);
            u1.setPassword("123456");
            u1.setName("测试1");
            //u1.setUserID(9);//自然主键
            //保存数据
            //通过save方法把对象从临时状态转成持久化状态
            se.save(u1);
            System.out.println(u1);            
        }
        //测试查询的方法
        @Test
        public void test1()
        {
            //查询数据
            //提供两个参数
            //需要返回哪一个持久化类的实例
            //实例的标识(数据的主键值);
            //通过Session的get方法获得的对象处于持久化状态
        User u2=(User)se.get(User.class,5);
        //修改
        u2.setName("6666");
        
        System.out.println(u2);
        //删除
        //se.delete(u2);//使持久化对象进入删除状态
        }
        @Test
        public void test2()
        {
            User u1=(User)se.get(User.class, 6);//立即加载数据
            System.out.println("get后");
            System.out.println("u1="+u1);
            User u2=(User)se.get(User.class, 6);
            System.out.println("u2="+u2);
        }
        @Test
        public void test3()
        {
            User u1=(User)se.load(User.class, 16);//延迟加载数据/懒加载
            
            System.out.println("load后");
            
            System.out.println("u1="+u1);//当使用时才加载
        }
        //测试游离状态
        @Test
        public void test4()
        {
            //得到处于持久化的对象
            User u1=(User)se.get(User.class, 5);
            System.out.println("u1="+u1);
            //关闭Session
            se.close();
            
            //使u1进入游离状态
            u1.setName("测试游离2343243242");
            //把Oid设置成null;
            u1.setUserID(null);
            System.out.println("重新创建Session和事务....");
            //重新创建Session和事务
            se=sf.openSession();
            //重新开启事务
            ts=se.beginTransaction();
            se.saveOrUpdate(u1);        
            System.out.println("u1="+u1);
            
            
        }
        //测试HQL
        @Test
        public void test5()
        {
            //使用HQL
            //1、创建Query对象
            //user(对象名不是表名)
            Query qu=se.createQuery("from User where userID<? and name =:uname order by userID desc ");
            //设置占位符
            qu.setInteger(0, 5);
            //按参数名方式设置
            qu.setString("uname", "测试1");        
            //执行查询
            List<User>lu=qu.list();
            //方法链调用
            lu=se.createQuery("from User where userID>?").setInteger(0, 100).list();
            for(User u:lu)
            {
                System.out.println(u);
            }
            
        }
        //测试分页
        @Test
        public void test6()
        {
            //设置开始行号,页码=2
            //每页的开始行号=(页码-1)*每页行数
            List<User> lu=se.createQuery("from User order by userID").setMaxResults(5)
                    .setFirstResult(5)
                    .list();        
            for(User u:lu)
            {
                System.out.println(u);
            }    
        }
        //分组查询
        @Test
        public void test7()
        {
            List<Object[]>lo=se.createQuery("select name ,count(1) from User group by name").list();
            
            
            for(Object[] o:lo )
            {
                System.out.println(o[0]);
            }
            
        }
        //测试投影查询
        @Test
        public void test8()
        {
            List<Object[]>lo=se.createQuery("select userID,name from User").list();
            for(Object[]obj:lo)
            {
                System.out.println(obj[0]+" "+obj[1]);
            }
            System.out.println("$$$$$$$$$$$$");
            // 返回持久化对象的集合
            List<User>lu=se.createQuery("select new User(userID,name) from User").list();
            for(User u:lu)
            {
                System.out.println(u);
                se.update(u);
            }
            
        }
        //测试新的类
        @Test
        public void test9()
        {
            Student st=(Student)se.get(Student.class, "108");
            System.out.println(st);
        }
        //测试多对一
        @Test
        public void test10()
        {
            Course cs =(Course)se.get(Course.class, "9-888");
            System.out.println(cs);
        }
        //测试一对多
        @Test
        public void test11()
        {
            Teacher te=(Teacher)se.get(Teacher.class, "831");
            System.out.println(te);
            se.delete(te);
        }
    
    }
  • 相关阅读:
    ## 序列化和反序列化
    C#小型资源管理器
    codeforces #310 div1 B
    codeforces #310 div1 A
    BZOJ 1030 文本生成器
    BZOJ 2806 cheat
    BZOJ 2553 禁忌
    BZOJ 4199 品酒大会
    codeforces #309 div1 D
    codeforces #309 div1 C
  • 原文地址:https://www.cnblogs.com/diaozhaojian/p/6072768.html
Copyright © 2011-2022 走看看