我的家园

我的家园

      首先来说我个人感觉这篇博客写的没有丝毫的技术可言,只是代码占据了我博文相当长的篇幅,这样是空间的极大浪费,我个人感觉假如我是一个读者的话我也不会去认真的看这些代码去,但是还是会有一种人会看这些代码,那就是真心想通过我的博客学习Hibernate的人。为了我亲爱的读者们,我做一次无聊的事情,那就是详细解析代码构造和Hibernate运行机制。

 Hibernate的第一个实例来了解Hibernate是如何将对象实体映射成关系数据表和如何操作数据库。

项目实例

1、创建java项目

       

 注:src文件夹下是hibernate文件夹(子文件:Client.javaExportDB.javaUser.javaUser.hbm.xml实体类映射文件)、hibernate.cfg.xml系统配置文件和log4j.properites文件

2、创建User Library,加入依赖包,可以自己研究一下,也可以直接下载直接加载进去。
* HIBERNATE_HOME/lib/*.jar
* HIBERNATE_HOME/hibernate3.jar
* 加入数据库驱动(mysql驱动)
3、提供hibernate.cfg.xml文件,完成基本的配置

4.建立实体类User.java

import java.util.Date;
public class User {
 private String id;
 private String name;
 private String password;
 private Date createTime;
 private Date expireTime;
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public Date getCreateTime() {
  return createTime;
 }
 public void setCreateTime(Date createTime) {
  this.createTime = createTime;
 }
 public Date getExpireTime() {
  return expireTime;
 }
 public void setExpireTime(Date expireTime) {
  this.expireTime = expireTime;
 }
}

5、提供User.hbm.xml文件,完成实体类的映射

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="com.bjpowernode.hibernate.User">
  <id name="id">
   <generator class="uuid"/>
  </id>
  <property name="name"/>
  <property name="password"/>
  <property name="createTime"/>
  <property name="expireTime"/>
 </class>
</hibernate-mapping>

注:标题4和标题5通过实体类和实体类映射文件形成数据库中的字段,id采用的系统自动分配唯一主键,其余的都是属性字段。

6、将User.hbm.xml文件加入到hibernate.cfg.xml文件中

<!DOCTYPE hibernate-configuration PUBLIC
 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
  <property name="hibernate.connection.username">root</property>
  <property name="hibernate.connection.password">bjpowernode</property>
  <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  <property name="hibernate.show_sql">true</property>
  <!-- 
  <property name="hibernate.format_sql">true</property>
   -->
  <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/>
 </session-factory>
</hibernate-configuration>

注:大家看到driver_classurlusernamepassword这是配置数据库的基本信息,下面的dialect是适配数据库,mapping resource 指向的是实体类。

7、编写工具类ExoprtDB.java,hbm生成ddl,也就是hbm2ddl

/**
 * 将hbm生成ddl
 * 
@author Administrator
 *
 
*/
public class ExportDB {
 public static void main(String[] args) {
  //默认读取hibernate.cfg.xml文件
  Configuration cfg = new Configuration().configure();
  SchemaExport export = new SchemaExport(cfg);
  export.create(truetrue);
 }
}

8、建立客户端类Client,添加用户数据到mysql

public class Client {
 public static void main(String[] args) {
  //读取hibernate.cfg.xml文件
  Configuration cfg = new Configuration().configure();
  //建立SessionFactory
  SessionFactory factory = cfg.buildSessionFactory();
  //取得session
  Session session = null;
  try {
   session = factory.openSession();
   //开启事务
   session.beginTransaction();
   User user = new User();
   user.setName("张三");
   user.setPassword("123");
   user.setCreateTime(new Date());
   user.setExpireTime(new Date());
   //保存User对象
   session.save(user);
   //提交事务
   session.getTransaction().commit();
  }catch(Exception e) {
   e.printStackTrace();
   //回滚事务
   session.getTransaction().rollback();
  }finally {
   if (session != null) {
    if (session.isOpen()) {
     //关闭session
     session.close();
    }
   }
  }
 }
}

注:最好加入如下配置项,方便观察hibernate sql的生成:

<property name="hibernate.show_sql">true</property>

<property name="hibernate.format_sql">true</property>

最好加入log4j配置文件,将该配置文件拷贝到src下,便于程序的调试

解析

   第一个实例的运行原理解析:

            1.通过Configuration().configure();//读取并解析hibernate.cfg.xml配置文件

             2.hibernate.cfg.xml<mapping resource ="com/bjpowernode/hibernate/User.hbm.xml"/>

             3.通过config.buildSessionFactory(); //创建SessionFactory

             4.sessionFactory.openSession();//打开

             5.session.beginTransaction();//创建事务

             6.persistent operate持久化操作

             7.session.getTransaction().commit();//提交事务

             8.关闭Session

             9.关闭SessionFactory

 总结

   通过这个实例的演示,相比大家也能体会到Hibernate的好处吧!

            1.JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复代码

            2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM。很大程度上简化了DAO的编码工作。

            3.hibernate使用java反射机制,而不是字节码增强程序来实现透明性。

            4.hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。

        希望大家通过第一实例体会一下Hibernate的面向对象思想编程,以后我们通过uml对象图和关于实体类映射文件的主要内容进行演示,以后不会再详细演示代码。


        关于Hibernate如何将对象化的思维操作数据库模型,请继续关注我的博客,我会一一进行详尽的解析。 


只有注册用户登录后才能发表评论。


网站导航: