Hibernate 总结(一):HelloWorld

来源:互联网 发布:手机摇一摇软件 编辑:程序博客网 时间:2024/05/21 16:21
1. ORM:ORM(Object/Relation Mapping): 对象/关系映射(理解)

     1). ORM 主要解决对象-关系的映射

          

     2).ORM的思想将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。

2. ORM 架构图:ORM 框架在开发中是一个什么样的地位(了解)

         
3. Hibernate 的 helloworld

1). 加入 jar 包:加入到当前项目的 classpath 下

hibernate-release-4.2.4.Final\lib\required\*.jar

MySQL 的驱动

2). 配置 hibernate 的配置文件:hibernate.cfg.xml

     ①. 利用 hibernate 插件生成 hibernate.cfg.xml


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
     <session-factory>
    
     </session-factory>
</hibernate-configuration>

     ②. 编辑 hibernate.cfg.xml 文件

I. 加入链接数据库的基本信息:

<!-- 配置连接数据库的基本信息 -->
     <property name="connection.driver_class" >com.mysql.jdbc.Driver</ property>
     <property name="connection.username">root </property>
     <property name="connection.password">mysql </property>
     <property name="connection.url" >jdbc:mysql:///hibernate4</ property>

II. 配置 Hibernate 使用的数据库方言:每一种数据库使用的基本语法会有细微的区别,例如分页 MySQL 使用 limit,而 Oracle 使用 rownum。这就
需要告诉 Hibernate 底层使用的是哪一种数据库

<!-- 配置 Hibernate 的数据库方言 -->
     <property name="dialect" >org.hibernate.dialect.MySQLInnoDBDialect</property >

注意:方言对应的类来自于 hibernate-release-4.2.4.Final\project\etc\hibernate.properties 中
       III. 编辑 Hibernate 的一般属性

              <!-- 创建数据表的策略(了解,最多使用的值是 update) -->

          <!-- 配置 hibernate 的一些基本属性 -->
     
            <!-- 创建数据表的策略 -->
           <property name="hbm2ddl.auto">update</property>
           <!-- 是否打印 SQL -->
           <property name="show_sql">true</property>
           <!-- 是否格式化 SQL -->
           <property name="format_sql">true</property>

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

3). 编写实体类(POJO)及 Hibernate 映射文件:xxx.hbm.xml

          I. 编写一个 POJO:必须包含一个 OID 字段和数据表主键对应;必须有一个无参数的构造器;为字段定义 getter、setter;非 final 类

        II. 由 hibernate 插件生成 xxx.hbm.xml 文件

      注意:需要对文件进行简单的修改:修改主键生成方式(使用 id 的 generator 子节点的 class 属性配置主键的生成方式,native 表示使用数据库本地的方式来
生成主键, MySQL 会自动的选用 auto_increment,而 Oracle 则使用序列的方式)

                     <generator class="assigned" /> 修改为 <generator class="native" />

         III. 在 hibernate 配置文件(hiberante.cfg.xml)中关联 hibernate 持久化类的映射文件

<!-- 关联 hibernate 映射文件 -->
     <mapping resource= "com/entities/News.hbm.xml" />

 4). 通过 Hibernate API 完成持久化操作

public class Main {
     public static void main(String[] args) {
           News news = new News();
           news.setAuthor( "lizhenwei");
           news.setContent( "Hibernate");
           news.setContent( "java-ORM");

            // 1. 创建 SessionFactory: Session 的工厂类.SessionFactory 是线程安全的,一般地,在一个 Java 应用中只有一个 SessionFactory 实例
           Configuration configuration = new Configuration().configure();
           ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                     .applySettings(configuration.getProperties())
                     .buildServiceRegistry();
           SessionFactory sessionFactory = configuration
                     .buildSessionFactory(serviceRegistry);
           
            // 2. 创建 Session: 表示 Hibernate 应用程序和数据库的一次会话
           Session session = sessionFactory.openSession();
           
            // 3. 开启事务
           Transaction transaction = session.beginTransaction();
           
            // 4. 执行持久化操作
            //save
            //session.save(news);
           
            // 利用 OID 加载对象
           News news2 = (News) session.get(News. class, 1);
           System. out.println(news2);
           
            // 5. 提交事务
           transaction.commit();
           
            // 6. 关闭 Session
           session.clear();
           
            // 7. 关闭 SessionFactory
           sessionFactory.close();
     }
}
0 0
原创粉丝点击