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);
    }

}
原文地址:https://www.cnblogs.com/diaozhaojian/p/6072768.html