hibernate 根据对象关系表生成 数据库

【Hibernate】——实体类映射到数据库表 上回说到, Hibernate是一个开放源代码的对象关系映射框架,其核心应该也就是映射了,所以,今天我们了解一下Hibernate是如何将实体和数据库映射的。--即Hibernate根据实体自动建立表和字段。 为了让大家更明了,小编写了一个小demo。实现了将实体映射到数据库表。希望通过这个小程序,让大家有所收获。 阅读详情
 

一般在项目开发过程中,使用比较多的就是先建好表,再利用hibernate反向工程生成*.hbm.xml文件跟POJO类,个人认为由于目前所使用的数据库都是关系数据库,而hibernate作为一个ORM,把对数据库的操作都对象化了,更应当从对象出发,生成数据库里面相关表,这样更加符合人认知事物的习惯。

由于hibernate3提供了自带的工具hbm2ddl,建立根据你的对象建立数据库是一件非常简单的事情。

SchemaExport工具:Hibernate的hbm2dll提供SchemaExport工具,给定一个连接字符串和映射文件,不需输入其他东西就可以按照持久化类和映射文件自动生成数据库架构,现在SchemaExport工具还不是很强大,但是一般应用足够了,它还是一个相当原始的API还在不断改进。SchemaExport工具就是把DDL脚本输出到标准输出,同时/或者执行DDL语句。SchemaExport工具提供了三个方法,分别是Drop()、Create()、Execute(),前两个方法实质是调用Execute()方法。通常使用Execute()方法来生成数据库架构的。

SchemaUpdate工具:在Hibernate2.0中新添加SchemaUpdate工具,可以用来更新数据库架构。但是我觉得没有什么作用,因为它不能Drop现有的表或列,也不能更新现有的列,只能添加新的表和列。如果我需要删除表或者列或者修改其中列,SchemaUpdate工具就显得无能为力了。

SchemaValidator工具:SchemaValidator工具,可以用来检查数据库架构。通过映射文件中配置的相关数据库表及各自的字段属性来检查数据库中对应表结构是否存在或正确,如果不存在表或字段不一致,则抛出异常。

对于单纯的Hibernate,配置有hibernate.cfg.xml数据库配置文件,或是其它SSH整合版本中也配置有相关.cfg.xml文件的工程来说,这种类型的情况下使用Hibernate的SchemaExport实现正向工程比较简单。如下例:

public boolean createTableByBean(String mappingFile) {

       Configuration cfg = new Configuration().configure(cfgFile);

       cfg.addFile(mappingFile);

       boolean flag = true;

       SchemaExport dbExport = new SchemaExport(cfg);

       try {

           dbExport.create(true, true);

       } catch (Exception e) {

           flag = false;

       }

       return flag;

}

而我所做的数据迁移工具中使用的是Spring+Hibernate整合框架,而且在数据库配置中没有使用hibernate.properties和hibernate.cfg.xml文件来配置,

因为在使用Hibernate的SchemaExport/SchemaUpdate/SchemaValidator工具时,构建对象时需要Hibernate的Configuration对象实例作为参数。如:

var export = new SchemaExport(cfg); 其中cfg参数由

Configuration cfg = new Configuration().configure(cfgFile);建立,configure默认读取hibernate.cfg.xml配置文件(configure无参函数),

也可以通过传递参数指定自己定义的.cfg.xml文件。我的SessionFactory是借助于Spring提供的

org.springframework.orm.hibernate3.LocalSessionFactoryBean来实现的:

<bean id="targetSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    ……

</bean>

在没有配置.cfg.xml文件的情况下,可以通过配置的数据源的SessionFactory中获取,如下:

public class DaoUtil extends HibernateDaoSupport {

private Configuration cfg;

private Settings settings;

public void init() {

     String webRootPath = CommonMethod.getWebRootPath();

     ApplicationContext dataSource_ctx = new FileSystemXmlApplicationContext(webRootPath + "/WEB-INF/datatransferConf/applicationContext-targetDataSource.xml");

     SessionFactoryImplementor sessionFactoryImpl = (SessionFactoryImplementor) dataSource_ctx.getBean("targetSessionFactory");

     LocalSessionFactoryBean localSessionFactory = (LocalSessionFactoryBean) dataSource_ctx.getBean("&targetSessionFactory");

     SessionFactory sessionFactory = (SessionFactory) dataSource_ctx.getBean("targetSessionFactory");

     this.cfg = localSessionFactory.getConfiguration();

     this.settings = sessionFactoryImpl.getSettings();

     super.setSessionFactory(sessionFactory);

}

public void createTableFromCfg() {

      if (settings.isAutoCreateSchema()) {

         new SchemaExport(cfg, settings).create(true, true);

      } else if (settings.isAutoUpdateSchema()) {

            new SchemaUpdate(cfg, settings).execute(true, true);

        } else if (settings.isAutoDropSchema()) {

          new SchemaExport(cfg, settings).drop(true, true);

        } else if (settings.isAutoValidateSchema()) {

          new SchemaValidator(cfg).validate();

        }

}

public void createTableFromMapFile(String mappingFile) {

      Resource mappingLocation = new ClassPathResource(mappingFile);

              try {

         cfg.addInputStream(mappingLocation.getInputStream());

     } catch (MappingException e1) {

         e1.printStackTrace();

     } catch (IOException e1) {

         e1.printStackTrace();

     }

     createTableFromCfg();

}

}

SchemaExport 的create(script,export)方法根据持久类和映射文件先删除架构后创建删除数据库架构。有两个参数,第一个为True就是把DDL语句输出到控制台,第二个为True就是根据持久类和映射文件先执行删除再执行创建操作,经过调试可以发现这个方法其实质是执行execute(script,export, false, true)方法。execute(script, export, justDrop, format)方法根据持久类和映射文件先删除架构后创建删除数据库架构。有四个参数,第一个为True就是把DDL语句输出到控制台;第二个为True就是根据持久类和映射文件在数据库中先执行删除再执行创建操作;第三个为false表示不是仅仅执行Drop语句还执行创建操作,这个参数的不同就扩展了上面两个方法;第四个参数为false表示不是格式化输出DDL语句到控制台,是在一行输出的。

Spring配置文件中所定义的LocalSessionFactoryBean实现了org.springframework.beans.factory.FactoryBean接口,在使用ApplicationContext对象读取的时候可以自动转型为多种不同类型的SessionFactory,spring在装配的时候, 如果发现实现了org.springframework.beans.factory.FactoryBean接口,就会使用

FactoryBean#getObject() 方法返回的对象装配,具体的可以看下文档。如果你想拿到LocalSessionFactoryBean实例, 在id前面加个'&'就可以了,在你的配置文件中BeanFactory.getBean('&sessionFactory')拿到的就是LocalSessionFactoryBean的实例。


本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/yinianshen/archive/2009/07/02/4316809.aspx

Hibernate对象关系映射 一个对象/关系型映射一般定义在 XML 文件中。映射文件指示 Hibernate 如何将已经定义的类或类组与数据库中的表对应起来。 尽管有些 Hibernate 用户选择手写 XML 文件,但是有很多工具可以用来给先进的 Hibernate 用户生成映射文件。这样的工具包括 XDoclet, Middlegen 和 AndroMDA。 让我们来考虑我们之前定义的 POJO 类,它的对象将延续到下一部分定义的表中。 public class Employee { private int id; 阅读详情

相关推荐

使用Hibernate创建数据库表的步骤详解

Hibernate是一个开源的对象关系映射(ORM)框架,它为Java应用程序提供了一个数据持久层解决方案。通过Hibernate,开发者可以将普通的Java对象(Pojo)映射到关系数据库表,从而简化了数据库编程,提高了开发效率。在Java中,实体类(Entity)是一个可以映射到数据库表的对象。在Hibernate框架中,实体类通过@Entity注解来标识,以便Hibernate能够识别并管理它们。

weixin_33816734的博客 970

hibernate.hbm2ddl.auto配置

 hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下:      Hibernate Reference Documentation 3.3.1解释如下:Automatically validate or export schema DDL to the database when the SessionFactory is created.Wi

liudeh_009的专栏 880

hibernate正向工程和逆向工程

hibernate正向工程和逆向工程,我自己写的,有很好的插图,希望可以帮到有需要的人。

Hibernate初入门4--hbm2ddl

在hibernate的配置文件中,存在如下一段代码!! 1 <!-- Drop and re-create the database schema on startup --> 2 <property name="hbm2ddl.auto">create/create-drop/update/validate</property> 在学...

weixin_30907935的博客 177

hibernate.hbm2ddl.auto属性详解

详解hibernate.hbm2ddl.atuo 属性的配置

告别昂贵硬件!用Unity3D 2023 + ROS2 Humble搭建你的第一个SLAM仿真实验室(保姆级教程)

本文提供了一份详细的教程,介绍如何使用Unity3D 2023和ROS2 Humble搭建SLAM仿真实验室,无需昂贵硬件即可实现虚拟传感器模拟和算法测试。通过Docker容器配置、ROS2安装优化及Unity插件集成,开发者可以快速构建高精度的仿真环境,适用于自主导航、多传感器标定等场景。

weixin_42526353的博客 434

从零开始:大数据工程师的3个月速成指南(含学习资源+实战项目)

本文为零基础学习者提供大数据工程师的3个月速成指南,涵盖Python、Java、SQL等编程语言,大数据存储方案选型,Spark核心技能,以及日志分析系统和电商用户画像实战项目。通过精选学习资源和高效时间管理策略,帮助读者快速掌握大数据技术并完成可展示的项目成果。

weixin_30752699的博客 637

revit二次开发环境搭建(2024版)(小白友好)

revit二次开发环境配置,SDK、addin manager和lookup新手友好安装教程

m0_56961251的博客 1420

hibernate的对象与数据库表的映射

Customer.java /** * 客户管理的实体类 * @author zhang *CREATE TABLE `cst_customer` ( `cust_id` bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', `cust_name` varchar(32) NOT NULL COMMENT '客户名称(公司名...

zhang__liuchen的博客 1305

解决Android 14兼容性问题:NDK中arm64-v8a的正确配置方法

本文详细解析Android 14系统架构变化对NDK开发的影响,重点介绍arm64-v8a架构的正确配置方法。针对常见的兼容性问题如so库缺失、ABI不匹配等提供解决方案,并分享性能优化与自动化测试实践,助力开发者高效适配Android 14设备。

algae的博客 1222

从ST转国产ARM必看:GD32/APM32等5款芯片的SWD下载全攻略(含CH32特殊处理)

本文为从STM32转向国产ARM芯片的开发者提供了详细的SWD下载调试指南。针对GD32F103C8T6、APM32F103C8T6等五款热门国产芯片,详细说明了如何利用已有的ST-Link工具和Keil MDK环境进行程序烧录,并特别介绍了CH32F103芯片所需的独立器件库安装等特殊处理方法,帮助开发者实现平滑迁移,提升开发效率。

weixin_29195615的博客 278

hibernate的hbm2ddl配置

这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value=”none”。 create: 每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。 create-drop : 每次加载...

K8sCat 1万+

光学薄膜设计入门:Essential Macleod中文版从安装到实战全攻略

本文为光学薄膜设计初学者提供Essential Macleod软件从安装部署到实战应用的全流程中文指南。详细解析了软件核心界面、材料管理及工作流程,并通过一个完整的宽带增透膜设计实例,手把手演示膜系构建、优化与分析方法,帮助用户快速掌握这一业界标杆工具,跨越理论与实操的门槛。

weixin_29309475的博客 984

Hibernate项目搭建技术要点

一.Hibernate是什么? Hibernate: 冬眠 属于持久层框架: 操作数据库的框架. 属于ORM框架的范畴 二.ORM是什么? Object Relational Mapping: 对象关系映射型框架. 关系映射: 将java的对象对应数据库的表的一行数据. (java Object table row) 将java对象中的属性对应数据库表中的列. (Object field row column) 三.为什么要使用Hibernate? 1.可以自动生成连接管理类(B

m0_51538362的博客 257

Agent驱动电商运营:从选品到售后的全链路革新

在当今竞争激烈的电商市场中,传统的电商运营模式面临着诸多挑战。从选品到售后,每个环节都需要大量的人力投入和专业知识。选品需要深入了解市场趋势和消费者需求,营销需要精准定位目标用户,客服需要24小时响应用户咨询。这些工作不仅耗时耗力,而且容易受到人为因素的影响,导致效率低下和成本高企。AI Agent是一种能够感知环境、做出决策并采取行动的智能系统。感知能力:能够获取和处理环境信息。决策能力:能够根据感知到的信息做出决策。行动能力:能够执行决策,对环境产生影响。学习能力。

AI 领航者的博客 354

不加行也能填满:用 ABAP BDC 驯服 Table Control 滚动录制缺陷,批量维护供应商银行账户

摘要 本文探讨了在SAP ECC/S4HANA系统中处理供应商主数据时,Table Control控件带来的批量导入挑战。文章指出,银行账户维护界面中Table Control的滚动动作难以被录制工具捕捉,导致批量导入数据时仅能填充前5行。解决方案是通过BDC_OKCODE显式触发翻页(如=P+),并配合行号拼接(如(01)~(05))将数据写入不可见行。文中提供了完整的ABAP程序示例,展示了如何读取外部文件、动态生成BDCDATA、处理表格翻页逻辑,最终通过CALL TRANSACTION执行XK01事

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 272

Hibernate (开源对象关系映射框架)

一、基本介绍1、它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm(对象关系映射)框架,hibernate可以自动生成SQL语句,自动执行; Hibernate可以应用在任何使用JDBC的场合。 2、持久化层:处理关系型数据库(数据存储层)和模型对象(object,业务逻辑模型)的映射关系的代码方法(ORM)3、Hibernate是一个基于JDBC的主...

weixin_30419799的博客 1082

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

springboot根据实体类生成数据库表

spring.datasource.url=jdbc:mysql://localhost:3306/dbboy spring.datasource.username=root spring.datasource.password=1234 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #spring.mvc.view.pref...

qq_20867981的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

根据hibernate配置文件生成数据库建表脚本

import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; /**  * 根据hibernate配置文件生成数据库建表脚本  *  * @author zhang434

zhang434的专栏 1891

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

hibernate反向生成数据库表

第一步:添加Hibernate jar包,hibernate.cfg.xml写好数据源. 第二步:编写实体类; 第三步:编写实体类映射文件; 第四步:Main执行创建 public static void main(String[] args) {

coder_vince的专栏 1万+

hibernate通过配置自动生成数据库表

Spring和hibernate集合的框架中只要在applicationContext.xml文件中配置如下:&lt;prop key="hibernate.hbm2ddl.auto"&gt;update&lt;/prop&gt;Hibernate框架中只要在hibernate.cfg.xml里加上如下代码:&lt;property name="hbm2ddl.auto"&gt;update&lt...

dadoudou_1的博客 4012

Hibernate——自动创建数据库表 & 对象的三种状态

自动创建数据库表 如果需要Hibernate根据映射关系自动创建数据库,则需要配置hibernate.cfg.xml文件 &lt;property name="hbm2ddl.auto"&gt;create&lt;/property&gt; 这里有四个配置,分别是:create、update、create-drop和validate create:当我们的应用程序加载hibernate....

Gavin 1647

SpringBoot项目如何根据实体类生成数据库表

在Spring Boot中,可以使用JPA(Java Persistence API)与Hibernate来根据实体类生成数据库表。

战族狼魂的博客 2004

Hibernate之对象关系映射文件

一、对象关系映射文件 POJO类和关系数据库之间的映射可以用一个XML文档来定义 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 映射文件的拓展名为 .hbm.xml 1.映射文件说明 &lt;hibernate-mapping&gt; ​    &lt;class name="com.yfy.hibernate.entity.NewsEnti...

yfy的博客 746

Hibernate生成数据库表

首先创建实体类 import java.util.Date; public class ProductionEntity { public Integer getId() { return id; } public void setId(Integer id) { this.id = id; }...

dog60219的博客 211
上一篇: 关于 sessionState mode='InProc' 不用启动ASP.NET 服务
下一篇: Mysql 的 Cascade/Restrict/No action
wangzff
博客等级 码龄20年 22粉丝 31原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值