设为首页收藏本站language 语言切换
查看: 1109|回复: 0
收起左侧

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

[复制链接]
发表于 2010-2-20 13:56:04 | 显示全部楼层 |阅读模式
<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>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-6 18:21 , Processed in 0.310319 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表