|
<p >Hibernate简介<BR> <BR> Hibernate寓意:Let Java objects hibernate in the relational database.<BR> <BR> Hibernate 是Java应用和关系数据库之间的桥梁,负责Java对象和关系数据库之间的映射的ORM中间件。Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java开发人员可以随心所欲的使用对象编程思维来操纵数据库。简单的说就是:<BR> <BR> 1.封装了通过JDBC访问数据库操作。<BR> <BR> 2.向上层应用提供访问面向对象数据访问的API。<BR> <BR> 创建Hibernate配置文件<BR> <BR> 通过一个例子practice 演示如何运用Hibernate来访问关系数据库。<BR> <BR> Practice 工程的功能:<BR> <BR> 通过Hibernate保存客户(customer)信息。<BR> <BR> 其Hibernate应用结构图如下:<BR> ―――――――――――――――――――――――――――<BR> Practice 应用<BR> Customer Class ; action Class;Business Class<BR> ――――――――――――――――――――――――――――<BR> ――――――――――――――――――――――――――――<BR> Hibernate xml<BR> 对象-关系映射文件 Hibernate ApI<BR> Hibernate 配置文件<BR> ――――――――――――――――――――――――――――<BR> ――――――――――――――――――――――――――――<BR> 关系数据库(Mysql)<BR> CUSTOMERS 表<BR> ――――――――――――――――――――――――――――<BR> <BR> 创建持久化类<BR> <BR> Hibernate 从Hibernate配置文件中读取和数据库连接相关的信息。<BR> <BR> 配置文件有两种形式:<BR> <BR> 一种是XML格式的文件:hibernate.cfg.xml<BR> <BR> 一种是Java属性文件:hibernate.properties<BR> <BR> 这个实例中我们将使用hibernate.cfg.xml。<BR> <BR> "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"> <BR> <BR> true <BR> false <BR> net.sf.hibernate.dialect.MySQLDialect <BR> org.gjt.mm.mysql.Driver <BR> jdbc:mysql://localhost:3306/netstore <BR> root <BR> 123456 <BR> true <BR> gb2312 <BR> <BR> <BR> <BR> 插入位置在src目录下:<BR> <BR> 创建O/R对象-关系映射文件<BR> 创建持久化的类Customer.java<BR> <BR> package entity;import java.io.Serializable;<BR> public class Customers implements Serializable { <BR> private Integer id; <BR> private String name; <BR> private int age; <BR> public Customers() { <BR> } <BR> public int getAge() { <BR> return age; } <BR> public void setAge(int age) { <BR> this.age = age; <BR> } <BR> public Integer getId() { <BR> return id; <BR> } <BR> public void setId(Integer id) { <BR> this.id = id; <BR> } <BR> public String getName() { <BR> return name; <BR> } <BR> public void setName(String name) { <BR> this.name = name; <BR> }}<BR> <BR> Get/set 方法的命名必须符合JavaBean的规范,否则Hibernate会报出异常,具体请参照相关资料。<BR> <BR> 关于Serializable接口:<BR> Hibernate 并不要求持久化类必须实现java.io.Serializable接口,但是对于采用分布式结构的Java应用,当Java对象在不同的进程节点之间传输时,这个对象必须实现这个接口;如果希望对HttpSession中存放的Java对象进行持久化,那么这个Java对象必须实现Serializable接口。<BR> 关于不带参数的构造方法:<BR> <BR> public Customers() { }<BR> <BR> Hibernate要求持久化类必须提供一个不带参数的默认的构造方法,原因请参考相关资料。<BR> <BR> 创建Mysql数据库<BR> 数据库名称:netstroe<BR> 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;<BR> <BR> 创建对象-关系映射文件<BR> 创建对象-关系映射文件:Customers.hbm.xml<BR> 代码如下:<BR> <BR> "-//Hibernate/Hibernate Mapping DTD 2.0//EN" <BR> "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > <BR> name="entity.Customers" <BR> table="customers"> <BR> name="id" <BR> type="java.lang.Integer" <BR> column="id" <BR> > <BR> <BR> <BR> name="name" <BR> type="java.lang.String" <BR> column="name" <BR> length="15" <BR> /> <BR> name="age" <BR> type="int" <BR> column="age" <BR> length="11" <BR> /><BR> <BR> 引入Hibernate所需的jar包<BR> Hibernate2.jar、hibernate-tools.jar<BR> <BR> 通过Hibernate API 访问MYSQL数据库<BR> 创建业务逻辑类:useHibernate.java<BR> 代码如下:<BR> package business;<BR> import entity.Customers;<BR> import net.sf.hibernate.Session;<BR> import net.sf.hibernate.SessionFactory;<BR> import net.sf.hibernate.Transaction;<BR> import net.sf.hibernate.cfg.Configuration;<BR> public class useHibernate { <BR> public static SessionFactory sessionFactory; <BR> /** 初始化Hibernate,创建SessionFactory实例 */ <BR> public void saveCustomers(Customers customers) throws Exception { <BR> Configuration config = null; <BR> config = new Configuration().configure(); <BR> // 创建一个SessionFactory 实例 <BR> sessionFactory = config.buildSessionFactory(); <BR> Session session = sessionFactory.openSession(); <BR> Transaction tx = null; <BR> try { <BR> /* 开始一个事务 */ <BR> tx = session.beginTransaction(); <BR> session.save(customers); <BR> /* 提交事务 */ <BR> tx.commit(); <BR> } catch (Exception e) { <BR> // TODO Auto-generated catch block <BR> if (tx != null) <BR> tx.rollback(); <BR> throw e; <BR> } finally { <BR> session.close(); <BR> } <BR> }}<BR> <BR> 测试Hibernate配置是否成功<BR> 创建Junit测试:testhibernate.java <BR> 有关Junit请参考相关资料:<BR> package test;<BR> import business.useHibernate;<BR> import entity.Customers;import junit.framework.TestCase;<BR> Customers customers = new Customers(); <BR> customers.setId(new Integer(330121)); <BR> customers.setAge(24); <BR> customers.setName("huhpreal"); <BR> useHibernate usehibernate = new useHibernate(); <BR> try { <BR> usehibernate.saveCustomers(customers); <BR> } catch (Exception e) { <BR> // TODO Auto-generated catch block <BR> e.printStackTrace(); <BR> } <BR> }}<BR> <BR> 查看后台打印信息:<BR> (cfg.Environment 403 ) Hibernate 2.0.3<BR> (cfg.Environment 432 ) hibernate.properties not found<BR> (cfg.Environment 452 ) using CGLIB reflection optimizer<BR> (cfg.Environment 462 ) JVM proxy support: true<BR> (cfg.Configuration 703 ) Configuration resource: /hibernate.cfg.xml<BR> (cfg.Configuration 270 ) Mapping resource: hbm/Customers.hbm.xml<BR> (cfg.Binder 178 ) Mapping class: entity.Customers -> customers<BR> (cfg.Configuration 885 ) Configured SessionFactory: null<BR> (cfg.Configuration 492 ) processing one-to-many association mappings<BR> (cfg.Configuration 503 ) processing foreign key constraints<BR> (impl.SessionFactoryImpl 132 ) building session factory<BR> (dialect.Dialect 83 ) Using dialect: net.sf.hibernate.dialect.MySQLDialect<BR> (connection.DriverManagerConnectionProvider 41 ) Hibernate connection pool size: 20<BR> (connection.DriverManagerConnectionProvider 70 ) using driver: org.gjt.mm.mysql.Driver at URL: jdbc:mysql://localhost:3306/netstore<BR> (connection.DriverManagerConnectionProvider 71 ) connection properties: {useUnicode=true, user=root, password=123456, characterEncoding=gb2312}<BR> (impl.SessionFactoryImpl 162 ) Use outer join fetching: false<BR> (impl.SessionFactoryImpl 185 ) Use scrollable result sets: true<BR> (impl.SessionFactoryImpl 186 ) JDBC 2 max batch size: 15<BR> (impl.SessionFactoryImpl 194 ) echoing all SQL to stdout<BR> (impl.SessionFactoryObjectFactory 82 ) no JDNI name configured<BR> (impl.SessionFactoryImpl 269 ) Query language substitutions: {}<BR> <BR> Hibernate 配置使用成功<BR> <BR> 查看数据库:<BR> <BR> 插入成功! <BR><FONT face="Times New Roman"> </FONT><p align="center"></p></p> |
|