转变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( truetrue); //第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件执行删除数据库架构操作 
  } 
}
 
运行结果:
 




     本文转自NightWolves 51CTO博客,原文链接:http://blog.51cto.com/yangfei520/269302 ,如需转载请自行联系原作者

相关文章
|
1月前
|
SQL Java 数据库连接
hibernate和mybatis的区别
hibernate和mybatis的区别
|
4月前
|
SQL Java 数据库连接
MyBatis与Hibernate区别
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
|
3月前
|
SQL 存储 Java
MyBatis与Hibernate有什么区别?
MyBatis与Hibernate有什么区别?
20 1
|
4月前
|
缓存 Java 数据库连接
Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理
Hibernate或MyBatis:ORM映射、缓存机制等知识讲解梳理
45 0
|
4月前
|
SQL 缓存 Java
聊聊Hibernate和Mybatis的区别
聊聊Hibernate和Mybatis的区别
27 0
|
8月前
|
SQL Java 数据库连接
Hibernate常见配置
Hibernate常见配置
48 0
|
SQL Java 数据库连接
mybatis与hibernate区别
mybatis与hibernate区别
121 0
|
SQL XML Java
对Hibernate的理解及和MyBatis的区别
对Hibernate的理解及和MyBatis的区别
136 0
|
XML SQL Java
MyBatis——创建mapper、mybatis主配置文件模板、使用工具类或传统dao方式实现数据库的一些操作、MyBatis代理
MyBatis——创建mapper、mybatis主配置文件模板、使用工具类或传统dao方式实现数据库的一些操作、MyBatis代理
MyBatis——创建mapper、mybatis主配置文件模板、使用工具类或传统dao方式实现数据库的一些操作、MyBatis代理
|
Java 数据库连接
Hibernate-02-实现添加操作
Hibernate-02-实现添加操作