当前位置:编程学习 > JAVA >>

Hibernate 第一个例子 详解

创建一个Java工程,导入架包如图:
 
 
User.java:
 
[java]  
package com.pojo;  
  
public class User implements java.io.Serializable {  
    private Integer id;  
    private String name;  
    private Integer age;  
  
    public Integer getId() {  
        return this.id;  
    }  
    private void setId(Integer id) {  
        this.id = id;  
    }  
      
    public String getName() {  
        return this.name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
      
    public Integer getAge() {  
        return this.age;  
    }  
    public void setAge(Integer age) {  
        this.age = age;  
    }  
  
}  
解析:
 
你可以看到这个类对属性的存取方法(getter and setter method)使用了标准 JavaBean 命名约定,同时把类属性(field)的访问级别设成私有的(private)。这是推荐的设计,但并不是必须的。Hibernate 也可以直接访问这些 field,而使用访问方法(accessor method)的好处是提供了重构时的健壮性(robustness)。
 
对一特定的 user, id 属性持有唯一的标识符(identifier)的值。如果我们希望使用 Hibernate 提供的所有特性,那么所有的持久化实体(persistent entity)类(这里也包括一些次要依赖类)都需要一个这样的标识符属性。而事实上,大多数应用程序(特别是 web 应用程序)都需要通过标识符来区别对象,所以你应该考虑使用标识符属性而不是把它当作一种限制。然而,我们通常不会操作对象的标识(identity),因此它的 setter 方法的访问级别应该声明 private。这样当对象被保存的时候,只有 Hibernate 可以为它分配标识符值。你可看到Hibernate可以直接访问 public,private 和 protected 的访问方法和 field。所以选择哪种方式完全取决于你,你可以使你的选择与你的应用程序设计相吻合。 
 
所有的持久化类(persistent classes)都要求有无参的构造器,因为 Hibernate 必须使用 Java 反射机制来为你创建对象。构造器(constructor)的访问级别可以是 private,然而当生成运行时代理(runtime proxy)的时候则要求使用至少是 package 级别的访问控制,这样在没有字节码指令(bytecode instrumentation)的情况下,从持久化类里获取数据会更有效率。
 
 
 
数据库“pla”下建表"user":
 
 
解析:此表表名与User类同名,首写字母大小写随意。
 
User.hbm.xml:
 
[html]  
<?xml version="1.0" encoding="utf-8"?>  
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<!--  
    Mapping file autogenerated by MyEclipse Persistence Tools 
-->  
<hibernate-mapping>  
    <!--指定类和对象的表-->  
    <class name="com.pojo.User" table="user" >  
        <!--指定主键-->  
        <id name="id" type="java.lang.Integer">  
            <!--对应的表字段-->  
            <column name="id" />  
            <!--定义主键生成方式Hibernate自行决定-->  
            <generator class="native" />  
        </id>  
        <!--定义name字段-->  
        <property name="name" type="java.lang.String">  
            <column name="name" length="20" />  
        </property>  
        <!--定义age字段-->  
        <property name="age" type="java.lang.Integer">  
            <column name="age" />  
        </property>  
    </class>  
</hibernate-mapping>  
解析:
 
这是映射文件。Hibernate 需要知道怎样去加载(load)和存储(store)持久化类的对象。这正是 Hibernate 映射文件发挥作用的地方。映射文件告诉 Hibernate 它应该访问数据库(database)里面的哪个表(table)及应该使用表里面的哪些字段(column)。
 
hibernate.cfg.xml:
 
[html]  
<?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">  
  
<!-- Generated by MyEclipse Hibernate Tools.                   -->  
<hibernate-configuration>  
  
<session-factory>  
    <property name="dialect">  
        org.hibernate.dialect.MySQLDialect  
    </property>  
    <property name="connection.url">  
        jdbc:mysql://localhost:3306/pla  
    </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="myeclipse.connection.profile">MySQL5</property>  
    <mapping resource="com/pojo/user.hbm.xml" />  
  
</session-factory>  
  
</hibernate-configuration>  
解析:
 
有了持久化类和它的映射文件,现在是配置 Hibernate的时候了。在这里,我们配置了 Hibernate 的SessionFactory — 一个关联于特定数据库全局的工厂(factory)。如果你要使用多个数据库,就要用多个的<session-factory>,通常把它们放在多个配置文件中(为了更容易启动)。Hibernate 将为你的应用程序连接到数据库。注意最后的<mapping>
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,