Hibernate的核心对象关系映射

Hibernate的核心就是对象关系映射:

加载映射文件的两种方式:

  第一种:<mapping resource="com/bie/lesson02/crud/po/employee.hbm.xml"/>

  第二种://便于测试,会自动加载映射文件:employee.hbm.xml

       private static SessionFactory sf;
          static{
              //加载主配置文件,并且创建session工厂
             sf = new Configuration()
                      .configure()
                      .addClass(Employee.class)
                      .buildSessionFactory();
          }

  1:第一掌握映射文件的书写:

    <hibernate-mapping package="com.bie.po"> </hibernate-mapping>

  2:第二掌握如何映射某一个对象,以及class里面主键和普通字段的设置。

    <class name="User" table="user"></class>

    2.1:主键映射

       2.1.1:单列主键映射

<generator class=""></generator>

  主键映射:id
            主键生成策略:
                 identity:自增长(mysql,db2)
                 native:自增长[会根据底层数据库自增长的方式选择identity或者sequence]
                         如果是mysql数据库,采用自增长的方式是identity
                         如果是oracle数据库,使用sequence序列的方式是先自增长           
                 sequence:自增长(序列),oracle中自增长是以序列方法实现
                 increment:自增长,一般不用(会有并发访问的问题,一般在服务器集群环境使用会存在问题)
                 assigned:指定主键生成策略为手动指定主键的值
                 uuid:指定uuid随机生成全球唯一的值    
                 foreign:(外键的使用,one-to-one的时候使用)         

       2.1.2:多列作为主键映射

(1)如果找不到合适的列作为主键,除了用id列,我们一般使用联合主键,即多列的值作为一个主键,从而保证记录的唯一性。

(2)联合主键的创建:

   create table person2(
        name VARCHAR(20),
        age INT,
        sex VARCHAR(5),
        PRIMARY key(name,age)
   )         

(3)创建一个实体类存放两个主键作为属性,并且实现set和get,并且必须实现可序列化;

   之后这个实体类和数据表中非两个主键的字段构成一个新的实体类,并且实现set和get方法,

   <class name="非两个主键字段创建的实体类的类名"> 

     <!-- 复合主键映射 -->
           <composite-id name="两个主键创建的实体类new的对象名称">
                 <key-property name="第一个主键的名称" type="主键字段的类型"></key-property>
                 <key-property name="第二个主键的名称" type="主键字段的类型"></key-property>
           </composite-id>

    </class>           

    2.2:普通字段映射:property
              name:指定对象的属性名称;
              column:指定对象属性对应的表的字段名称,如果不写默认与对象属性一致 ;    
              length:用于指定字符类型长度,比如字符串类型varchar(20),默认长度255;
              type:用于指定表的字段的类型,如果不指定,会匹配属性的类型,包含两种类型;
                     java类型:必须写全名,比如java.lang.String,java.util.Date
                     hibernate类型:比如string,date,都是小写,不能写String(不能首字母大写)

      注意:property的column属性的值不能是sql语句的关键字,比如desc关键字做描述的时候,如果非要使用,

            可以使用``(shift+~)反引号,不然就要改列名;

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
 5
 6 <!--
 7     第一部分:映射文件:映射一个实体类对象,用来描述一个对象最终实现可以直接保存对象数据到数据库中
 8     package(可选):要映射的对象即实体类所在的包,如果不指定package,那么下面所有的类都要指定全路径
 9  -->
10 <hibernate-mapping package="com.bie.po">
11     <!-- 操作条件:(1):对象与表/(2):属性与字段的对应/(3):类型的对应,类型默认采用属性的类型,type不写的话
12      -->
13
14     <!-- 第二部分:
15         (1):class:映射某一个对象的(一般情况下,一个对象写一个映射文件,即一个class节点);
16               name:指定要映射的对象的类型,实体类名称;
17               table:指定要映射的表,表名称;
18         (2):主键映射:id        <!-- 主键自增的 -->            <!--                 主键生成策略,查看5.1.2.2.1.apiVarious additional generators                    *identify:自增长(mysql,db2)                    *native:自增长,会根据底层数据库自增长的方式选择identify或者sequence;                        如果是mysql数据库,采用的是自增长方式是identify;                        如果是oracle数据库,使用sequence序列的方式实现自增长;                    *sequence:自增长(序列),oracle中自增长是以序列方式实现的。                    increment:了解,自增长,会有并发访问的问题,一般在服务器集群环境使用会存在问题;                    assigned指定主键生成策略为手动指定主键的值                    uuid:指定uuid随机生成的序列号,唯一的值,为主键,uuid为string类型的                    foreign:外键的方式,one-to-one方式;             -->
19         (3):普通字段映射:property
20             name:指定对象的属性名称;
21             column:指定对象属性对应的表的字段名称,如果不写默认与对象属性一致 ;
22             length:用于指定字符类型长度,比如字符串类型varchar(20),默认长度255;
23             type:用于指定表的字段的类型,如果不指定,会匹配属性的类型,包含两种类型;
24                 java类型:必须写全名,比如java.lang.String,java.util.Date
25                 hibernate类型:比如string,date,都是小写,不能写String(不能首字母大写)
26                 注意:desc关键字,可以使用``(不是shift+~是直接~键)反引号或者改列名
27     -->
28     <class name="User" table="user">
29         <!-- 主键,映射 -->
30         <id name="id" column="id">
31             <generator class="native"></generator>
32         </id>
33
34         <!-- 非主键,映射 -->       <!--             非主键映射,普通字段的映射            name:字段的属性名称,其他字段可以不写;            column:对应的数据表的字段名称;            length:自定字符类型的长度,只能指定字符类型的,如果不指定,默认为255;            type:指定数据表的字段的类型,如果不指定会匹配属性的类型:                java类型:必须写全名,如java.lang.String;                hibernate类型:string类型;直接写类型,都是小写          -->
35         <property name="name" column="name"></property>
36         <property name="password" column="password"></property>
37         <property name="email" column="email"></property>
38         <property name="phone" column="phone"></property>
39
40
41     </class>
42
43 </hibernate-mapping>

格力,掌握核心科技,让消费者爱上中国造!!!

Hibernate,掌握映射核心知识,让老板给你升职加薪!!!~..~



 最后讲解一下如何查看Hibernate的api哦,很实用的哦~..~

 

时间: 2024-09-19 23:57:16

Hibernate的核心对象关系映射的相关文章

Hibernate及JPA 对象关系映射的简单映射策略

简单映射 近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场 热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink.Sun 公司在充分吸收现有的优秀 ORM 尤其是 Hibernate 框架设计思想的基础上,制定了新的 JPA(Java Persistence API)规范,对现在乱象丛生的持久 化市场带来一个标准,大有统一持久化市场的气势.JPA 是通过 JDK5.0 注解或 XML

Hibernate及JPA对象关系映射:关联关系映射策略

关联关系映射 关联关系映射,是映射关系中比较复杂的一种映射关系,总的说来有一对一.一对多和多对多几种 关系.细分起来他们又有单向和双向之分.下面我们逐一介绍一下. 单向 OneToOne 单向一对一是关联关系 映射中最简单的一种,简单地说就是可以从关联的一方去查询另一方,却不能反向查询.我们用下面的例子来举例说明,清 单 1 中的 Person 实体类和清单 2 中的 Address 类就是这种单向的一对一关系,我们可以查询一个 Person 的对应的 Address 的内容,但是我们却不能由一

Hibernate Core 4.0.0.Alpha1发布 Java语言对象关系映射解决方案

Hibernate是一种Java语言下的对象关系映射解决方案.它是使用GNU宽通用公共许可证发行的自由.开源的软件.它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架.Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有. 它的设计目标是将软件http://www.aliyun.com/zixun/aggregation/7155.html">开发人员从大量相同的数据持久层相关编程工作中解放出来.无论是从设计草案还是从一个遗留数据

Hibernate Core v4.0.0.Alpha3发布 对象关系映射框架

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是, Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任. Hibernate Core Version 4.0.0.Alpha3发行日志: Sub-task

ORM对象关系映射已成为炙手可热的技术

简单映射,是对象关系映射中最为简单的一种,也是最为基础的一种,学好简单映射是掌握继承映射,关联关系映射的前提所在. 近年来 ORM(Object-Relational Mapping,对象关系映射,即实体对象和数据库表的映射)技术市场热闹非凡,各种各样的持久化框架应运而生,其中影响最大的是 Hibernate 和 Toplink.Sun 公司在充分吸收现有的优秀 ORM 尤其是 Hibernate 框架http://www.aliyun.com/zixun/aggregation/8511.ht

急:SSH+Oracle||用hibernate进行多对多关系映射 出错 违反唯一性约束 奇怪

问题描述 Oracle 9i,使用hibernate,多对多的关系映射,级联操作的时候,出错了.我的数据库中表的主键是采用自增长的方式,序列+触发器进行的自增长.实体类与表的映射文件,如下<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.s

对象关系映射的作用

问题描述 对象关系映射的作用? 解决方案 解决方案二:自己看吧http://www.itisedu.com/phrase/200604231312115.html参考资料:http://www.itisedu.com/phrase/200604231312115.html解决方案三:(1)对象关系映射:ObjectRelationalMapping为了解决面象对象与关系数据存在的互不匹配的现象的技术.简单的说orm是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系

odb 2.0.0发布 C++对象关系映射系统

ODB 是一个开放源码.跨平台和跨数据库的C++++对象关系映射(ORM)系统.它可以将C++对象到http://www.aliyun.com/zixun/aggregation/22.html">关系数据库中,而无需手动编写的任何映射代码的表格.列数或SQL. ODB编译器自动生成的持久化类和数据库之间的执行转换,它是一个真正的C++编译器,可以生成由C++编译器轮流的可移植的 C++ 进行编译. ODB不是一个框架,它不会命令你如何写应用程序,但它可以按照适合你风格和体系结构设计的C+

详解PHP的Laravel框架中Eloquent对象关系映射使用_php技巧

零.什么是 EloquentEloquent 是 Laravel 的 'ORM',即 'Object Relational Mapping',对象关系映射.ORM 的出现是为了帮我们把对数据库的操作变得更加地方便. Eloquent 让一个 'Model类' 对应一张数据库表,并且在底层封装了很多 'function',可以让 Model 类非常方便地调用. 来看一段如下代码: <?php class Article extends \Eloquent { protected $fillable