HQL入门学习
2019獨角獸企業重金招聘Python工程師標準>>>
package myHibernate; /** 測試簡單的HQL語句* 2010年4月9日 23:36:54* */ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import junit.framework.TestCase; public class HQLTest extends TestCase {public void intiData() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();Classes classes = new Classes();classes.setName("713");session.save(classes);Student student1 = new Student();Student student2 = new Student();student1.setCreateTime(new Date());student2.setCreateTime(new Date());student1.setName("小妹");student2.setName("小桂");student1.setClasses(classes);student2.setClasses(classes);session.save(student1);session.save(student2);tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}public void testHQL_1() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();//小%要加單引號哦//注意返回的結果,此處查詢的是屬性而不是對象,故返回的是與該屬性同類型的屬性列表List studentName = session.createQuery("select name from Student where name like '小%'").list();Iterator iter = studentName.iterator();while(iter.hasNext()){String name = (String) iter.next();System.out.println(name);}tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} //查詢多個屬性public void testHQL_2() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();//如果查詢多個屬性則返回的是由Object數組組成的list——每個數組代表一組屬性。//數組的長度取決于select語句中屬性的個數List studentName = session.createQuery("select id,name from Student").list();Iterator iter = studentName.iterator();while(iter.hasNext()){ Object objects[]= (Object[]) iter.next(); System.out.print("id: "+objects[0]+" "); /* int id =(Integer)objects[0];System.out.println("id+10:"+(id+10));*/System.out.println("name: "+objects[1]); } tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} //查詢多個屬性,并且返回的是一個具體的類型(如過覺得Object不夠對象化的話),而不是Object //注意必須寫構造方法,包括無參的(原則上要求)public void testHQL_3() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();//此時list中為Student對象List studentName = session.createQuery("select new Student(id,name) from Student").list();Iterator iter = studentName.iterator();while(iter.hasNext()){Student student = (Student) iter.next();System.out.println(student.getId()+" "+student.getName()); } tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} //使用別名進行查詢,可以使用as關鍵子也可以不用public void testHQL_4() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();// List studentName = session.createQuery("select s.id,s.name from Student s").list();//使用了as關鍵字List studentName = session.createQuery("select s.id,s.name from Student as s").list();Iterator iter = studentName.iterator();while(iter.hasNext()){ Object objects[]= (Object[]) iter.next(); System.out.print("id: "+objects[0]+" ");System.out.println("name: "+objects[1]); } tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} /**查詢實體對象*可以采用別名也可以不用* */ public void testHQL_5() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();// List studentName = session.createQuery("from Student").list();// List studentName = session.createQuery("from Student s").list();List studentName = session.createQuery("from Student as s").list();Iterator iter = studentName.iterator();while(iter.hasNext()){ Student s =(Student)iter.next();System.out.println(s.getName());} tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} /** 采用select查詢實體的話一定要用別名* */public void testHQL_6() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();// List studentName = session.createQuery("from Student").list();// List studentName = session.createQuery("from Student s").list();List studentName = session.createQuery("select s from Student as s").list();Iterator iter = studentName.iterator();while(iter.hasNext()){ Student s =(Student)iter.next();System.out.println(s.getName());} tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} /** 采用迭代接口(Iterator)進行查詢* 會有"N+1"問題出現:* N:發出N條語句到數據庫進行查詢(每個記錄一條語句)* 1:發出查詢id列表的語句* 原因:迭代接口使用緩存(session),通過查詢出來的id到緩存中去找,找不到就會到數據庫中去找* */ public void testHQL_7() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();// List studentName = session.createQuery("from Student").list();Iterator iter = session.createQuery("select s from Student as s").iterate();while(iter.hasNext()){ Student s =(Student)iter.next();System.out.println(s.getName());} tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} /** 先執行用list接口進行的查詢再執行iterator接口的查詢* */public void testHQL_8() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();// List studentName = session.createQuery("from Student").list();List students = session.createQuery("from Student").list();Iterator iter1 = students.iterator();while(iter1.hasNext()){Student student = (Student) iter1.next();System.out.println(student.getId()+" "+student.getName()); } //由于上面先用list進行了一次查詢,故緩存中存在了這些對象,下面用iterate進行//查詢時到緩存中進行查找,找得到這些對象,故只發出了一條語句:查詢id的語句//總結:在有緩存的前提下使用iterate會提高效率Iterator iter = session.createQuery("select s from Student as s").iterate();while(iter.hasNext()){ Student s =(Student)iter.next();System.out.println(s.getName());} tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} /** 簡單條件查詢* 可以采用?方式進行查詢,代表一個參數* 參數的索引從0開始* */public void testHQL_9() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction(); /* Query query = session.createQuery("select name from Student where name like ?");query.setParameter(0, "%王");Iterator iter = query.list().iterator();*///采用方法鏈的方式:Iterator iter = session.createQuery("select name from Student where name like ?").setParameter(0, "小%").list().iterator();while(iter.hasNext()){System.out.println(iter.next()); } tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} /** 采用:參數名稱的方式* */ public void testHQL_10() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction(); /* Query query = session.createQuery("select name from Student where name like ?");query.setParameter(0, "%王");Iterator iter = query.list().iterator();*///采用方法鏈的方式:Iterator iter = session.createQuery("select name from Student where name like :name").setParameter("name", "小%").list().iterator();while(iter.hasNext()){System.out.println(iter.next()); } tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}}/** 采用:參數名稱的方式2:in方法* */ public void testHQL_11() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction(); Query query = session.createQuery("select name from Student where id in(:myids)");Object ids[] = new Object[]{1,2,3};query.setParameterList("myids",ids);Iterator iter = query.list().iterator();while(iter.hasNext()){System.out.println(iter.next()); } tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} /** 附加日期條件1* */public void testHQL_12() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();Query query = session.createQuery("select name from Student where date_format(createTime,'%Y-%m-%d')=?");query.setParameter(0,"2010-04-10");Iterator iter = query.list().iterator();while(iter.hasNext()){System.out.println(iter.next()); } tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} /* * 附加日期條件2 * 【注意】寫的MM,而不是小寫的mm m是小時中的分鐘數 M是年中的月份 * 【重要】掌握定義日期的方法 * */ public void testHQL_13() {Session session = null;Transaction tx = null;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try {session = HibernateUtils.getSession();tx = session.beginTransaction();Query query = session.createQuery("select name from Student where createTime between ? and ?");//要求參數必須是一個日期Date beginTime=new Date(),endTime=new Date();try {beginTime = sdf.parse("2010-02-10 00:00:00");endTime = sdf.parse("2010-04-10 23:59:59");} catch (ParseException e) {e.printStackTrace();}query.setParameter(0,beginTime);query.setParameter(1,endTime);Iterator iter = query.list().iterator();while(iter.hasNext()){System.out.println(iter.next()); } tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} /** 使用SQL語句* */public void testHQL_14() {Session session = null;Transaction tx = null;try {session = HibernateUtils.getSession();tx = session.beginTransaction();Query query = session.createSQLQuery("select * from student");Iterator iter = query.list().iterator();while(iter.hasNext()){Object obj[] = (Object[]) iter.next();System.out.println(obj[0]+" "+obj[1]);} tx.commit();} catch (HibernateException e) {e.printStackTrace();if (tx != null)tx.rollback();} finally {HibernateUtils.closeSession(session);}} }?版權聲明:本文為博主原創文章,未經博主允許不得轉載。
轉載于:https://my.oschina.net/u/2317688/blog/508883
總結
- 上一篇: 老司机学习MyBatis之如何通过sel
- 下一篇: c语言 大数开方,c语言求一个数的平方根