Hibernate 概述

  • 什么是 Hibernate

    • 一个 Java 领域的持久化框架
    • 一个 Java 领域的ORM 框架
  • 什么是持久化

    • 持久化是指把对象永久保存到数据库中
    • 持久化包括和数据库相关的各种操作(增、删、改、查)
  • 什么是 ORM

    • ORM 是指对象关系映射(Object/Relation Mapping)
    • ORM 将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转换为对对象的操作
    • 面向对象概念中的对应着面向关系概念中的对象对应着表的行属性对应着表的列(字段)
  • IDEA 下 Hibernate 开发步骤

    • 创建 Hibernate 项目
    • 在数据库下创建好对应的数据表
    • IDEA 下连接对应的数据库
    • IDEA 下反向生成实体类和对象-关系映射文件(*.hbm.xml)
  • 完善 hibernate.cfg.xml 文件

    • 如上所示为 IDEA 下自动生成的实体类以及配置文件,我们需要在配置文件中加入其他配置,如下(hibernate.cfg.xml

        <?xml version='1.0' encoding='utf-8'?>
      <!DOCTYPE hibernate-configuration PUBLIC
      "-//Hibernate/Hibernate Configuration DTD//EN"
      "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
      <hibernate-configuration>
      <session-factory>
      <!--数据库连接的基本信息-->
      <property name="connection.url">jdbc:mysql://localhost:3306/hibernate01</property>
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="connection.username">root</property>
      <property name="connection.password">zy961029</property> <!--Hibernate 的方言配置-->
      <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
      <!--执行操作时是否在控制台打印 SQL 语句-->
      <property name="show_sql">true</property>
      <!--是否对 SQL 语句进行格式化-->
      <property name="format_sql">true</property>
      <!--指定生成数据表的策略-->
      <property name="hbm2ddl.auto">update</property> <property name="c3p0.max_size">20</property>
      <property name="c3p0.min_size">5</property>
      <property name="c3p0.max_statements">5</property>
      <property name="c3p0.timeout">5000</property>
      <property name="c3p0.acquire_increment">5</property> <!--引入 hbm.xml 文件-->
      <mapping resource="com/myself/hibernate/test/NewsEntity.hbm.xml"></mapping>
      <mapping resource="com/myself/hibernate/many2one/test/CustomerEntity.hbm.xml"/>
      </session-factory>
      </hibernate-configuration>
  • Main 类解析(IDEA 新建 Hibernate 项目生成 Main 类的解析)

    • 后面我们对数据库的一系列操作都是在此类基础上进行,为了方便测试我们会将该类进行优化

        public class Main {
      private static final SessionFactory ourSessionFactory;
      // hibernate 4.0 之后新添加的对象,hibernate 的任何配置和服务都需要在该对象中注册后方才有效
      private static final ServiceRegistry serviceRegistry; static {
      try {
      Configuration configuration = new Configuration();
      configuration.configure(); serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
      ourSessionFactory = configuration.buildSessionFactory(serviceRegistry);
      } catch (Throwable ex) {
      throw new ExceptionInInitializerError(ex);
      }
      }
      // 从 SessionFactory 获取一个 session 对象,相当于 JDBC 中的 Connection 对象
      public static Session getSession() throws HibernateException {
      return ourSessionFactory.openSession();
      } public static void main(final String[] args) throws Exception {
      final Session session = getSession();
      // 开启事务。事务代表一次原子操作,它具有数据库事务的概念。所有持久层都应该在事务管理下进行,即使是只读操作
      Transaction transaction = session.beginTransaction();
      /*
      * 在这里对数据库进行增、删、改、查操作
      * */
      // 提交事务
      transaction.commit();
      // 关闭 Session 以及 SessionFactory
      session.close();
      ourSessionFactory.close();
      }
      }
  • Hibernate 配置文件 hbm2ddl.auto 属性: 由 java 代码生成数据库脚本, 进而生成具体的表结构. 。取值 create | update | create-drop | validate

    • create : 会根据 .hbm.xml 文件来生成数据表, 但是每次运行都会删除上一次的表 ,重新生成表, 哪怕二次没有任何改变
    • create-drop : 会根据 .hbm.xml 文件生成表,但是SessionFactory一关闭, 表就自动删除
    • update : 最常用的属性值,也会根据 .hbm.xml 文件生成表, 但若 .hbm.xml 文件和数据库中对应的数据表的表结构不同, Hiberante 将更新数据表结构,但不会删除已有的行和列
    • validate : 会和数据库中的表进行比较, 若 .hbm.xml 文件中的列在数据表中不存在,则抛出异常

对于IDEA 中 hbm2ddl.auto 属性应用还有点没搞清楚,还望大神指点!

IDEA 下新建 Hibernate 项目的更多相关文章

  1. Intellij Idea 15 下新建 Hibernate 项目以及如何添加配置

    1.说明:Idea 下,项目对应于 Eclipse 下的 workspace,Module 对应于 Eclipse 下的项目.Idea 下,新添加的项目既可以单独作为一个 Project,也可以作为一 ...

  2. Eclipse下新建Maven项目、自动打依赖jar包

    当我们无法从本地仓库找到需要的构件的时候,就会从远程仓库下载构件至本地仓库.一般地,对于每个人来说,书房只有一个,但外面的书店有很多,类似第,对于Maven来说,每个用户只有一个本地仓库,但可以配置访 ...

  3. eclipse下新建maven项目

    eclipse下新建maven项目 1.1下载maven安装包 进入Maven官网的下载页面:http://maven.apache.org/download.cgi,如下图所示:\ 选择当前最新版本 ...

  4. 在windows下新建maven项目

    1.拷贝settings到.m2文件下 2.修改文件 3.新建Project项目 4.转换为maven项目 config下转换 5.拷贝pom文件 6.新建目录 src/main/java src/m ...

  5. 096实战 在windows下新建maven项目

    1.拷贝settings到.m2文件下 2.修改文件 3.新建Project项目 4.转换为maven项目 config下转换 5.拷贝pom文件 <project xmlns="ht ...

  6. linux下新建svn项目

    1.新建项目svnadmin create /mnt/fbdisk/svn/newproject 2.会在svn下面建立newproject目录total 24drwxr-xr-x 2 root ro ...

  7. IDEA下新建Vue项目

    1.首先需要安装nodeJS,并配置全局环境变量. 2.在IDEA中新建一个空的project 3.在setting中配置JavaScript的语言版本为6 在file types的html中添加.* ...

  8. Eclipse下Maven新建Web项目index.jsp报错完美解决(war包)

    Eclipse下Maven新建Web项目步骤 1. 2. 3. 4. 5. 问题描述 最近用eclipse新建了一个maven项目,结果刚新建完成index.jsp页面就报错了,先把错误信息贴出来看看 ...

  9. eclipse新建web项目,发布 run as 方式和 new server然后添加项目方式。 后者无法自动编译java 成class文件到classes包下。

    eclipse新建web项目,发布 run as 方式和 new server然后添加项目方式. 后者无法自动编译java 成class文件到classes包下. 建议使用run as  -  run ...

随机推荐

  1. UNIX环境高级编程——线程和信号

    每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的.这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变.这样如果一 ...

  2. 使用GDAL库中的RPC校正问题

    最近将GDAL库更新至1.11版本之后,发现之前写的RPC像方改正模型校正的结果偏差特别大(更新版本之前结果和PCI处理的结果一致).所以初步判断是GDAL库的bug,经过各个参数修改发现原来是指定的 ...

  3. Win7/Win8/Win10下安装Ubuntu14.04双系统 以及常见问题

    整理自网络. 1. 制作镜像 将ubantu镜像刻录到优盘(我使用UltraISO刻录,镜像下载地址:链接: http://pan.baidu.com/s/1bndbcGv 密码: qsmb) 2. ...

  4. lk中内联调用的dsb()

    lk中内联调用的dsb() 比如lk的uart_dm_init()函数就调用了dsb() /* Configure the uart clock */ clock_config_uart_dm(id) ...

  5. nginx root、alias、location指令使用方法

    一.nginx root指令 1. Nginx配置 相关配置如下图: 通过配置root目录到"/wwwroot/html/"位置 在用虚拟主机方法,主机名称是test,需要大家配置 ...

  6. Android项目-高考作文项目架构(二)

    1, 普通的http json请求 请看下面架构草图: 这样就抽象出了其他Activity可能需要的Http Json请求的功能. 只要其他Activity有Http Json请求的需求都可以继承Ba ...

  7. React Native调试心得

    在做React Native开发时,少不了的需要对React Native程序进行调试.调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低Bug率.本文将向大家分享React Na ...

  8. Linux下修改主机名步骤

    Linux下修改主机名为gpdb 步骤一.运行vi /etc/sysconfig/network命令 NETWORKING=yesHOSTNAME=gpdb 步骤二.运行hostname gpdb命令 ...

  9. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十八):增加排行榜功能

    游戏大体上基本也就完成了,还差一个排行榜.否则如何激励各位选手创造新纪录呢? 排行榜功能也没什么难的,不过需要一点点排序的算法上的考虑. 这里我们把排行榜记录数据和排序都放在GameState类中,在 ...

  10. REHL5上安装salt-minion

    REHL5上安装salt-minion 本文适用于rhel5.4, 6.4, 7. 仅以el5.4为例. 1 在线安装方式极为简单: # wget --no-check-certificate -O ...