[JAVA]Hibernate3.6应用实例详解
2013-11-22 13:21
585 查看
Hibernate是一个非常著名的的对象--关系映射工具,本文使用的是Hibernate3.6的版本。本文通过建立一个工程,来引导大家学习hibernate,对hibernate有个认识。有些代码、概念不清楚没关系,后文会慢慢的介绍。文中也有大量的注释,附件会上传本文所有的源码。
首先建立一个Web Project,然后在WEB-INF/lib下添加相关的jar包。项目结构如下图1所示。jar包介绍如下:
图1
hibernate-distribution-3.6.0.Final-dist\hibernate-distribution-3.6.0.Final\lib\required 目录下相应的jar包:
antlr-2.7.6.jar:HQL-->SQL的转换
commons-collections-3.1.jar:Apache的集合类工具
dom4j.jar:解析XML文档
hibernate3.jar:hibernate核心API实现
javassist-3.12.0.GA.jar:动态Java代码生成工具
jta-1.1.jar:标准的Java事务处理接口
slf4j-api-1.6.1.jar:日志管理API
slf4j-nop-1.6.1.jar:日志管理。
一.持久化类如下:
Customer.java
package com.yaxing.entity; import java.util.HashSet; import java.util.Set; /** * 顾客类 * */ public class Customer { private Long id; private String name; private Set<Order> orders = new HashSet<Order>(); public Long getId() { return id; } public void setId(Long
id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Order> getOrders() { return orders; } public void setOrders(Set<Order> orders) { this.orders = orders; } }
Order.java
package com.yaxing.entity; /** * 订单类 * */ public class Order { private Long id; private Customer customer; private String orderNumber; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Customer getCustomer() { return
customer; } public void setCustomer(Customer customer) { this.customer = customer; } public String getOrderNumber() { return orderNumber; } public void setOrderNumber(String orderNumber) { this.orderNumber = orderNumber; } }
说明如下:这是一种典型的一对多的关联关系。即一个客户会有多个订单,而一个订单必然会属于一个客户,因此对于一个订单来说,如果其客户不存在,则此订单是没有任何意义的。这里设置的是双向的关联关系。因为可能业务中会存在大量的这样的需求:
查询客户的所有订单
根据所给的订单,查询订单所属的客户
类与类之间建立关联关系,可以很方便的从一个对象导航到另外一个对象,建立关系如下:
/** * 订单类 * */ public class Order { private Long id; private Customer customer; //... }
http://jinhuabailing.com sducc1122
这样就从order对象导航到了customer对象,
从order对象到customer对象的导航如下:即给定了order对象,获得了与他所关联的costomer对象.
Customer customer = order.getCustomer();
那么对于给定的costomer对象,如何从customer对象导航到order对象呢?因为customer对象里面包含一组order,即一个客户会存在多个订单。
因此对于给定的客户,要查询所有的订单,代码如下:
返回的是一个Set集合。
customer.getOrders();//返回一个set集合,用迭代器访问。
关于集合类的操作,也不是本文的内容,读者可以参考其他文章。不清楚的,可以本文后面留言。
首先建立一个Web Project,然后在WEB-INF/lib下添加相关的jar包。项目结构如下图1所示。jar包介绍如下:
图1
hibernate-distribution-3.6.0.Final-dist\hibernate-distribution-3.6.0.Final\lib\required 目录下相应的jar包:
antlr-2.7.6.jar:HQL-->SQL的转换
commons-collections-3.1.jar:Apache的集合类工具
dom4j.jar:解析XML文档
hibernate3.jar:hibernate核心API实现
javassist-3.12.0.GA.jar:动态Java代码生成工具
jta-1.1.jar:标准的Java事务处理接口
slf4j-api-1.6.1.jar:日志管理API
slf4j-nop-1.6.1.jar:日志管理。
一.持久化类如下:
Customer.java
package com.yaxing.entity; import java.util.HashSet; import java.util.Set; /** * 顾客类 * */ public class Customer { private Long id; private String name; private Set<Order> orders = new HashSet<Order>(); public Long getId() { return id; } public void setId(Long
id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Order> getOrders() { return orders; } public void setOrders(Set<Order> orders) { this.orders = orders; } }
Order.java
package com.yaxing.entity; /** * 订单类 * */ public class Order { private Long id; private Customer customer; private String orderNumber; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Customer getCustomer() { return
customer; } public void setCustomer(Customer customer) { this.customer = customer; } public String getOrderNumber() { return orderNumber; } public void setOrderNumber(String orderNumber) { this.orderNumber = orderNumber; } }
说明如下:这是一种典型的一对多的关联关系。即一个客户会有多个订单,而一个订单必然会属于一个客户,因此对于一个订单来说,如果其客户不存在,则此订单是没有任何意义的。这里设置的是双向的关联关系。因为可能业务中会存在大量的这样的需求:
查询客户的所有订单
根据所给的订单,查询订单所属的客户
类与类之间建立关联关系,可以很方便的从一个对象导航到另外一个对象,建立关系如下:
/** * 订单类 * */ public class Order { private Long id; private Customer customer; //... }
http://jinhuabailing.com sducc1122
这样就从order对象导航到了customer对象,
从order对象到customer对象的导航如下:即给定了order对象,获得了与他所关联的costomer对象.
Customer customer = order.getCustomer();
那么对于给定的costomer对象,如何从customer对象导航到order对象呢?因为customer对象里面包含一组order,即一个客户会存在多个订单。
因此对于给定的客户,要查询所有的订单,代码如下:
返回的是一个Set集合。
customer.getOrders();//返回一个set集合,用迭代器访问。
关于集合类的操作,也不是本文的内容,读者可以参考其他文章。不清楚的,可以本文后面留言。