网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  java基础知识:简单hibernate入门     
  文章作者:未知  文章来源:水木森林  
  查看:120次  录入:管理员--2007-11-17  
 
  hibernate简介
  
  hibernate寓意:let java objects hibernate in the relational database.
  
  hibernate 是java应用和关系数据库之间的桥梁,负责java对象和关系数据库之间的映射的orm中间件。hibernate是一个开放源代码的对象关系映射框架,它对jdbc进行了非常轻量级的对象封装,使得java开发人员可以随心所欲的使用对象编程思维来操纵数据库。简单的说就是:
  
  1.封装了通过jdbc访问数据库操作。
  
  2.向上层应用提供访问面向对象数据访问的api。
  
  创建hibernate配置文件
  
  通过一个例子practice 演示如何运用hibernate来访问关系数据库。
  
  practice 工程的功能:
  
  通过hibernate保存客户(customer)信息。
  
  其hibernate应用结构图如下:
  ?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d
  practice 应用
  customer class ; action class;business class
  ?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d
  ?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d
  hibernate xml
  对象-关系映射文件      hibernate api
                 hibernate 配置文件
  ?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d
  ?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d
  关系数据库(mysql)
  customers 表
  ?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d?d
  
  创建持久化类
  
  hibernate 从hibernate配置文件中读取和数据库连接相关的信息。
  
  配置文件有两种形式:
  
  一种是xml格式的文件:hibernate.cfg.xml
  
  一种是java属性文件:hibernate.properties
  
  这个实例中我们将使用hibernate.cfg.xml。
  
       "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"> 
      
   true   
   false  
    net.sf.hibernate.dialect.mysqldialect   
   org.gjt.mm.mysql.driver  
    jdbc:mysql://localhost:3306/netstore   
   root 
     123456  
    true   
   gb2312   
     
   

  
  插入位置在src目录下:
  
  创建o/r对象-关系映射文件
  创建持久化的类customer.java
  
  package entity;import java.io.serializable;
  public class customers implements serializable {  
    private integer id;   
   private string name;   
   private int age;  
    public customers() {   
   }  
    public int getage() {       
   return age;    }  
    public void setage(int age) {  
        this.age = age;   
   } 
     public integer getid() {  
        return id; 
     }  
    public void setid(integer id) {   
       this.id = id;   
   }  
    public string getname() {  
        return name;   
   } 
     public void setname(string name) {   
       this.name = name;
      }}
  
  get/set 方法的命名必须符合javabean的规范,否则hibernate会报出异常,具体请参照相关资料。
  
  关于serializable接口:
  hibernate 并不要求持久化类必须实现java.io.serializable接口,但是对于采用分布式结构的java应用,当java对象在不同的进程节点之间传输时,这个对象必须实现这个接口;如果希望对httpsession中存放的java对象进行持久化,那么这个java对象必须实现serializable接口。
  关于不带参数的构造方法:
  
  public customers() {    }
  
  hibernate要求持久化类必须提供一个不带参数的默认的构造方法,原因请参考相关资料。
  
  创建mysql数据库
  数据库名称:netstroe
  customer表ddl定义如下:create table `customers` ( `id` bigint(20) not null default '0', `name` varchar(15) default null, `age` int(11) default null, primary key (`id`)) type=myisam;
  
  创建对象-关系映射文件
  创建对象-关系映射文件:customers.hbm.xml
  代码如下:
  
     "-//hibernate/hibernate mapping dtd 2.0//en" 
   "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > 
      created by the middlegen hibernate plugin 
   http://boss.bekk.no/boss/middlegen/ 
   http://hibernate.sourceforge.net/-->    name="entity.customers" 
   table="customers"> 
        name="id" 
     type="java.lang.integer"  
    column="id"
    > 
      
    
        name="name" 
     type="java.lang.string" 
     column="name"  
    length="15" 
   /> 
      name="age"  
    type="int"  
    column="age" 
     length="11" 
   />

  
  引入hibernate所需的jar包
  hibernate2.jar、hibernate-tools.jar
  
  通过hibernate api 访问mysql数据库
  创建业务逻辑类:usehibernate.java
  代码如下:
  package business;
  import entity.customers;
  import net.sf.hibernate.session;
  import net.sf.hibernate.sessionfactory;
  import net.sf.hibernate.transaction;
  import net.sf.hibernate.cfg.configuration;
  public class usehibernate {    
  public static sessionfactory sessionfactory;  
    /** 初始化hibernate,创建sessionfactory实例 */    
  public void savecustomers(customers customers) throws exception {   
       configuration config = null;  
        config = new configuration().configure();   
       // 创建一个sessionfactory 实例       
   sessionfactory = config.buildsessionfactory();    
      session session = sessionfactory.opensession();  
        transaction tx = null;     
     try {      
        /* 开始一个事务 */         
     tx = session.begintransaction();        
      session.save(customers);          
    /* 提交事务 */           
   tx.commit();  
        } catch (exception e) {     
         // todo auto-generated catch block          
    if (tx != null)             
     tx.rollback();          
    throw e;      
    } finally { 
             session.close();  
        }  
    }}
  
  测试hibernate配置是否成功
  创建junit测试:testhibernate.java
  有关junit请参考相关资料:
  package test;
  import business.usehibernate;
  import entity.customers;import junit.framework.testcase;
    customers customers = new customers();       
   customers.setid(new integer(330121));     
     customers.setage(24);       
   customers.setname("huhpreal");   
       usehibernate usehibernate = new usehibernate();   
       try {          
    usehibernate.savecustomers(customers);      
    } catch (exception e) {           
   // todo auto-generated catch block           
   e.printstacktrace();     
     }   
   }}
  
  查看后台打印信息:
  (cfg.environment           403 ) hibernate 2.0.3
  (cfg.environment           432 ) hibernate.properties not found
  (cfg.environment           452 ) using cglib reflection optimizer
  (cfg.environment           462 ) jvm proxy support: true
  (cfg.configuration          703 ) configuration resource: /hibernate.cfg.xml
  (cfg.configuration          270 ) mapping resource: hbm/customers.hbm.xml
  (cfg.binder             178 ) mapping class: entity.customers -> customers
  (cfg.configuration          885 ) configured sessionfactory: null
  (cfg.configuration          492 ) processing one-to-many association mappings
  (cfg.configuration          503 ) processing foreign key constraints
  (impl.sessionfactoryimpl       132 ) building session factory
  (dialect.dialect           83 ) using dialect: net.sf.hibernate.dialect.mysqldialect
  (connection.drivermanagerconnectionprovider 41 ) hibernate connection pool size: 20
  (connection.drivermanagerconnectionprovider 70 ) using driver: org.gjt.mm.mysql.driver at url: jdbc:mysql://localhost:3306/netstore
  (connection.drivermanagerconnectionprovider 71 ) connection properties: {useunicode=true, user=root, password=123456, characterencoding=gb2312}
  (impl.sessionfactoryimpl       162 ) use outer join fetching: false
  (impl.sessionfactoryimpl       185 ) use scrollable result sets: true
  (impl.sessionfactoryimpl       186 ) jdbc 2 max batch size: 15
  (impl.sessionfactoryimpl       194 ) echoing all sql to stdout
  (impl.sessionfactoryobjectfactory  82 ) no jdni name configured
  (impl.sessionfactoryimpl       269 ) query language substitutions: {}
  
  hibernate 配置使用成功
  
  查看数据库:
  
  插入成功!
 
 
上一篇: 方便的hql: hibernate查询语言    下一篇: hibernate中any元素的应用体会
  相关文档
java开源数据库项目derby的问答 11-17
详解超过255台电脑的内网ip规划 11-17
java远程方法调用 11-17
关于快速简便的使用ajax技术操作的介绍 04-17
常见的十四种java开发工具及其特点 11-16
java程序使用oci驱动连接oracle数据库 11-17
一个新的berkeley db java 持久api 11-17
java程序的性能优化 11-17
string类使用的例子(1) 11-17
java认证学习资料 11-17
线程池的介绍及简单实现 11-17
java新手入门:使用eclipse的插件开发 11-16
.net平台下nhibernate配置 11-17
java课堂:初学者都必须理解的几个问题 (1) 08-26
java性能优化-之三 11-17
一个用java.util.zip创建和读取zip文件的类,可以操作目录 11-17
copyfile 方法 11-16
hibernate annotations 实战介绍 11-17
java的基本数据类型与流 11-17
java me下的单元测试开发之jmunit篇 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息