zoukankan      html  css  js  c++  java
  • Hibernate入门

    1、Hibernate在SSH中的地位

    wKiom1d9qd3DATK1AABUe2AVxAI770.png

    SSH
    序号技术作用
    1 Struts 基于mvc模式的应用层框架技术!
    2 Spring 创建对象、处理对象的依赖关系以及框架整合!
    3 Hibernate 基于持久层的框架(数据访问层使用)!

    2、DAO层的代码是如何编写的?

    (1)操作XML数据

    (2)使用Jdbc技术

    a)原始的jdbc操作, Connection/Statement/ResultSet

    b)自定义一个持久层框架, 封装了dao的通用方法

    c)DbUtils组件, 轻量级的dao的组件;

    d)Hibernate技术【hibernate最终执行的也是jdbc代码!】

    3、ORM和Hibernate

    3.1、ORM的概念

    O,  Object  对象

    R, Realtion 关系  (关系型数据库: MySQL, Oracle…)

    M,Mapping  映射

    ORM, 对象关系映射!

    ORM, 解决什么问题?

    存储:  把对象的数据直接保存到数据库

    获取:  直接从数据库拿到一个对象

    想做到上面2点,必须要有映射

    3.2、Hibernate和ORM的关系

    Hibernate是ORM的实现!

    4、组件学习的三方面

    1、源码,引入jar文件

    2、配置(.xml or .properties)

    3、API

    5、Hibernate入门

    Hibernate开发步骤

    (1)下载源码

    版本:hibernate-distribution-3.6.0.Final,下载地址如下:

    https://sourceforge.net/projects/hibernate/files/hibernate3/3.6.0.Final/

    wKiom1d9qq_CSSSkAAEBci5PBo8390.png

    选择141.0MB的文件,它的文件格式是.zip格式的,而下面的文件是.gz格式的。

    解压之后,它的源码位于hibernate-distribution-3.6.0.Finalprojectcoresrc目录下

    (2)引入jar文件

    a)hibernate3.jar (核心文件)

        位于hibernate-distribution-3.6.0.Final目录下

    wKioL1d9q3WAlVnxAABCfClRNrQ225.png

    b)required (必须引入的jar,共6个)

        位于hibernate-distribution-3.6.0.Finallib equired目录下

    wKioL1d9q8LQyxGlAAAbK9yINt8148.png

    c)jpa 目录

        位于hibernate-distribution-3.6.0.Finallibjpa目录

    wKioL1d9rAfii4PdAAAI4Ao_OJE228.png

    d)数据库驱动包(我用的是mysql的驱动包)

    wKioL1d9rHDzBBZVAAAJlGMvEIk578.png

    (3)写对象以及对象的映射

    a)Employee.java            对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    import java.util.Date;
     
    public class Employee
    {
        private int empId;
        private String empName;
        private Date workDate;
        public int getEmpId()
        {
            return empId;
        }
        public void setEmpId(int empId)
        {
            this.empId = empId;
        }
        public String getEmpName()
        {
            return empName;
        }
        public void setEmpName(String empName)
        {
            this.empName = empName;
        }
        public Date getWorkDate()
        {
            return workDate;
        }
        public void setWorkDate(Date workDate)
        {
            this.workDate = workDate;
        }
    }

    b)Employee.hbm.xml        对象的映射 (映射文件)

    (.hbm可能是hibernate mapping的缩写)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     
    <!-- 
     
      This mapping demonstrates content-based discrimination for the
      table-per-hierarchy mapping strategy, using a formula
      discriminator.
     
    -->
     
    <hibernate-mapping package="com.rk.hibernate.a_hello">
         
        <class name="Employee" table="employee">
             
            <!-- 主键,映射 -->
            <id name="empId" column="id">
                <generator class="native"/>
            </id>
     
            <!-- 非主键,映射 -->
            <property name="empName" column="empName"></property>
            <property name="workDate" column="workDate"></property>
     
        </class>
         
    </hibernate-mapping>

    (4)主配置文件 src/hibernate.cfg.xml

    a)数据库连接配置

    b)加载所用的映射(*.hbm.xml)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     
    <hibernate-configuration>
        <!-- 通常,一个session-factory节点代表一个数据库 -->
        <session-factory>
            <!-- 1. 数据库连接配置 -->
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql:///test</property>    <!-- 等同于jdbc:mysql://localhost:3306/test -->
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">root</property>
            <!-- 
                数据库方言配置, hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql
             -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
             
            <!-- 2. 其他相关配置 -->
            <!-- 2.1 显示hibernate在运行时候执行的sql语句 -->
            <property name="hibernate.show_sql">true</property>
            <!-- 2.2 格式化sql -->
            <property name="hibernate.format_sql">true</property>
            <!-- 2.3 自动建表  -->
            <property name="hibernate.hbm2ddl.auto">update</property>
             
             
            <!-- 3. 加载所有映射 -->
            <mapping resource="com/rk/hibernate/a_hello/Employee.hbm.xml"/>
             
        </session-factory>
    </hibernate-configuration>

    (5)测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    package com.rk.hibernate.a_hello;
     
    import java.util.Date;
     
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.classic.Session;
     
    public class App
    {
        public static void main(String[] args)
        {
            // 对象
            Employee emp = new Employee();
            emp.setEmpName("张三");
            emp.setWorkDate(new Date());
             
            /*
             * 主体思路:Configuration-->SessionFactory-->Session
             * 细节:Session-->Transaction,必须由session创建transaction,否则无法保存。
             */
            // 获取加载配置文件的管理类对象
            Configuration config = new Configuration();
            config.configure();
            // 创建session的工厂对象
            SessionFactory sessionFactory = config.buildSessionFactory();
            // 创建session (代表一个会话,与数据库连接的会话)
            Session session = sessionFactory.openSession();
            // 开启事务
            Transaction transaction = session.beginTransaction();
            //保存数据
            session.save(emp);
            // 提交事务
            transaction.commit();
            // 关闭
            session.close();
            sessionFactory.close();
            System.out.println("Over");
        }
    }

    本文转自:http://blog.itpub.net/29917475/viewspace-2121485/

  • 相关阅读:
    详解java定时任务
    Java之Exception
    Java设计模式
    Java中的static关键字解析
    浅析Java中的final关键字
    深入理解Java的接口和抽象类
    一个故事讲清楚NIO
    Java并发编程:线程池的使用
    Java垃圾回收机制
    ubuntu sublime text 2 破解版
  • 原文地址:https://www.cnblogs.com/plan123/p/5650709.html
Copyright © 2011-2022 走看看