IDEA 下新建 Hibernate 项目

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 属性应用还有点没搞清楚,还望大神指点!

posted @ 2018-05-07 13:37  bgzyy  阅读(1248)  评论(0编辑  收藏  举报