转载:http://blog.csdn.net/u010066934/article/details/49078445

【与ORM】

Object Relational Mapping,对象关系映射,将对象和关系联系了起来。面向对象是从耦合、聚合、封装等的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生,这样开发人员就可以以面向对象的思想来操作数据库。

实现ORM技术的框架有很多,.net的有NHibernate、EF、iBATIS.NET等,java的有mybatis、ibatis,当然还有Hibernate。

言归正传,我们这里介绍Hibernate,他是一个实现了ORM技术的框架。Hibernate对jdbc进行了封装,这使得我们操作数据库变得更加简单。本篇博客主要介绍Hibernate自动建表的功能。

【Demo】

我们以一个简单的例子来看,Hibernate是如何自动建表的。其中涉及到User类,以及他对应的映射文件User.hbm.xml,Hibernate的数据库配置文件hibernate.cfg.xml,后面我们会详细介绍各自的作用。

首先从实体开始,我们先来构造User类。

描述数据库表的结构,表中的字段对应类中的属性,数据库中的表对应一个类。

这里的User是一个java类,也可以叫作POJO对象。即Plain Ordinary Java Object,简单的Java对象,只有一些属性及其getter setter方法的类,没有业务逻辑。POJO对象可以方便程序员操作数据库中的表,进行get和set操作。

[java] view plain copy
  1. package com.hibernate;
  2. import java.util.Date;
  3. /**
  4. * 用户类
  5. * @author YANG
  6. *
  7. */
  8. public class User {
  9. //用户id
  10. private String id;
  11. //用户名称
  12. private String name;
  13. public String getId() {
  14. return id;
  15. }
  16. public void setId(String id) {
  17. this.id = id;
  18. }
  19. public String getName() {
  20. return name;
  21. }
  22. public void setName(String name) {
  23. this.name = name;
  24. }
  25. }

Uer类对应的映射文件User.hbm.xml,该配置文件中依据User实体类来建立的。具体建立时,可以一个实体一个映射文件,也可以多个实体配在一个映射文件中。

它指定数据库表(比如t_User)和映射类(User.java)之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。

[html] view plain copy
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping >
  6. <!-- 数据库默认表的名称和类名相同,
  7. 如果需要改变或类名为关键字时,
  8. 可以添加table="t_user"给表重命名 -->
  9. <class name="com.hibernate.User" ><!-- table="t_user" -->
  10. <!-- 映射主键 -->
  11. <id name="id">
  12. <!-- 主键生成策略,利用生成器 -->
  13. <generator class="uuid"></generator>
  14. </id>
  15. <!-- 利用property映射其他字段 -->
  16. <property name="name" ></property><!-- 若加上column="user_name",数据库字段名为user_name -->
  17. </class>
  18. </hibernate-mapping>

现在实体类和对应的映射文件已经都准备好了,还差数据库的连接了。配置内容包括数据库的驱动类,连接数据库的url,用户名和密码等等。这里用的是mysql数据库,需要注意的是,我们一定要把实体类的映射文件加入,不然无法获取。

[html] view plain copy
  1. <!DOCTYPE hibernate-configuration PUBLIC
  2. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  4. <hibernate-configuration>
  5. <session-factory>
  6. <!-- 驱动类 -->
  7. <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  8. <!-- 连接的url,数据库名称为hibernate_first -->
  9. <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>
  10. <property name="hibernate.connection.username">root</property>
  11. <property name="hibernate.connection.password"></property>
  12. <!-- 适配器,方言,用于翻译成mysql的语句 -->
  13. <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  14. <!-- 设置打印到控制台 -->
  15. <property name="hibernate.show_sql">true</property>
  16. <!-- 格式化sql -->
  17. <property name="hibernate.format_sql">true</property>
  18. <!-- 映射文件加入 -->
  19. <mapping resource="com/hibernate/User.hbm.xml"/>
  20. </session-factory>
  21. </hibernate-configuration>

之后我们建立一个测试类,来测试是否能够生成表。不过在执行该类之前,需要手动在数据库中建立相应的数据库,数据库的名称需要和配置文件保持一致。因为Hibernate只会自动建表,不会自动建库。

[java] view plain copy
  1. public static void main(String[] args){
  2. //读取的是properties文件
  3. //Configuration cfg=new Configuration();
  4. Configuration cfg=new Configuration().configure();
  5. //工具类
  6. SchemaExport export=new SchemaExport(cfg);
  7. //打到控制台,输出到数据库
  8. export.create(true, true);
  9. }

这个方法主要功能是将hbm生成ddl语句,进行建表。DDL是用来操作数据库、表、视图等,所以最终需要转换成ddl语句来完成建表。这样也比较麻烦,每次建表都要单独执行该类。还有一种方法,修改配置文件。每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表。但这个参数并不建议使用,正是因为每次加载都会重新生成表,会使得表中的数据丢失。

[html] view plain copy
  1. <properties>
  2. <property name="hibernate.hbm2ddl.auto" value="create" />
  3. </properties>

执行之后,控制台输入内容如下,去数据库里看一下,表就建好了。

[sql] view plain copy
  1. drop table if exists User
  2. create table User (
  3. id varchar(255) not null,
  4. name varchar(255),
  5. primary key (id)
  6. )

【小结】

之前就接触过自动建表这部分,但当时就只是照着做,没有去看是如何实现的,觉得好神奇啊。不过边用边总结一下,就会有恍然大悟的感觉,其实也就是这个样子啦。其实也是人家Hibernate-tool里面的工具类封装的好,像SchemaExport,如果没有这个东西,自动建表也是很麻烦的啊。不管是哪个巨人吧,还是先站在巨人的肩膀上了,然后再努力成为一个巨人!

【SSH】——Hibernate实现简单的自动建表相关推荐

  1. hibernate mysql 自动建表_配置hibernate根据实体类自动建表功能

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码update upda ...

  2. 配置hibernate根据实体类自动建表功能

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...

  3. 打包jar文件后的spring部署及hibernate自动建表经验总结

    楔子 用spring+hibernate做一个服务器运行程序,在部署到服务器时(打包成jar,在window server2008下运行),出现了以下两个纠结问题: 1. 加载不了Spring容器 2 ...

  4. hibernate自动建表到数据库及spring下自动建表到数据库

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...

  5. Springboot 之 Hibernate自动建表(Mysql)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 引入Maven依赖包 <dependency><groupId>org.sp ...

  6. Hibernate无法自动建表的缘故

    说一下我的缘故:根本原因是建表的SQL语句错误,不同的版本的hibernate-core包下的不同的Dialect使用的SQL是不一样的,我开启了show-sql后,控制台打印如下: Hibernat ...

  7. Hibernate自动建表

     建立表格,可以通过sql或者oracle工具直接在工具中创建表格,也可以通过Hibernate代码直接在配置文件中间接通过执行代码来创建表格. 在hibernate.cfg.xml添加这句话,就 ...

  8. Springboot,Mybatis根据实体类自动建表

    Springboot,Mybatis根据实体类自动建表 在创建实体类的同时还要在数据库建表,如果只是很少的属性那么无所谓,但是当实体类很多或者字段很多时这就是一个非常让人不爽的事情了 通常有两种思路, ...

  9. ShardingSphere笔记(三):自定义分片算法 — 按月分表·真·自动建表

    ShardingSphere笔记(二):自定义分片算法 - 按月分表·真·自动建表 文章目录 ShardingSphere笔记(二):自定义分片算法 - 按月分表·真·自动建表 一. 前言 二. Sp ...

最新文章

  1. pandas使用groupby函数进行分组聚合并使用agg函数将每个分组特定变量对应的多个内容组合到一起输出(merging content within a specific column of g
  2. 肯尼亚政府部署RFID系统进行车辆识别登记
  3. 题目1169:比较奇偶数个数
  4. 本地项目关联到远程git仓库
  5. raft论文 中文 pdf_八篇论文总结BERT+KG:预训练模型与知识图谱相结合的研究进展...
  6. 【bzoj4385】[POI2015]Wilcze doły
  7. Python 错误和异常小结[转]
  8. 比特币的原理及运作机制
  9. 4个mos管驱动的全桥电路原理_逆变器工作原理
  10. mysql 5.6 在线DDL
  11. 经典而常用的配乐和背景音乐合集(上)
  12. AI智能写作系统文章生成器,写原创文章更快更简单
  13. 通用软件滤波算法-前序
  14. win10怎么进入修复计算机,Win10怎么进入安全模式以及Win10:使用Windows恢复环境轻松修复...
  15. 习题7-3 判断上三角矩阵
  16. h5页面禁用手机识别
  17. FreeSWITCH实现在视频通话中某一方视频翻转
  18. 微大夫感冒舒缓仪亮相“2018健康陕西发展大会”回顾
  19. 锐龙r76800h和酷睿i512500h核显对比 r7 6800h和i5 12500h哪个好
  20. Mac远程操作Ubuntu共享文件

热门文章

  1. 安装linux可是c盘文件夹失败,硬盘安装linux失败,进不去以前的windows怎么处理?
  2. Vue父组件向子组件传值
  3. ubuntu 编译 hercules 主机安装 z/OS 教程
  4. Docker 快速安装 Mongodb
  5. asc码转换 linux_Linux网络服务04——FTP文件传输服务
  6. linux单用户模式single=1,Linux 单用户模式single mode
  7. 高级工计算机操作试题及答案,计算机系统操作高级工试题和答案[1]
  8. linux下无线网卡安装debian,Debian/Linux下无线网卡驱动的安装,网卡型号是「BCM43228」...
  9. 什么是缩量、放量、堆量
  10. 灰度实战(三):Apollo配置中心(3)