第一步:下载Hibernate的开发包:
  http://sourceforge.net/projects/hibernate/files/hibernate3

第二步:Hibernate框架目录结构:
  documentation :Hibernate文档
  lib :Hibernate开发jar包
    bytecode :操作字节码jar包.
    jpa :Hibernate的实现jpa规范.
    optional :Hibernate的可选jar包.
    required :Hibernate的必须的jar包.
  project :Hibernate提供的工程

第三步:创建一个工程:(Java工程)
  导入相应jar包:
    hibernate3.jar
    HIBERNATE_HOME/lib/required/*.jar
    HIBERNATE_HOME/lib/jpa/hibernate-jpa-2.0-api-1.0.1.Final.jar
  导入日志记录的包:
    log4j-1.2.16.jar
    slf4j-log4j12-1.7.2.jar
  导入数据库驱动:
    mysql-connector-java-5.0.4-bin.jar

第四步:创建表:(关系型数据库)

create database hibernate3_day01;
use hibernate3_day01;
create table customer(
  id int primary key auto_increment,
  name varchar(),
  age int
);

第五步:创建一个实体类:(面向对象)

public class Customer {
  private int id;
  private String name;
  private int age;
  public int getId() {
    return id;
  }
  public void setId(int id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
}

第六步:创建ORM的映射
  映射文件只要是一个XML格式文件就可以.名字任意.通常情况下名称规范:实体类名称.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入约束 -->
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 建立类与表的映射 -->
<!-- class标签:用于映射类与表的关系 name :类的全路径 table:表名称 -->
<class name="cn.yzu.hibernate3.demo1.Customer" table="customer">
<!-- 建立类中属性与表中的字段映射 -->
<!-- 唯一标识 -->
<!-- 使用id的标签 配置唯一属性 -->
<!-- 在<id>标签中配置一个主键的生成策略. -->
<id name="id" column="id">
<generator class="native"/>
</id>
<!-- 普通属性 -->
<!-- property标签:映射类中的普通属性 name:类中的属性名称, column:表中字段名称 -->
<!--
type:三种写法
* Java类型 :java.lang.String
* Hibernate类型 :string
* SQL类型 :不能直接使用type属性,需要子标签<column>
* <column name="name" sql-type="varchar(20)"/>
-->
<property name="name" column="name" type="string"/>
<property name="age" column="age"/>
</class>
</hibernate-mapping>

第七步:创建一个Hibernate的核心配置文件
  通知Hibernate连接是哪个数据库.在src下创建一个hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!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>
<!-- 必须去配置的属性 -->
<!-- 配置数据库连接的基本信息: -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql:///hibernate3_day01
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!-- Hibernate的方言 -->
<!-- 生成底层SQL不同的 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<!-- 可选的属性 -->
<!-- 显示SQL -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL -->
<property name="hibernate.format_sql">true</property>
<!-- hbm:映射 to DDL: create drop alter -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 通知Hibernate加载那些映射文件 -->
<mapping resource="cn/yzu/hibernate3/demo1/Customer.hbm.xml" />
</session-factory>
</hibernate-configuration>

第八步:编写测试

@Test
// 向数据库中插入一条记录
public void demo1(){
  // 1.Hiberante框架加载核心配置文件(有数据库连接信息)
  Configuration configuration = new Configuration().configure();
  // 2.创建一个SessionFactory.(获得Session--相当连接对象)
  SessionFactory sessionFactory = configuration.buildSessionFactory();
  // 3.获得Session对象.
  Session session = sessionFactory.openSession();
  // 4.默认的情况下,事务是不自动提交.
  Transaction tx = session.beginTransaction();
  // 5.业务逻辑操作
  // 向数据库中插入一条记录:
  Customer customer = new Customer();
  customer.setName("任童");
  customer.setAge(28);
  session.save(customer);
  // 6.事务提交
  tx.commit();
  // 7.释放资源
  session.close();
  sessionFactory.close();
}

补充:Hibernate中的持久化类

  持久化类:实体类 + 映射文件.
  持久化类是有编写规范:
    提供一个无参数 public访问控制符的构造器(hibernate底层要用到反射
    提供一个标识属性,映射数据表主键字段 :
      java区分两个对象是否是同一个是使用地址.
      数据库区分两条记录是否一致是使用主键.
      Hibernate中区分持久化对象是否是同一个,根据唯一标识:
    所有属性提供public访问控制符的 set get 方法 :框架中存值和取值的时候使用.
    标识属性应尽量使用基本数据类型的包装类型
      若使用基本数据类型,如下例,当成绩是0时,并不能区分该同学是没有参加考试还是考试得了0分,如果使用包装类型,那么默认值是null,这是null就可以表示没有参加考试,而0就表示该同学考试得了0分
                  成绩表:
            学号      姓名      成绩
            1       张三      0
    持久化类尽量不要使用final进行修饰 :
      用final修饰的类是不能被继承.无法生成代理对象.(延迟加载的时候返回代理对象.延迟加载就失效.)

hibernate快速入门的更多相关文章

  1. (转)Hibernate快速入门

    http://blog.csdn.net/yerenyuan_pku/article/details/64209343 Hibernate框架介绍 什么是Hibernate 我们可以从度娘上摘抄这样有 ...

  2. 01.Hibernate快速入门

    第一步:下载Hibernate5的运行环境 https://sourceforge.net/projects/hibernate/files/hibernate-orm/ 第二步:在数据库创建表 Cr ...

  3. Hibernate快速入门实例

    Hibernate工程项目创建基本步骤:导包(Hibernate依赖包.SQL驱动包).编写实体类.编写ORM映射配置文件.编写核心配置文件.编写测试驱动. 整个工程项目结构如下图: 一.导包 笔者使 ...

  4. Structs+Spring+Hibernate快速入门

    Structs+Spring+Hibernate,这是很经典的一个搭配,它的开发流程也比较程式化,下面以用户注册为例.     注册页面代码: <%@page contentType=" ...

  5. Hibernate快速入门之CRUD

    一.Hibernate的基本概念 前言 Hibernate是一个ORM框架,ORM是Object Relational Mapping的缩写,即对象关系映射,也就是将面向对象思想的编程语言与关系型数据 ...

  6. 笔记47 Hibernate快速入门(四)

    Hibernate注解,完成原来xml文件里的映射信息. 使用注解时,要修改hibernate.cfg.xml中的映射,不再是通过xml文件 <mapping class="hiber ...

  7. 笔记46 Hibernate快速入门(三)

    Hibernate相关概念 一.事物概念 Hibernate的任何对数据有改动的操作,都应该被放在事务里面. hibernate中的事务由s.beginTransaction();开始由s.getTr ...

  8. 笔记45 Hibernate快速入门(二)

    Hibernate O/R 映射 一.多对一 一个Product对应一个Category,一个Category对应多个Product,所以Product和Category是多对一的关系.使用hiber ...

  9. 笔记44 Hibernate快速入门(一)

    一.Hibernate简介 Hibernate 是传统 Java 对象和数据库服务器之间的桥梁,用来处理基于 O/R 映射机制和模式的那些对象. Hibernate 架构是分层的,作为数据访问层,你不 ...

随机推荐

  1. 解压zip文件中文文件名乱码问题

    主要原因是,在windows下压缩文件时,是以系统的默认编码(gbk,gb18030)来压缩,zip文件并没有声明编码的格式,因此,linux下解压缩时,也会使用系统默认的格式(utf-8)解压缩,编 ...

  2. SharedPreferences详解(三)——存取图片

    MainActivity如下: package cc.sp; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputSt ...

  3. 【编程题目】求1+2+…+n, 要求不能使用乘除法、for、while、if、else、switch、case和条件语句

    看到这个问题,第一个反应是真变态啊. 然后,直觉是不能用循环就只能用递归了.可递归怎么跳出来却遇到了麻烦, 我连goto语句都考虑了也没弄好. 后来想到一个非常NC的方法:查找表. 如果n限定一个比较 ...

  4. POJ 1830 开关问题 (高斯消元)

    题目链接 题意:中文题,和上篇博客POJ 1222是一类题. 题解:如果有解,解的个数便是2^(自由变元个数),因为每个变元都有两种选择. 代码: #include <iostream> ...

  5. java获得本机IP,名称等

    import java.net.InetAddress; import java.net.UnknownHostException; public class GetLocalIP { public ...

  6. IOS- 应用程序生命周期(前后台切换,应用的各种状态)详解

    iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的.在后台时,程序会受 ...

  7. xth的旅行(codevs 1450)

    题目描述 Description 毕业了,Xth很高兴,因为他要和他的 rabbit 去双人旅行了.他们来到了水城威尼斯.众所周知(⊙﹏⊙b汗),这里的水路交通很发达,所以 xth 和 rabbit ...

  8. Codeforces Round #371 (Div. 2)(set\unique)

    B. Filya and Homework time limit per test 1 second memory limit per test 256 megabytes input standar ...

  9. SQL 映射的 XML 文件

    MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方. 对于所有的力量, SQL映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JDBC 代码来比较,你会发现映射文件节省了大 ...

  10. python 中内存映射二进制文件

    内存映射一个文件并不会导致整个文件被读取到内存中. 也就是说,文件并没有被复制到内存缓存或数组中.相反,操作系统仅仅为文件内容保留了一段虚拟内存. 当你访问文件的不同区域时,这些区域的内容才根据需要被 ...