Hibernate查询示例

来源:互联网 发布:java中的hashcode 编辑:程序博客网 时间:2024/06/04 19:18

1.db.sql

[xhtml] view plaincopy
  1. drop database sun;  
  2. create database sun;  
  3. use sun;  
  4. drop table CUSTOMERS;  
  5. create table CUSTOMERS (  
  6.    ID int  primary key,  
  7.    NAME varchar(15),  
  8.    AGE int  
  9. );  
  10. drop table ORDERS;  
  11. create table ORDERS (  
  12.    ID int  primary key,  
  13.    ORDER_NUMBER varchar(15),  
  14.    PRICE DECIMAL(10,2),  
  15.    CUSTOMER_ID int,  
  16.    foreign key (CUSTOMER_ID) references CUSTOMERS(ID)  
  17. );  
  18. insert into CUSTOMERS(ID,NAME,AGE) values(1,'Tom',21);  
  19. insert into CUSTOMERS(ID,NAME,AGE) values(2,'Mike',24);  
  20. insert into CUSTOMERS(ID,NAME,AGE) values(3,'Jack',30);  
  21. insert into CUSTOMERS(ID,NAME,AGE) values(4,'Linda',25);  
  22. insert into CUSTOMERS(ID,NAME,AGE) values(5,'Tom',25);  
  23.   
  24. insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(1,'Tom_Order001',100,1);  
  25. insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(2,'Tom_Order002',200,1);  
  26. insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(3,'Tom_Order003',300,1);  
  27. insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(4,'Mike_Order001',100,2);  
  28. insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(5,'Jack_Order001',200,3);  
  29. insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(6,'Linda_Order001',100,4);  
  30. insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(7,'UnknownOrder',200,null);  

2.搭建开发环境

使用的是Hibernate3.2

[xhtml] view plaincopy
  1. <?xml version='1.0' encoding='UTF-8'?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.         <!-- 最大连接数 -->  
  8.         <property name="c3p0.max_size">10</property>  
  9.         <!-- 最小连接数 -->  
  10.         <property name="c3p0.min_size">3</property>  
  11.         <!-- 超时时间 单位 秒-->  
  12.         <property name="c3p0.timeout">300</property>  
  13.          <!-- 被缓存的PreparedStatement实例的最大数目 -->  
  14.         <property name="c3p0.max_statements">5</property>  
  15.         <!-- 连接的URL -->  
  16.         <property name="connection.url">jdbc:mysql://localhost:3306/sun</property>  
  17.         <!-- 用户名 -->  
  18.         <property name="connection.username">root</property>  
  19.         <!-- 密码 -->  
  20.         <property name="connection.password">root</property>  
  21.         <!-- 驱动-->  
  22.         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
  23.         <!-- 数据库方言 -->  
  24.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  25.         <!-- 显示SQL语句 -->  
  26.         <property name="show_sql">true</property>  
  27.         <!-- 格式化SQL语句 -->  
  28.         <property name="format_sql">true</property>  
  29.         <!-- 映射文件的地址 -->  
  30.         <mapping resource="org/cdl/domain/Customers.hbm.xml" />  
  31.         <mapping resource="org/cdl/domain/Orders.hbm.xml" />  
  32.     </session-factory>  
  33. </hibernate-configuration>  

3.HibernateUtil(Hibernate工具类)

[java] view plaincopy
  1. package org.cdl.util;  
  2. import org.hibernate.Session;  
  3. import org.hibernate.SessionFactory;  
  4. import org.hibernate.cfg.Configuration;  
  5. public class HibernateUtil {  
  6.       
  7.     /** 
  8.      * 初始化hibernate.cfg.xml文件 
  9.      */  
  10.     private static SessionFactory sf = null;  
  11.     static {  
  12.         Configuration cfg = new Configuration().configure();  
  13.         sf = cfg.buildSessionFactory();  
  14.     }  
  15.     /** 
  16.      * 获取Session对象 
  17.      * @return 获取到的Session对象 
  18.      */  
  19.     public static Session getSession() {  
  20.         return sf.openSession();  
  21.     }  
  22.     /** 
  23.      * 关闭Session对象 
  24.      * @param session 要关闭的Session对象 
  25.      */  
  26.     public static void closeSession(Session session) {  
  27.         if (session != null) {  
  28.             session.close();  
  29.         }  
  30.     }  
  31. }  

 

4.测试代码

[java] view plaincopy
  1. package org.cdl.test;  
  2. import java.util.Iterator;  
  3. import java.util.List;  
  4. import java.util.Set;  
  5. import org.cdl.domain.Customers;  
  6. import org.cdl.domain.Orders;  
  7. import org.cdl.util.HibernateUtil;  
  8. import org.hibernate.Criteria;  
  9. import org.hibernate.Query;  
  10. import org.hibernate.SQLQuery;  
  11. import org.hibernate.Session;  
  12. import org.hibernate.criterion.Example;  
  13. import org.hibernate.criterion.Restrictions;  
  14. public class Demo01 {  
  15.     public static void main(String[] args) {  
  16.         /** 
  17.          * HQL 
  18.          */  
  19.         String hql="from Customers as c where c.name=? and c.age=?";  
  20.         Object []params={"Tom",21};  
  21.         show(findByHQL(hql,params));  
  22.           
  23.         /** 
  24.          * QBC 
  25.          */  
  26.         show(findByQBC());  
  27.           
  28.         /** 
  29.          * QBE 
  30.          */  
  31.         show(findByQBE());  
  32.           
  33.         /** 
  34.          * SQL 
  35.          */  
  36.         String sql="select * from customers where name like ? and age=?";  
  37.         Object[] values={"Tom",21};  
  38.         show(findBySQL(sql, values));  
  39.     }  
  40.       
  41.     //HQL检索方式  
  42.     public static List findByHQL(String hql,Object[]params){  
  43.         Session session=HibernateUtil.getSession();  
  44.         Query query=session.createQuery(hql);  
  45.         if(params!=null){  
  46.             for(int i=0;i<params.length;i++){  
  47.                 query.setParameter(i, params[i]);  
  48.             }  
  49.         }  
  50.         //HibernateUtil.closeSession(session);  
  51.         return query.list();  
  52.     }    
  53.       
  54.     //QBC的检索方式  
  55.     public static List findByQBC(){  
  56.         Session session=HibernateUtil.getSession();  
  57.         Criteria c=session.createCriteria(Customers.class);  
  58.         c.add(Restrictions.like("name","T%"));  
  59.         c.add(Restrictions.eq("age"21));  
  60.         //HibernateUtil.closeSession(session);  
  61.         return c.list();  
  62.           
  63.     }  
  64.       
  65.     //QBE的检索方式  
  66.     public static List findByQBE(){  
  67.         Session session=HibernateUtil.getSession();  
  68.         Criteria c=session.createCriteria(Customers.class);  
  69.         Customers entity=new Customers();  
  70.         entity.setAge(21);  
  71.         entity.setName("Tom");  
  72.         c.add(Example.create(entity));  
  73.         //HibernateUtil.closeSession(session);  
  74.         return c.list();  
  75.     }  
  76.       
  77.     //本地SQL  
  78.     public static List findBySQL(String sql,Object[]params){  
  79.         Session session=HibernateUtil.getSession();  
  80.         SQLQuery query=session.createSQLQuery(sql);  
  81.         query.addEntity(Customers.class);    
  82.         if(params!=null){  
  83.             for(int i=0;i<params.length;i++){  
  84.                 query.setParameter(i, params[i]);  
  85.             }  
  86.         }  
  87.         //HibernateUtil.closeSession(session);  
  88.         return query.list();  
  89.     }  
  90.       
  91.     //遍历结果集  
  92.     public static void show(List list){  
  93.         if(list.size()>0){  
  94.             Iterator it=list.iterator();  
  95.             while(it.hasNext()){  
  96.                 Customers c=(Customers)it.next();  
  97.                 System.out.println(c.getId()+" "+c.getName()+" "+c.getAge());  
  98.                 if(c.getOrderses().size()>0){  
  99.                     Set set=c.getOrderses();  
  100.                     Iterator it2=set.iterator();  
  101.                     while(it2.hasNext()){  
  102.                         Orders o=(Orders)it2.next();  
  103.                         System.out.println("...."+o.getId()+" "+o.getOrderNumber()+" "+o.getPrice());  
  104.                     }  
  105.                 }  
  106.             }  
  107.         }  
  108.     }  
  109. }  

 

附:

0 0