1.db.sql
drop database sun; create database sun; use sun; drop table CUSTOMERS; create table CUSTOMERS ( ID int primary key, NAME varchar(15), AGE int ); drop table ORDERS; create table ORDERS ( ID int primary key, ORDER_NUMBER varchar(15), PRICE DECIMAL(10,2), CUSTOMER_ID int, foreign key (CUSTOMER_ID) references CUSTOMERS(ID) ); insert into CUSTOMERS(ID,NAME,AGE) values(1,'Tom',21); insert into CUSTOMERS(ID,NAME,AGE) values(2,'Mike',24); insert into CUSTOMERS(ID,NAME,AGE) values(3,'Jack',30); insert into CUSTOMERS(ID,NAME,AGE) values(4,'Linda',25); insert into CUSTOMERS(ID,NAME,AGE) values(5,'Tom',25); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(1,'Tom_Order001',100,1); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(2,'Tom_Order002',200,1); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(3,'Tom_Order003',300,1); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(4,'Mike_Order001',100,2); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(5,'Jack_Order001',200,3); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(6,'Linda_Order001',100,4); insert into ORDERS(ID,ORDER_NUMBER,PRICE,CUSTOMER_ID) values(7,'UnknownOrder',200,null);
2.搭建开发环境
使用的是Hibernate3.2
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 最大连接数 --> <property name="c3p0.max_size">10</property> <!-- 最小连接数 --> <property name="c3p0.min_size">3</property> <!-- 超时时间 单位 秒--> <property name="c3p0.timeout">300</property> <!-- 被缓存的PreparedStatement实例的最大数目 --> <property name="c3p0.max_statements">5</property> <!-- 连接的URL --> <property name="connection.url">jdbc:mysql://localhost:3306/sun</property> <!-- 用户名 --> <property name="connection.username">root</property> <!-- 密码 --> <property name="connection.password">root</property> <!-- 驱动--> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 数据库方言 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 显示SQL语句 --> <property name="show_sql">true</property> <!-- 格式化SQL语句 --> <property name="format_sql">true</property> <!-- 映射文件的地址 --> <mapping resource="org/cdl/domain/Customers.hbm.xml" /> <mapping resource="org/cdl/domain/Orders.hbm.xml" /> </session-factory> </hibernate-configuration>
3.HibernateUtil(Hibernate工具类)
package org.cdl.util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { /** * 初始化hibernate.cfg.xml文件 */ private static SessionFactory sf = null; static { Configuration cfg = new Configuration().configure(); sf = cfg.buildSessionFactory(); } /** * 获取Session对象 * @return 获取到的Session对象 */ public static Session getSession() { return sf.openSession(); } /** * 关闭Session对象 * @param session 要关闭的Session对象 */ public static void closeSession(Session session) { if (session != null) { session.close(); } } }
4.测试代码
package org.cdl.test; import java.util.Iterator; import java.util.List; import java.util.Set; import org.cdl.domain.Customers; import org.cdl.domain.Orders; import org.cdl.util.HibernateUtil; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.criterion.Example; import org.hibernate.criterion.Restrictions; public class Demo01 { public static void main(String[] args) { /** * HQL */ String hql="from Customers as c where c.name=? and c.age=?"; Object []params={"Tom",21}; show(findByHQL(hql,params)); /** * QBC */ show(findByQBC()); /** * QBE */ show(findByQBE()); /** * SQL */ String sql="select * from customers where name like ? and age=?"; Object[] values={"Tom",21}; show(findBySQL(sql, values)); } //HQL检索方式 public static List findByHQL(String hql,Object[]params){ Session session=HibernateUtil.getSession(); Query query=session.createQuery(hql); if(params!=null){ for(int i=0;i<params.length;i++){ query.setParameter(i, params[i]); } } //HibernateUtil.closeSession(session); return query.list(); } //QBC的检索方式 public static List findByQBC(){ Session session=HibernateUtil.getSession(); Criteria c=session.createCriteria(Customers.class); c.add(Restrictions.like("name","T%")); c.add(Restrictions.eq("age", 21)); //HibernateUtil.closeSession(session); return c.list(); } //QBE的检索方式 public static List findByQBE(){ Session session=HibernateUtil.getSession(); Criteria c=session.createCriteria(Customers.class); Customers entity=new Customers(); entity.setAge(21); entity.setName("Tom"); c.add(Example.create(entity)); //HibernateUtil.closeSession(session); return c.list(); } //本地SQL public static List findBySQL(String sql,Object[]params){ Session session=HibernateUtil.getSession(); SQLQuery query=session.createSQLQuery(sql); query.addEntity(Customers.class); if(params!=null){ for(int i=0;i<params.length;i++){ query.setParameter(i, params[i]); } } //HibernateUtil.closeSession(session); return query.list(); } //遍历结果集 public static void show(List list){ if(list.size()>0){ Iterator it=list.iterator(); while(it.hasNext()){ Customers c=(Customers)it.next(); System.out.println(c.getId()+" "+c.getName()+" "+c.getAge()); if(c.getOrderses().size()>0){ Set set=c.getOrderses(); Iterator it2=set.iterator(); while(it2.hasNext()){ Orders o=(Orders)it2.next(); System.out.println("...."+o.getId()+" "+o.getOrderNumber()+" "+o.getPrice()); } } } } } }
附:
