hibernate 全面学习【hibernate hsql语句学习 】


原文出处:http://penghao122.iteye.com/blog/211581

    博客分类: 
  • Hibernate
Hibernate junit SQL C C++ 
Hibernate hql 

* 注意hql的大小写敏感性 

1、实体对象的查询,查询的是实体对象的数据【重要】 
  * n+1问题,在默认配置的情况下,使用query.iterate()操作,有可能有n+1问题,所谓 
  n+1,指在查询对象数据的时候,发出了n+1条查询语句。 
  1:首先发出了一条查询语句,查询对象的id列表 
  n:在迭代访问每个对象的时候,如果缓存中没有对象数据,Hibernate会在此发出一条查询语句, 
     查询相应的对象 
  
  *List操作与Iterate操作的区别 
   list,每次都会发出一条查询语句,查询所有的对象 
   iterate,首先发出一条查询语句,查询对象的id列表,然后根据缓存情况,决定 
    是否发出更多的查询语句,来查询对象数据 
   参见:SimpleObjectQueryTest2.java 
   
2、简单属性查询 
  * 单个属性查询,返回的结果集属性的列表,其元素和属性的类型一致 
  * 多个属性查询,返回的结果集是数组类型,数组的长度和查询的属性数量相关,数组中元素的类型与相应的属性类型相同 
  参见:SimplePropertyQueryTest.java 
  
3、条件查询【重要】                  
  * 可以拼字符串的形式传递参数 
  * 可以用过?来传递参数(注意索引值是从0开始的,跟jdbc不同,jdbc是从1开始的) 
  * 可以通过 :参数名 来传递参数(即命名参数方式) 
  * 如果对应的参数值是多个,可以调用setParamterList()方法开传递 
  * 在HQL中可以使用数据库的函数,如date_format() 
  参见:SimpleConditionQueryTest.java 

4、hibernate也支持直接使用原生sql进行查询 
  参见:SqlQueryTest.java 
  
5、外置的命名查询 
  * 在映射文件中通过标签定义hql 
  * 在程序中使用session.getNameQuery()方法获得这个查询 
  参见:Student.hbm.xml,NameQueryTest.java 
  
6、查询过滤器 
  * 定义过滤器参数 
  * 在类映射文件中使用这些参数 
  * 在session中启用过滤器 
  参见:Student.hbm.xml,FilterQueryTest.java 
  
7、对象导航查询,在HQL语句中,可以使用.的方式进行对象导航【重要】 
   参见:ObjectNavQueryTest.java 

8、连接查询(在对象里可以直接导航)【重要】 
  * 内连接 
  * 外连接(左连接/右连接)   
   参见:JionQueryTest 
   
9、统计查询 
  参见:StatQueryTest.java 
  
10、分页查询【重要】 
  * 通过query接口中的setFirstResult()和setMaxResults() 进行分页 
  参见:PageQueryTest 
  
11、DML风格的操作(尽量)  
  

Java代码   收藏代码
  1. package com.bjsxt.hibernate;  
  2.   
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5.   
  6. import org.hibernate.Session;  
  7.   
  8. import junit.framework.TestCase;  
  9.   
  10. public class JionQueryTest extends TestCase {  
  11.       
  12.     /** 
  13.      * 内连接,从Student连接到Classes 
  14.      * 
  15.      */  
  16.     public void testQuery1() {  
  17.         Session session = null;  
  18.         try {  
  19.             session = HibernateUtils.getSession();  
  20.               
  21.             List students = session.createQuery("select c.name, s.name from Student s join s.classes c ")  
  22.             .list();  
  23.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  24.                 Object[] obj = (Object[])iter.next();  
  25.                 System.out.println(obj[0] + ", " + obj[1]);  
  26.             }  
  27.         }catch(Exception e) {  
  28.             e.printStackTrace();  
  29.         }finally {  
  30.             HibernateUtils.closeSession(session);  
  31.         }     
  32.     }  
  33.       
  34.     /** 
  35.      * 左外连接 
  36.      * 
  37.      */  
  38.     public void testQuery2() {  
  39.         Session session = null;  
  40.         try {  
  41.             session = HibernateUtils.getSession();  
  42.               
  43.             List students = session.createQuery("select c.name, s.name from Classes c left join c.students s ")  
  44.             .list();  
  45.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  46.                 Object[] obj = (Object[])iter.next();  
  47.                 System.out.println(obj[0] + ", " + obj[1]);  
  48.             }  
  49.         }catch(Exception e) {  
  50.             e.printStackTrace();  
  51.         }finally {  
  52.             HibernateUtils.closeSession(session);  
  53.         }     
  54.     }  
  55.   
  56.     /** 
  57.      * 右外连接 
  58.      * 
  59.      */   
  60.     public void testQuery3() {  
  61.         Session session = null;  
  62.         try {  
  63.             session = HibernateUtils.getSession();  
  64.               
  65.             List students = session.createQuery("select c.name, s.name from Classes c right join c.students s ")  
  66.             .list();  
  67.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  68.                 Object[] obj = (Object[])iter.next();  
  69.                 System.out.println(obj[0] + ", " + obj[1]);  
  70.             }  
  71.         }catch(Exception e) {  
  72.             e.printStackTrace();  
  73.         }finally {  
  74.             HibernateUtils.closeSession(session);  
  75.         }     
  76.     }  
  77.       
  78.     /** 
  79.      * 内连接,从Classes连接到Student 
  80.      * 
  81.      */  
  82.     private void testQuery4() {  
  83.           
  84.     }  
  85. }  
  86.   
  87.   
  88. package com.bjsxt.hibernate;  
  89.   
  90. import java.util.Iterator;  
  91. import java.util.List;  
  92.   
  93. import org.hibernate.Session;  
  94.   
  95. import junit.framework.TestCase;  
  96.   
  97. /** 
  98.  * 外置的命名查询测试 
  99.  * @author Administrator 
  100.  * 
  101.  */  
  102. public class NameQueryTest extends TestCase {  
  103.       
  104.     public void testQuery1() {  
  105.         Session session = null;  
  106.         try {  
  107.             session = HibernateUtils.getSession();  
  108.               
  109.             List students =  session.getNamedQuery("searchStudents")  
  110.                                     .setParameter(010)  
  111.                                     .list();  
  112.   
  113.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  114.                 Student student = (Student)iter.next();  
  115.                 System.out.println(student.getName());  
  116.             }  
  117.         }catch(Exception e) {  
  118.             e.printStackTrace();  
  119.         }finally {  
  120.             HibernateUtils.closeSession(session);  
  121.         }                 
  122.     }     
  123. }  
  124.   
  125.   
  126.   
  127. package com.bjsxt.hibernate;  
  128.   
  129. import java.util.Iterator;  
  130. import java.util.List;  
  131.   
  132. import org.hibernate.Session;  
  133.   
  134. import junit.framework.TestCase;  
  135.   
  136. /** 
  137.  * 对象导航查询测试 
  138.  * @author Administrator 
  139.  * 
  140.  */  
  141. public class ObjectNavQueryTest extends TestCase {  
  142.   
  143.     public void testQuery1() {  
  144.         Session session = null;  
  145.         try {  
  146.             session = HibernateUtils.getSession();  
  147.               
  148.             List students = session.createQuery("select s.name from Student s where s.classes.id < 2").list();  
  149.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  150.                 String name = (String)iter.next();    
  151.                 System.out.println(name);  
  152.             }  
  153.         }catch(Exception e) {  
  154.             e.printStackTrace();  
  155.         }finally {  
  156.             HibernateUtils.closeSession(session);  
  157.         }     
  158.     }     
  159. }  
  160.   
  161.   
  162.   
  163.   
  164. package com.bjsxt.hibernate;  
  165.   
  166. import java.util.Iterator;  
  167. import java.util.List;  
  168.   
  169. import org.hibernate.Query;  
  170. import org.hibernate.Session;  
  171.   
  172. import junit.framework.TestCase;  
  173.   
  174. /** 
  175.  * 分页查询测试 
  176.  * @author Administrator 
  177.  * 
  178.  */  
  179. public class PageQueryTest extends TestCase {  
  180.       
  181.     public void testQuery1() {  
  182.         Session session = null;  
  183.         try {  
  184.             session = HibernateUtils.getSession();  
  185.             Query query = session.createQuery("from Student");  
  186.             query.setFirstResult(27);  
  187.             query.setMaxResults(5);  
  188.             List students = query.list();  
  189.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  190.                 Student student = (Student)iter.next();  
  191.                 System.out.println(student.getId() + ", " + student.getName());  
  192.             }  
  193.         }catch(Exception e) {  
  194.             e.printStackTrace();  
  195.         }finally {  
  196.             HibernateUtils.closeSession(session);  
  197.         }     
  198.     }  
  199. }  
  200.   
  201.   
  202.   
  203. package com.bjsxt.hibernate;  
  204.   
  205. import java.text.SimpleDateFormat;  
  206. import java.util.Iterator;  
  207. import java.util.List;  
  208.   
  209. import org.hibernate.Query;  
  210. import org.hibernate.Session;  
  211.   
  212. import junit.framework.TestCase;  
  213.   
  214. public class SimpleConditionQueryTest extends TestCase {  
  215.   
  216.     public void testQuery1() {  
  217.         Session session = null;  
  218.         try {  
  219.             session = HibernateUtils.getSession();  
  220.               
  221.             //条件查询,拼字符串  
  222.             List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name LIKE '%1%'")  
  223.             .list();  
  224.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  225.                 Object[] obj = (Object[])iter.next();  
  226.                 System.out.println(obj[0] + ", " + obj[1]);  
  227.             }  
  228.         }catch(Exception e) {  
  229.             e.printStackTrace();  
  230.         }finally {  
  231.             HibernateUtils.closeSession(session);  
  232.         }                 
  233.     }  
  234.       
  235.     public void testQuery2() {  
  236.         Session session = null;  
  237.         try {  
  238.             session = HibernateUtils.getSession();  
  239.               
  240.             //条件查询,使用 ? 的方式传递参数  
  241.             Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name LIKE ?");  
  242.               
  243.             //传递参数  
  244.             //参数的索引是从0开始的  
  245.             //传递的字符串,无需用''单引号括起来  
  246.             query.setParameter(0"%1%");  
  247.               
  248.             List students = query.list();   
  249.               
  250.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  251.                 Object[] obj = (Object[])iter.next();  
  252.                 System.out.println(obj[0] + ", " + obj[1]);  
  253.             }  
  254.         }catch(Exception e) {  
  255.             e.printStackTrace();  
  256.         }finally {  
  257.             HibernateUtils.closeSession(session);  
  258.         }                 
  259.     }  
  260.   
  261.     public void testQuery3() {  
  262.         Session session = null;  
  263.         try {  
  264.             session = HibernateUtils.getSession();  
  265.               
  266.             //条件查询,使用 :参数名称 的方式传递参数  
  267.             Query query = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name LIKE :myname");  
  268.               
  269.             //传递参数  
  270.             query.setParameter("myname""%1%");  
  271.               
  272.             List students = query.list();   
  273.               
  274.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  275.                 Object[] obj = (Object[])iter.next();  
  276.                 System.out.println(obj[0] + ", " + obj[1]);  
  277.             }  
  278.         }catch(Exception e) {  
  279.             e.printStackTrace();  
  280.         }finally {  
  281.             HibernateUtils.closeSession(session);  
  282.         }                 
  283.     }  
  284.       
  285.     public void testQuery4() {  
  286.         Session session = null;  
  287.         try {  
  288.             session = HibernateUtils.getSession();  
  289.               
  290.             //条件查询,因为setParameter方法返回Query接口,所以可以用省略的方式来查询  
  291.             List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.name LIKE :myname and s.id = :myid")  
  292.             .setParameter("myname""%1%")  
  293.             .setParameter("myid"15)  
  294.             .list();  
  295.               
  296.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  297.                 Object[] obj = (Object[])iter.next();  
  298.                 System.out.println(obj[0] + ", " + obj[1]);  
  299.             }  
  300.         }catch(Exception e) {  
  301.             e.printStackTrace();  
  302.         }finally {  
  303.             HibernateUtils.closeSession(session);  
  304.         }                 
  305.     }  
  306.   
  307.     public void testQuery5() {  
  308.         Session session = null;  
  309.         try {  
  310.             session = HibernateUtils.getSession();  
  311.               
  312.             //条件查询,支持in,需要用setParameterList()进行参数传递  
  313.             List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE s.id in(:myids)")  
  314.             .setParameterList("myids"new Object[]{135})  
  315.             .list();  
  316.               
  317.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  318.                 Object[] obj = (Object[])iter.next();  
  319.                 System.out.println(obj[0] + ", " + obj[1]);  
  320.             }  
  321.         }catch(Exception e) {  
  322.             e.printStackTrace();  
  323.         }finally {  
  324.             HibernateUtils.closeSession(session);  
  325.         }                 
  326.     }  
  327.   
  328.     public void testQuery6() {  
  329.         Session session = null;  
  330.         try {  
  331.             session = HibernateUtils.getSession();  
  332.               
  333.             //条件查询,支持in,需要用setParameter进行参数传递  
  334. //          List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE " +  
  335. //                  "date_format(s.createTime, '%Y-%m') =?")  
  336. //          .setParameter(0, "2007-01")  
  337. //          .list();  
  338.   
  339.             List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE " +  
  340.             "substring(s.createTime, 1, 7) =?")  
  341.             .setParameter(0"2007-01")  
  342.             .list();  
  343.               
  344.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  345.                 Object[] obj = (Object[])iter.next();  
  346.                 System.out.println(obj[0] + ", " + obj[1]);  
  347.             }  
  348.         }catch(Exception e) {  
  349.             e.printStackTrace();  
  350.         }finally {  
  351.             HibernateUtils.closeSession(session);  
  352.         }                 
  353.     }  
  354.   
  355.     public void testQuery7() {  
  356.         Session session = null;  
  357.         try {  
  358.             session = HibernateUtils.getSession();  
  359.               
  360.             //条件查询,支持in,需要用setParameter进行参数传递  
  361.   
  362.             SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
  363.             List students = session.createQuery("SELECT s.id, s.name FROM Student s WHERE " +  
  364.             "s.createTime between ? and ? ")  
  365.             .setParameter(0, format.parseObject("2007-01-01"))  
  366.             .setParameter(1, format.parseObject("2007-03-01"))  
  367.             .list();  
  368.               
  369.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  370.                 Object[] obj = (Object[])iter.next();  
  371.                 System.out.println(obj[0] + ", " + obj[1]);  
  372.             }  
  373.         }catch(Exception e) {  
  374.             e.printStackTrace();  
  375.         }finally {  
  376.             HibernateUtils.closeSession(session);  
  377.         }                 
  378.     }  
  379.       
  380. }  
  381.   
  382.   
  383.   
  384. package com.bjsxt.hibernate;  
  385.   
  386. import java.util.Iterator;  
  387. import java.util.List;  
  388.   
  389. import org.hibernate.Query;  
  390. import org.hibernate.Session;  
  391.   
  392. import junit.framework.TestCase;  
  393.   
  394. /** 
  395.  * 对象查询中的list操作和iterator操作的差异 
  396.  * @author Administrator 
  397.  * 
  398.  */  
  399. public class SimpleObjectQueryTest2 extends TestCase {  
  400.       
  401.     public void testQueryWithListMethod() {  
  402.             Session session = null;  
  403.             try {  
  404.                 session = HibernateUtils.getSession();  
  405.                   
  406.                 /** 
  407.                  * 将发出一条查询语句,获取Student的集合数据 
  408.                  * select student0_.id as id1_, student0_.name as name1_,  
  409.                  * student0_.createTime as createTime1_, student0_.classid as classid1_  
  410.                  * from t_student student0_ 
  411.                  */  
  412.                 List students = session.createQuery("from Student").list();  
  413.                 for (Iterator iter = students.iterator();iter.hasNext();) {  
  414.                     Student student = (Student)iter.next();  
  415.                     System.out.println(student.getName());  
  416.                 }  
  417.             }catch(Exception e) {  
  418.                 e.printStackTrace();  
  419.             }finally {  
  420.                 HibernateUtils.closeSession(session);  
  421.             }     
  422.         }         
  423.       
  424.     public void testQueryWithIterateMethod() {  
  425.         Session session = null;  
  426.         try {  
  427.             session = HibernateUtils.getSession();  
  428.               
  429.             //先发出查询id的列表语句  
  430.             //select student0_.id as col_0_0_ from t_student student0_  
  431.             //再依次发出查询对象的sql(根据id)  
  432.             //select student0_.id as id1_0_, student0_.name as name1_0_,   
  433.             //student0_.createTime as createTime1_0_, student0_.classid as classid1_0_   
  434.             //from t_student student0_ where student0_.id=?  
  435.             Query query = session.createQuery("from Student");  
  436.             Iterator students = query.iterate();  
  437.             while (students.hasNext()) {  
  438.                 Student student = (Student)students.next();  
  439.                 System.out.println(student.getName());  
  440.             }  
  441.         }catch(Exception e) {  
  442.             e.printStackTrace();  
  443.         }finally {  
  444.             HibernateUtils.closeSession(session);  
  445.         }     
  446.     }     
  447.       
  448.     public void testQueryWithListAndIterate() {  
  449.         Session session = null;  
  450.         try {  
  451.             session = HibernateUtils.getSession();  
  452.             Query query = session.createQuery("from Student");  
  453.             List students = query.list();  
  454.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  455.                 Student student = (Student)iter.next();  
  456.                 System.out.println(student.getName());  
  457.             }  
  458.               
  459.             //如果使用iterate进行查询  
  460.             //因为list操作已经将对象加载到了session的一级缓存,所以  
  461.             //再使用iterate操作的时候,它先会发出查询id列表的查询语句  
  462.             //再根据id到缓存中获取相关的数据  
  463.             //只有再缓存中找不到相关数据的情况下,才会再次发出sql进行查询  
  464.             Iterator studentsIter = query.iterate();  
  465.             while (studentsIter.hasNext()) {  
  466.                 Student student = (Student)studentsIter.next();  
  467.                 System.out.println(student.getName());  
  468.             }  
  469.         }catch(Exception e) {  
  470.             e.printStackTrace();  
  471.         }finally {  
  472.             HibernateUtils.closeSession(session);  
  473.         }     
  474.           
  475.     }  
  476.       
  477.     public void testQueryWithListAndList() {  
  478.         Session session = null;  
  479.         try {  
  480.             session = HibernateUtils.getSession();  
  481.             Query query = session.createQuery("from Student");  
  482.             List students = query.list();  
  483.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  484.                 Student student = (Student)iter.next();  
  485.                 System.out.println(student.getName());  
  486.             }  
  487.               
  488.             //再次发出发出sql  
  489.             //在默认情况下,list每次都会向数据库发出查询对象数据的sql,  
  490.             //除非配置了查询缓存,所以下面的list()操作,虽然在session已经有了  
  491.             //对象缓存数据,但list()并不理会这个中缓存,而再次发出查询语句进行查询  
  492.             students = query.list();  
  493.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  494.                 Student student = (Student)iter.next();  
  495.                 System.out.println(student.getName());  
  496.             }  
  497.         }catch(Exception e) {  
  498.             e.printStackTrace();  
  499.         }finally {  
  500.             HibernateUtils.closeSession(session);  
  501.         }     
  502.     }  
  503.       
  504.       
  505. }  
  506.   
  507.   
  508. package com.bjsxt.hibernate;  
  509.   
  510. import java.util.Iterator;  
  511. import java.util.List;  
  512.   
  513. import org.hibernate.Query;  
  514. import org.hibernate.Session;  
  515.   
  516. import junit.framework.TestCase;  
  517.   
  518. /** 
  519.  * 对象查询的基本测试 
  520.  * @author Administrator 
  521.  * 
  522.  */  
  523. public class SimpleObjectQueryTest extends TestCase {  
  524.       
  525.     public void testQuery1() {  
  526.         Session session = null;  
  527.         try {  
  528.             session = HibernateUtils.getSession();  
  529.               
  530.             //可以忽略select语句  
  531.             List students = session.createQuery("from Student").list();  
  532.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  533.                   
  534.                 //返回值是Student对象  
  535.                 Student student = (Student)iter.next();  
  536.                 System.out.println(student.getName());  
  537.             }  
  538.         }catch(Exception e) {  
  539.             e.printStackTrace();  
  540.         }finally {  
  541.             HibernateUtils.closeSession(session);  
  542.         }     
  543.     }  
  544.       
  545.     public void testQuery2() {  
  546.         Session session = null;  
  547.         try {  
  548.             session = HibernateUtils.getSession();  
  549.               
  550.             //可以忽略select语句,表可以加别名  
  551.             List students = session.createQuery("from Student s").list();  
  552.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  553.                   
  554.                 //返回值是Student对象  
  555.                 Student student = (Student)iter.next();  
  556.                 System.out.println(student.getName());  
  557.             }  
  558.         }catch(Exception e) {  
  559.             e.printStackTrace();  
  560.         }finally {  
  561.             HibernateUtils.closeSession(session);  
  562.         }     
  563.     }  
  564.   
  565.     public void testQuery3() {  
  566.         Session session = null;  
  567.         try {  
  568.             session = HibernateUtils.getSession();  
  569.               
  570.             //可以忽略select语句,表可以加别名  
  571.             List students = session.createQuery("from Student as s").list();  
  572.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  573.                   
  574.                 //返回值是Student对象  
  575.                 Student student = (Student)iter.next();  
  576.                 System.out.println(student.getName());  
  577.             }  
  578.         }catch(Exception e) {  
  579.             e.printStackTrace();  
  580.         }finally {  
  581.             HibernateUtils.closeSession(session);  
  582.         }     
  583.     }  
  584.   
  585.     public void testQuery4() {  
  586.         Session session = null;  
  587.         try {  
  588.             session = HibernateUtils.getSession();  
  589.               
  590.             //使用select关键字时,必须定义别名  
  591.             List students = session.createQuery("select s from Student s").list();  
  592.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  593.                   
  594.                 //返回值是Student对象  
  595.                 Student student = (Student)iter.next();  
  596.                 System.out.println(student.getName());  
  597.             }  
  598.         }catch(Exception e) {  
  599.             e.printStackTrace();  
  600.         }finally {  
  601.             HibernateUtils.closeSession(session);  
  602.         }     
  603.     }  
  604.   
  605.     public void testQuery5() {  
  606.         Session session = null;  
  607.         try {  
  608.             session = HibernateUtils.getSession();  
  609.               
  610.             //不支持select * ....这样的HQL查询语句  
  611.             List students = session.createQuery("select * from Student").list();  
  612.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  613.                   
  614.                 //返回值是Student对象  
  615.                 Student student = (Student)iter.next();  
  616.                 System.out.println(student.getName());  
  617.             }  
  618.         }catch(Exception e) {  
  619.             e.printStackTrace();  
  620.         }finally {  
  621.             HibernateUtils.closeSession(session);  
  622.         }     
  623.     }  
  624. }  
  625.   
  626.   
  627. package com.bjsxt.hibernate;  
  628.   
  629. import java.util.Iterator;  
  630. import java.util.List;  
  631.   
  632. import org.hibernate.Session;  
  633.   
  634. import junit.framework.TestCase;  
  635.   
  636. /** 
  637.  * 简单的属性查询 
  638.  * @author Administrator 
  639.  * 
  640.  */  
  641. public class SimplePropertyQueryTest extends TestCase {  
  642.   
  643.     /** 
  644.      * 单一属性查询 
  645.      * 
  646.      */  
  647.     public void testQuery1() {  
  648.         Session session = null;  
  649.         try {  
  650.             session = HibernateUtils.getSession();  
  651.               
  652.             List students = session.createQuery("select name from Student").list();  
  653.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  654.                 String name = (String)iter.next();  
  655.                 System.out.println(name);  
  656.             }  
  657.         }catch(Exception e) {  
  658.             e.printStackTrace();  
  659.         }finally {  
  660.             HibernateUtils.closeSession(session);  
  661.         }             
  662.     }  
  663.       
  664.     /** 
  665.      * 多个属性的查询 
  666.      * 
  667.      */  
  668.     public void testQuery2() {  
  669.         Session session = null;  
  670.         try {  
  671.             session = HibernateUtils.getSession();  
  672.               
  673.             //查询多个属性,其集合元素是对象数组  
  674.             //数组元素的类型,跟实体类的属性的类型相关  
  675.             List students = session.createQuery("select id, name from Student").list();  
  676.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  677.                 Object[] obj = (Object[])iter.next();  
  678.                 System.out.println(obj[0] + ", " + obj[1]);  
  679.             }  
  680.         }catch(Exception e) {  
  681.             e.printStackTrace();  
  682.         }finally {  
  683.             HibernateUtils.closeSession(session);  
  684.         }             
  685.     }  
  686.   
  687.     public void testQuery3() {  
  688.         Session session = null;  
  689.         try {  
  690.             session = HibernateUtils.getSession();  
  691.               
  692.             //查询多个属性,其集合元素是对象数组  
  693.             //数组元素的类型,跟实体类的属性的类型相关  
  694.             //更参见的用法,给对象起个别名,然后通过别名来引用属性值  
  695.             List students = session.createQuery("select s.id, s.name from Student s").list();  
  696.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  697.                 Object[] obj = (Object[])iter.next();  
  698.                 System.out.println(obj[0] + ", " + obj[1]);  
  699.             }  
  700.         }catch(Exception e) {  
  701.             e.printStackTrace();  
  702.         }finally {  
  703.             HibernateUtils.closeSession(session);  
  704.         }             
  705.     }  
  706.       
  707. }  
  708.   
  709.   
  710.   
  711. package com.bjsxt.hibernate;  
  712.   
  713. import java.util.Iterator;  
  714. import java.util.List;  
  715.   
  716. import org.hibernate.SQLQuery;  
  717. import org.hibernate.Session;  
  718.   
  719. import junit.framework.TestCase;  
  720.   
  721. /** 
  722.  * 嵌入原生sql测试 
  723.  * @author Administrator 
  724.  * 
  725.  */  
  726. public class SqlQueryTest extends TestCase {  
  727.       
  728.     public void testQuery1() {  
  729.         Session session = null;  
  730.         try {  
  731.             session = HibernateUtils.getSession();  
  732.               
  733.             SQLQuery sqlQuery = session.createSQLQuery("select * from t_student");  
  734.             List students = sqlQuery.list();  
  735.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  736.                 Object[] obj = (Object[])iter.next();  
  737.                 System.out.println(obj[0] + ", " + obj[1]);  
  738.             }  
  739.         }catch(Exception e) {  
  740.             e.printStackTrace();  
  741.         }finally {  
  742.             HibernateUtils.closeSession(session);  
  743.         }                 
  744.     }  
  745.       
  746. }  
  747.   
  748.   
  749.   
  750. package com.bjsxt.hibernate;  
  751.   
  752. import java.util.Iterator;  
  753. import java.util.List;  
  754.   
  755. import org.hibernate.Session;  
  756.   
  757. import junit.framework.TestCase;  
  758.   
  759. public class StatQueryTest extends TestCase {  
  760.       
  761.     public void testQuery1() {  
  762.         Session session = null;  
  763.         try {  
  764.             session = HibernateUtils.getSession();  
  765.               
  766.             List students = session.createQuery("select count(*) from Student").list();  
  767.             Long count = (Long)students.get(0);  
  768.             System.out.println(count);  
  769. //          for (Iterator iter = students.iterator();iter.hasNext();) {  
  770. //              Long count = (Long)iter.next();   
  771. //              System.out.println(count);  
  772. //          }  
  773.         }catch(Exception e) {  
  774.             e.printStackTrace();  
  775.         }finally {  
  776.             HibernateUtils.closeSession(session);  
  777.         }     
  778.     }     
  779.       
  780.     public void testQuery2() {  
  781.         Session session = null;  
  782.         try {  
  783.             session = HibernateUtils.getSession();  
  784.               
  785.             List students = session.createQuery("select c.id, c.name, count(s) from Student s join " +  
  786.                     "s.classes c group by c.id, c.name").list();  
  787.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  788.                 Object[] obj = (Object[])iter.next();  
  789.                 System.out.println(obj[0] + ",  " + obj[1] + ", " + obj[2]);  
  790.             }  
  791.         }catch(Exception e) {  
  792.             e.printStackTrace();  
  793.         }finally {  
  794.             HibernateUtils.closeSession(session);  
  795.         }     
  796.     }     
  797.       
  798. }  
  799.   
  800.   
  801. package com.bjsxt.hibernate;  
  802.   
  803. import java.util.Iterator;  
  804. import java.util.List;  
  805.   
  806. import org.hibernate.Session;  
  807.   
  808. import junit.framework.TestCase;  
  809.   
  810. /** 
  811.  * 查询过滤器测试 
  812.  * @author Administrator 
  813.  * 
  814.  */  
  815. public class FilterQueryTest extends TestCase {  
  816.       
  817.     public void testQuery1() {  
  818.         Session session = null;  
  819.         try {  
  820.             session = HibernateUtils.getSession();  
  821.               
  822.             session.enableFilter("idfilter")  
  823.                    .setParameter("myid"10);  
  824.               
  825.             List students = session.createQuery("from Student")  
  826.             .list();  
  827.               
  828.             for (Iterator iter = students.iterator();iter.hasNext();) {  
  829.                   
  830.                 Student student = (Student)iter.next();  
  831.                 System.out.println(student.getName());  
  832.             }  
  833.         }catch(Exception e) {  
  834.             e.printStackTrace();  
  835.         }finally {  
  836.             HibernateUtils.closeSession(session);  
  837.         }     
  838.     }  
  839.       
  840. }  
  841.   
  842.   
  843. package com.bjsxt.hibernate;  
  844.   
  845. import java.util.Iterator;  
  846. import java.util.List;  
  847.   
  848. import org.hibernate.Query;  
  849. import org.hibernate.Session;  
  850.   
  851. import junit.framework.TestCase;  
  852.   
  853. public class DMLQueryTest extends TestCase {  
  854.       
  855.     public void testQuery1() {  
  856.         Session session = null;  
  857.         try {  
  858.             session = HibernateUtils.getSession();  
  859.             session.beginTransaction();  
  860.             /** 
  861.              * 使用这种风格的操作,将会造成内存中的对象与数据库中的数据不同步,所以 
  862.              * 建议尽量少使用 
  863.              */  
  864.             Query updateQuery =  session.createQuery("update Student a set a.name=? where a.id in(:ids)");  
  865.             updateQuery.setParameter(0"张三");  
  866.             updateQuery.setParameterList("ids"new Object[]{12});  
  867.             updateQuery.executeUpdate();  
  868.             session.getTransaction().commit();  
  869.         }catch(Exception e) {  
  870.             e.printStackTrace();  
  871.             session.getTransaction().rollback();  
  872.         }finally {  
  873.             HibernateUtils.closeSession(session);  
  874.         }                 
  875.     }  
  876. }  

你可能感兴趣的:(数据库,hibernate,数据库管理工具,分页,substring)