`
KuangYeYaZi
  • 浏览: 52523 次
文章分类
社区版块
存档分类
最新评论

转变Hibernate的使用方式

 
阅读更多
     以前使用Hibernate都是用最愚蠢的方式:先写实体类,然后SQL语句或者在PLSQL Developer工具中建立数据库相关的表,再写配置文件和映射文件.....
    这种方式费时费力不说,还时常出现问题,比如类,包或者属性名称对应不上等等。其实这也不是Java提倡的面向对象开发思想。
    现在强制转变到面向对象模型设计上:先写实体类,然后写配置文件和映射文件,再使用Hibernate提供的hbm2ddl工具SchemaExport类根据实体类,配置文件和映射文件生成相应的数据库结构。也许这面这张图片更能简单明了的表达这种编程思想:


  Hibernate的hbm2dll提供SchemaExport工具作用就是:给定一个连接字符串和映射文件,不需输入其他东西就可以按照持久化类和映射文件自动生成数据库架构。其实,SchemaExport给提供了三个方法都可以完成对数据库结构的操作:
    public void create(boolean script, boolean export),
    public void drop(boolean script, boolean export),
    public void execute(boolean script, boolean export, boolean justDrop, boolean justCreate)
    Create(script,export)方法根据持久类和映射文件先删除架构后创建删除数据库架构。有两个参数,第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件先执行删除再执行创建操作,经过调试可以发现这个方法其实质是执行Execute(script,export, false, true)方法。
    Drop(script, export)方法根据持久类和映射文件执行删除数据库架构。有两个参数,第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件执行删除数据库架构操作,经过调试可以发现Drop(script, export)方法其实质是执行了Execute(script, export, true, true)方法。
    Execute(script, export, justDrop, format)方法根据持久类和映射文件先删除架构后创建删除数据库架构。有四个参数,第一个为True就是把DDL语句输出到控制台;第二个为True就是根据持久类和映射文件在数据库中先执行删除再执行创建操作;第三个为false表示不是仅仅执行Drop语句还执行创建操作,这个参数的不同就扩展了上面两个方法;第四个参数为false表示不是格式化输出DDL语句到控制台,是在一行输出的。
1.实体类:Student.java
public class Student { 
  private String id; 
  private String name; 
  private String password; 
  private Date createTime; 
  private Date expireTime; 
  //一系列setter.getter方法 
}
 2.配置文件: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.url">jdbc:oracle:thin:@localhost:1521:test</property> 
    <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
    <property name="hibernate.connection.username">SCOTT</property> 
    <property name="hibernate.connection.password">yf123</property> 
    <property name="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</property> 
    <property name="hibernate.show_sql">true</property> 
     
    <mapping resource="com/yf/hibernate/Student.hbm.xml"/> 
  </session-factory> 
</hibernate-configuration>
 3.映射文件:Student.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.yf.hibernate.Student" table="hibernate_student"> 

    <id name="id" length="6"> 
      <generator class="uuid"/> 
    </id> 
    <property name="name" length="10"/> 
    <property name="password" length="8"/> 
    <property name="createTime"/> 
    <property name="expireTime"/> 
  </class> 
</hibernate-mapping>
 4.利用SchemaExport工具让Hibernate自动生成数据库结构
import org.hibernate.cfg.Configuration; 
import org.hibernate.tool.hbm2ddl.SchemaExport; 

public class ExportDB { 
  public static void main(String[] args) { 
    // 读取hibernate.cfg.xml文件 
    Configuration cfg = new Configuration().configure(); 
    SchemaExport export = new SchemaExport(cfg); 
    export.create(true, true);//第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件执行删除数据库架构操作 
  } 
}
 运行结果:


 
  • 大小: 20 KB
  • 大小: 13.2 KB
分享到:
评论

相关推荐

    JPA、hibernate项目常用包

    并且更快流行开来 为了说明这一点 我们注意到 EJB 3 0 规范的方向相对以前出现了一个主要的转变 作为 JSR 220 的一部分 该规范提供了类似 Plain Old Java Object POJO 支持 Dependency Injection(依赖注入)和注释...

    Hibernate 对象的状态检索

    本人在厦门邦初培训时候 使用的快速入门精简文档 Session缓存的作用 Session清理缓存的时间点 对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象。 延迟装载 迫切左外链接 HQL...

    用 hibernate 和 spring 开发持久层.doc

    用 hibernate 和 spring 开发持久层,菜鸟到高手的转变。

    Maven2 的新特性.7z

    这对于使用类似如Hibernate的用户来说所操的心太多了,而且也不方便。在Maven2中实现了传递依赖,如此对于Hibernate所依赖的包,Maven2会自动下载,开发人员只需关心Hibernate即可。 注意:只有得到Maven支持的依赖...

    spring培训笔记

    Spring的事务管理及实现,Spring操作Hibernate的事务管理器; 回顾上次课的要点: 代理模式,AOP框架,Spring中AOP的实现方式 一、Spring的事务管理 传统数据库事务的特性: Atomic: 原子性. 事务中的各个...

    高校信息综合管理系统_论文

    (其他相关文档,见本人的上传资源列表)高校师生交流信息管理将为高校的信息化管理带来更加快捷方便的管理模式,使高校转变管理理念,为高校的发展带来高效、高质的辅助措施。为高校师生间的交流提供了一个良好信息...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    伴随着Internet的迅速发展,计算机技术正在由基于C/S(client/ Server)模式的应用系统转变为基于B/S模式的应用系统。 过去,网络软件的开发都采用C/S(client)模式,在这种模式下,主要的业务逻辑都集中于客户端...

    OpenKM Document Management - DMS:文件管理系统和内容管理系统-开源

    它基于开放技术(Java,Tomcat,GWT,Lucene,Hibernate,Spring和jBPM),功能强大且可扩展的多平台应用程序,提供了满足当今IT需求的现代,灵活的体系结构。 OpenKM是一个Web 2.0应用程序,可与Internet Explorer...

    基于J2EE框架的个人博客系统项目毕业设计论...

    伴随着Internet的迅速发展,计算机技术正在由基于C/S(client/ Server)模式的应用系统转变为基于B/S模式的应用系统。 过去,网络软件的开发都采用C/S(client)模式,在这种模式下,主要的业务逻辑都集中于客户端...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...

    杏_rnaseq

    杏和桃RNASeq对冬季Hibernate的转变 该存储库包括为手稿生成数据和图形的脚本。 data 用于分析和绘图的输入数据 analysis 用于分析原始Illumina的pipeline如下: 差异表达分析R脚本: DEanalysis 共表达分析R...

Global site tag (gtag.js) - Google Analytics