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