中国第一Ajax站长门户:www.okajax.com   虚拟主机 域名注册 云主机

Java基础知识:谈谈简单Hibernate入门 - okajax.com - Ajax中国

我要投稿 会员登陆 RSS订阅 本站推荐:
您的位置主页 > 网页编程 > Java > Java基础知识:谈谈简单Hibernate入门

Java基础知识:谈谈简单Hibernate入门

2008-06-29    文章来源:互联网    浏览次数:

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应用结构图如下:

―――――――――――――――――――――――――――
Practice 应用
Customer Class ; action Class;Business Class
――――――――――――――――――――――――――――
――――――――――――――――――――――――――――
Hibernate xml
对象-关系映射文件  Hibernate ApI
 Hibernate 配置文件
――――――――――――――――――――――――――――
――――――――――――――――――――――――――――
关系数据库(Mysql)
CUSTOMERS 表
――――――――――――――――――――――――――――

创建持久化类

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" > 
 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.SessionFactoryObjectFactory82 ) no JDNI name configured
(impl.SessionFactoryImpl 269 ) Query language substitutions: {}

Hibernate 配置使用成功

查看数据库,插入成功!

文章评论(查看全部)

看不清楚?单击换一张。
loading.. 评论加载中....
关于我们 - 广告服务 - 版权隐私 - 免责声明 - RSS地图 - 网站地图 - 使用帮助 - 返回顶部