[JAVA]Hibernate3.6应用实例详解

来源:互联网 发布:腾讯何时优化吃鸡 编辑:程序博客网 时间:2024/05/01 02:54

  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集合,用迭代器访问。

  关于集合类的操作,也不是本文的内容,读者可以参考其他文章。不清楚的,可以本文后面留言。

原创粉丝点击