以前使用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就是根据持久类和映射文件执行删除数据库架构操作 } }运行结果:
相关推荐
### Hibernate的各种保存方式的区别 #### 一、预知知识点:Hibernate中的对象状态 在深入了解Hibernate中各种保存方式之前,我们先来了解一下Hibernate中对象的状态,这对于理解这些保存方式至关重要。 - **瞬时...
下面将详细介绍 Hibernate 的工作原理和为什么要使用 Hibernate。 一、Hibernate 的初始化 Hibernate 的初始化过程可以分为三个步骤: 1. 创建 Configeration 实例:读取 Hibernate 配置信息(hibernate.cfg.xml...
- **与Spring框架集成使用**:Spring框架提供了很好的依赖注入和AOP等功能,与Hibernate结合使用可以构建出更为灵活和强大的企业级应用。 #### 五、主键生成策略 Hibernate提供了多种主键生成策略,主要包括: - ...
Hibernate是Java领域中一款流行的持久化框架,它简化了数据库操作,使得开发人员可以更加专注于业务逻辑而不是数据存储的细节。...了解并熟练掌握它的原理和使用场景,对于提升Hibernate应用的效率和质量至关重要。
通过封装JDBC,Hibernate提供了一个高级的数据访问API,使得开发人员可以使用面向对象的方式来操作数据库。 - **ORM**:Object-Relational Mapping(对象关系映射),是一种编程技术,用于将对象模型与关系数据库...
- **保存(Save)**: 使用`Session.save()`方法将临时对象转变为持久化对象,生成一个新的数据库记录。 - **更新(Update)**: 如果对象已经是持久化状态,修改对象后调用`Session.update()`会更新数据库中的记录。 ...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库,极大地简化了Java应用中的数据存取操作。在Java开发中,Hibernate 提供了一种便捷的方式来执行数据库的增删改查...
在实际开发中,结合源码深入理解Hibernate的工作原理,可以帮助我们更有效地使用和优化Hibernate,例如优化查询性能、合理设置缓存策略、解决并发问题等。同时,源码学习也能为自定义扩展和二次开发提供基础。 总结...
自Hibernate 3.0引入,persist()成为了推荐的持久化方式。它的行为与save()类似,也是将对象状态从“瞬时”转变为“持久化”,并为新对象分配ID。但与save()不同,persist()不保证立即执行SQL,它总是延迟到事务提交...
1. 插入:使用Session的save()或saveOrUpdate()方法,将对象状态从瞬态转变为持久态。 2. 更新:调用Session的update()方法,或者直接修改对象属性后调用flush()方法。 3. 删除:使用Session的delete()方法,将对象...
本文将深入探讨Hibernate中的实体状态及其转换,帮助开发者更好地掌握如何有效地使用Hibernate进行数据操作。 首先,我们要了解Hibernate定义的三种实体状态: 1. **临时状态(Transient)**:当我们在程序中通过`...
在Java编程中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它使得开发者能够以面向对象的方式处理数据库操作。Hibernate的核心概念之一就是持久化对象的生命周期,这涉及到对象在数据库中的状态及其与...
并且更快流行开来 为了说明这一点 我们注意到 EJB 3 0 规范的方向相对以前出现了一个主要的转变 作为 JSR 220 的一部分 该规范提供了类似 Plain Old Java Object POJO 支持 Dependency Injection(依赖注入)和注释...
Hibernate是Java开发中的一个流行对象关系映射(ORM)工具,它简化了数据库操作,使开发者可以使用面向对象的方式来处理数据库交互。这份手册包含了丰富的信息,不仅介绍了基本概念,还提供了实际的测试用例代码,让...
本篇将深入探讨Hibernate的核心概念、配置、实体管理以及高级特性,旨在帮助读者全面掌握Hibernate的使用技巧。 一、Hibernate基础 Hibernate通过映射XML文件或注解将Java对象与数据库表关联,实现了对象的持久化。...
这种转变旨在优化数据访问性能,提高开发效率,并利用Hibernate提供的对象关系映射(ORM)功能。 **1. Hibernate ORM** Hibernate 是Java领域中最流行的ORM框架之一,它允许开发者用面向对象的方式来处理数据库操作...