- 浏览: 24080 次
最近访客 更多访客>>
最新评论
-
linginfanta:
没有翻完。
转贴 java 泛型,辛苦译者了 -
阳光晒晒:
等四五小时再看,如果内存下来了
一般是由于数据库连接没关闭.
...
J2EE 系统 outofmemory问题 -
anxin587:
今天一直用jprofiler来跟踪,发现一个奇怪的问题,当to ...
J2EE 系统 outofmemory问题
学习精通Hibernate java对象持久化第4章联系如下:
customer 实体类
package mypack;
import java.io.Serializable;
import java.util.Set;
import java.util.*;
public class Customer implements Serializable
{
private Long id;
private String firstname;
private String lastname;
private char sex;
private Set orders=new HashSet();
private double avgPrice;
private double totalPrice;
private String description;
//应用程序无法给Id来赋值,而hibernate却可以
private void setId(Long id)
{
this.id=id;
}
public Long getId()
{
return this.id;
}
// hibernate在下面是靠调用get和set方法来给属性赋值的,所以此处应该为setName
public void setName(String name)
{
StringTokenizer t=new StringTokenizer(name);
firstname=t.nextToken();
lastname=t.nextToken();
}
public String getName()
{
return this.firstname+" "+this.lastname;
}
/*
* 下面这两组get和set方法是供应用程序来调用的
当应用程序给属性持久化的时候分别调用setFirstname和setLastname,
给这个javabean赋上值,而hibernate持久化的时候调用的是getName这样
就把应用程序所赋的值给持久化
*/
public void setFirstname(String firstname)
{
this.firstname=firstname;
}
public String getFirstname()
{
return this.firstname;
}
public void setLastname(String lastname)
{
this.lastname=lastname;
}
public String getLastname()
{
return this.lastname;
}
public void setSex(char sex)
{
this.sex=sex;
}
public char getSex()
{
return this.sex;
}
public void setOrders(Set orders)
{
this.orders=orders;
calculatePrice();
}
public Set getOrders()
{
return this.orders;
}
// 根据order的总数量计算出平均价格,从而客户端可以获得平均价格
private void calculatePrice()
{
double avgPrice=0.0;
double totalPrice=0.0;
int count=0;
if(getOrders()!=null)
{
Iterator iter=getOrders().iterator();
while(iter.hasNext())
{
double orderPrice=((Order)iter.next()).getPrice();
totalPrice+=orderPrice;
count++;
}
}
avgPrice=totalPrice/count;
setAvgPrice(avgPrice);
}
public void setAvgPrice(double avgPrice)
{
this.avgPrice=avgPrice;
}
public double getAvgPrice()
{
return this.avgPrice;
}
public void setTotalPrice(double totalPrice)
{
this.totalPrice=totalPrice;
}
public double getTotalPrice()
{
return this.totalPrice;
}
public void setDescription(String description)
{
this.description = description;
}
public String getDescription()
{
return this.description;
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="mypack">
<class name="Customer" table="CUSTOMER">
<id name="id">
<generator class="increment"/>
</id>
<property name="sex" column="SEX" type="char"/>
<property name="name" column="NAME" type="string"/>
<set name="orders" table="ORDERS">
<key column="CUSTOMER_ID"/>
<one-to-many class="mypack.Order"/>
</set>
<property name="description" column="DESCRIPTION" type="string"/>
</class>
</hibernate-mapping>
package mypack;
public class Order
{
private Long id;
private int orderNumber;
private double price;
private Customer customer;
public void setCustomer(Customer customer)
{
this.customer=customer;
}
public Customer getCustomer()
{
return this.customer;
}
public void setId(Long id)
{
this.id=id;
}
public Long getId()
{
return this.id;
}
public void setOrderNumber(int orderNumber)
{
this.orderNumber=orderNumber;
}
public int getOrderNumber()
{
return this.orderNumber;
}
public void setPrice(double price)
{
this.price=price;
}
public double getPrice()
{
return this.price;
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="mypack">
<class name="Order" table="ORDERS">
<id name="id" column="ID">
<generator class="increment"/>
</id>
<property name="orderNumber" column="ORDERNUMBER"/>
<property name="price" column="PRICE"/>
<many-to-one name="Customer" column="CUSTOMER_ID" class="Customer"/>
</class>
</hibernate-mapping>
package util;
import org.hibernate.cfg.*;
import org.hibernate.*;
import mypack.*;
public class HibernateUtil
{
private static SessionFactory sessionFactory;
static
{
try
{
Configuration config=new Configuration();
config.addClass(Customer.class).addClass(Order.class);
sessionFactory = config.buildSessionFactory();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory()
{
return sessionFactory;
}
}
package service;
import util.*;
import mypack.*;
import org.hibernate.*;
public class Test
{
public static void saveCustomer()
{
System.out.println("Prepare save....");
Customer customer=new Customer();
Session session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Order order1=(Order)session.load(Order.class,new Long(1));
//此处设定firstname和lastname,但是table里面
// 根本就不存在这两个属性,就可以看到前面所说的情况了
customer.setFirstname("andy");
customer.setLastname("cao");
customer.setSex('M');
customer.getOrders().add(order1);
customer.setDescription("this is a good boy");
session.save(customer);
session.getTransaction().commit();
System.out.println("saved successful");
}
public static void loadCustomer()
{
System.out.println("Prepare load customer....");
Session session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,new Long(1));
System.out.println("------------------------");
System.out.println("------>>>>>>>>>>"+customer.getFirstname()+customer.getLastname()+" || "+customer.getAvgPrice());
session.getTransaction().commit();
}
public static void main(String[] args)
{
// Test.saveCustomer();
Test.loadCustomer();
//System.out.println(HibernateUtil.getSessionFactory());
}
}
sql DDL
create table CUSTOMER
(
ID INT AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(40),
SEX char(1),
DESCRIPTION VARCHAR(40)
)
CREATE TABLE ORDERS
(
ID INT AUTO_INCREMENT PRIMARY KEY,
ORDERNUMBER int,
PRICE double,
CUSTOMER_ID INT ,
CONSTRAINT FK_CST FOREIGN KEY(CUSTOMER_ID) REFERENCES CUSTOMER(ID)
)
Hibernate properties
hibernate.dialext=org.hibernate.dialext.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/TEST
hibernate.connection.username=root
hibernate.connection.password=
hibernate.show_sql=true
ant
<project name="hibernate-tutorial" default="compile">
<property name="sourcedir" value="${basedir}/src"/>
<property name="targetdir" value="${basedir}/bin"/>
<property name="librarydir" value="${basedir}/lib"/>
<path id="libraries">
<fileset dir="${librarydir}">
<include name="*.jar"/>
</fileset>
</path>
<target name="clean">
<delete dir="${targetdir}"/>
<mkdir dir="${targetdir}"/>
</target>
<target name="compile" depends="clean, copy-resources">
<javac srcdir="${sourcedir}"
destdir="${targetdir}"
classpathref="libraries"/>
</target>
<target name="copy-resources">
<copy todir="${targetdir}">
<fileset dir="${sourcedir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="run" depends="compile">
<java fork="true" classname="service.Test" classpathref="libraries">
<classpath path="${targetdir}"/>
</java>
</target>
</project>
主要讲了一些简单的hibernate对象与关系的映射,
1 应用程序调用entity类,应用程序通过set去把值赋给实体类,通过get方法取得属性值,hibernate则通过get方法把实体类中的属性数据持久化到对象数据库中,通过set方法把对象数据库中的数据load出来给应用程序,实体类和关系数据库通过配置文件建立起关联,这样的话,实体类没有侵入任何hibernate的代码,实体类中可以包括一些简单的逻辑运算,像上面的例子中,customer表中没有firstname和lastname两个属性,同时customer的提供了name的get和set方法,但是并没有name这个属性,也就是说hibernate是通过get和set方法来访问的,而不是通过属性,但是同时也可以设置成让hibernate来访问属性,而不是get和set方法,有人会像既然get和set方法是为了给属性赋值和取值用的,为什么不直接把属性设置成public,那样的话无论是应用程序还是hibernate多可以直接的访问属性,而不用set和get细节,但是这样会带来一个很明显的问题就是,程序隐藏型控制问题,假如有一个属性我只想取值不像设值,这样如果public property的话就很难解决,而javabean则很好的解决了这个问题,还有代理主键一般用包装类型而不是用原语类型,因为有的时候原语类型代表着业务意义,而包装类型的问题就是操作不方面,并且有可能带来nullpointException问题
发表评论
-
hibernate初级 映射复合自然主键
2007-09-13 22:53 1486现在根据customer和orders ... -
hibernate初级 对象-映射组成关系
2007-09-09 22:21 1190域对象中,类之间存在四种关系,1关联,也就是类之间的引用关系, ... -
hibernate初级 hibernate中对象的状态及其相互关系
2007-09-09 15:27 1454在java中应用程序通过new创建一个java对象时,jvm会 ... -
hibernate初级 映射一对多关联关系
2007-09-08 23:50 1814在域模型中,类之间最普遍的关系是关联关系,关联是有方向的,分为 ... -
hibernate初级 映射对象标识符
2007-09-05 23:35 1887Hibernate使用对象标识符来建立内存中的对象和数据库表中 ...
相关推荐
【hibernate初级教程】 Hibernate 是一款开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的便捷方式。本教程将带你深入理解Hibernate的核心概念,帮助初学者快速入门。 一、...
Hibernate通过将Java对象映射到数据库表,以及将Java对象之间的关联映射到表之间的外键关系,实现了对象和关系型数据库之间的桥梁作用。这种映射机制使得开发人员能够更加专注于业务逻辑的实现,而将数据访问的细节...
总之,《Pro Hibernate3》不仅是一本介绍Hibernate的书籍,更是帮助程序员深入理解对象关系映射技术和Hibernate框架的重要参考资料。无论你是初学者还是有一定经验的开发者,都能从中获益匪浅。
【Hibernate PPT-1】是关于Hibernate框架的初级讲解,主要涵盖了Hibernate的基础特性和体系结构,以及O/R Mapping的理解。Hibernate是一个对象关系映射(ORM)框架,它将Java对象模型与关系数据库模型进行映射,使得...
Hibernate是一个对象关系映射(ORM)框架,它允许开发者用Java对象模型来操作数据库,避免了直接编写SQL语句。Hibernate通过配置hibernate.cfg.xml文件和实体类的注解或XML映射文件,实现了Java对象与数据库表的映射...
本节课程主要围绕“hibernate 第一节课”,我们将深入探讨Hibernate的核心概念、配置、对象关系映射(ORM)以及如何使用它来执行基本的数据库操作,如添加、删除、修改和查询(CRUD操作)。 1. Hibernate核心概念:...
### Hibernate初级学习知识点详解 #### 一、Hibernate简介与ORM概念 - **ORM技术定义**:对象关系映射(Object/Relational Mapping, ORM)是一种编程技术,用于将对象模型与关系型数据库模型进行桥接。它使得开发...
第六步,对象映射(Hibernate 映射文件)。通过 Hibernate 工具,将 "student" 表映射为 Java 类,自动生成对应的 .hbm.xml 文件,这定义了 Java 类与数据库表之间的对应关系。 第七步,修改配置文件。在生成的 ...
Hibernate是一个流行的开源对象关系映射(ORM)框架,它简化了Java开发者与数据库之间的交互,使得我们可以用面向对象的方式来处理数据库操作。 描述中的“Hibernate优先应用程序”可能是指一个以Hibernate为核心的...
Hibernate,作为Java领域中一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。对于初学者而言,理解并掌握Hibernate的基本概念和核心功能是至关重要的。以下是对Hibernate从初级到高级的知识点详细解析。...
Hibernate提供了一套完整的解决方案,包括对象-关系映射(ORM)、缓存管理、事务处理等。 - **优势**:提高了开发效率,降低了维护成本,增强了应用程序的可移植性和可扩展性。 通过以上分析可以看出,无论是...
Hibernate是一个开放源代码的对象关系映射(ORM)框架,它简化了Java应用程序对关系数据库的访问。通过Hibernate,开发者可以将对象模型转换为关系数据模型,从而避免了直接编写SQL语句,提高了开发效率和代码可维护...
4. **持久化映射**:Hibernate使用XML或注解来定义对象-关系映射,例如使用Hibernate的注解如@Column,@GeneratedValue等。 5. **Session接口**:Hibernate的主要工作接口,负责与数据库的交互,如保存、更新、查询...
【hibernate】知识点详解: ...这些知识点覆盖了 Hibernate 的基础配置、映射机制、关系映射、主键生成、查询语言、API 使用及对象状态管理等方面,对初级程序员来说,理解并掌握这些内容是学习 Hibernate 的重要基础。
1. **对象关系映射(ORM)**:Hibernate是ORM工具,它将Java对象与数据库中的记录进行映射,使我们能以面向对象的方式来操作数据库,而不是传统的SQL语句。 2. **实体类和映射文件**:在Hibernate中,我们创建Java...
2. **对象关系映射(ORM)**: ORM是Hibernate的核心特性,它通过映射文件将Java对象和数据库表关联起来,使得开发者可以使用面向对象的方式来处理数据库操作,减少了直接操作SQL的复杂度。 3. **Hibernate配置**: ...
Hibernate,作为Java领域中的一款强大且广泛应用的对象关系映射(ORM)框架,极大地简化了数据库操作。它允许开发者通过面向对象的方式处理数据,从而避免了传统SQL语句的繁琐编写。本教程将深入探讨Hibernate的核心...
这个标签明确了讨论的主题,即Hibernate,一个对象关系映射(ORM)框架,它允许开发者在Java应用程序中使用对象而不是SQL语句来操作数据库。Hibernate处理了对象和数据库表之间的映射,提供了透明的数据访问层。 **...
Hibernate是一个开放源代码的对象关系映射(Object Relational Mapping,简称ORM)框架,它对JDBC进行了非常轻量级的对象封装,它为程序员提供了强大的数据持久化服务。通过Hibernate,可以使用面向对象的方式操作...
Struts、Spring和Hibernate是Java Web开发中的三大框架,它们分别负责不同的职责:Struts用于控制应用程序的流程,Spring提供全面的依赖注入和面向切面编程能力,而Hibernate则是一个强大的对象关系映射(ORM)工具...