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+~)反引号,不然就要改列名;
<?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"> <!--
第一部分:映射文件:映射一个实体类对象,用来描述一个对象最终实现可以直接保存对象数据到数据库中
package(可选):要映射的对象即实体类所在的包,如果不指定package,那么下面所有的类都要指定全路径
-->
<hibernate-mapping package="com.bie.po">
<!-- 操作条件:(1):对象与表/(2):属性与字段的对应/(3):类型的对应,类型默认采用属性的类型,type不写的话
--> <!-- 第二部分:
(1):class:映射某一个对象的(一般情况下,一个对象写一个映射文件,即一个class节点);
name:指定要映射的对象的类型,实体类名称;
table:指定要映射的表,表名称;
(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方式;
-->
(3):普通字段映射:property
name:指定对象的属性名称;
column:指定对象属性对应的表的字段名称,如果不写默认与对象属性一致 ;
length:用于指定字符类型长度,比如字符串类型varchar(20),默认长度255;
type:用于指定表的字段的类型,如果不指定,会匹配属性的类型,包含两种类型;
java类型:必须写全名,比如java.lang.String,java.util.Date
hibernate类型:比如string,date,都是小写,不能写String(不能首字母大写)
注意:desc关键字,可以使用``(不是shift+~是直接~键)反引号或者改列名
-->
<class name="User" table="user">
<!-- 主键,映射 -->
<id name="id" column="id">
<generator class="native"></generator>
</id> <!-- 非主键,映射 -->
       <!--
非主键映射,普通字段的映射
name:字段的属性名称,其他字段可以不写;
column:对应的数据表的字段名称;
length:自定字符类型的长度,只能指定字符类型的,如果不指定,默认为255;
type:指定数据表的字段的类型,如果不指定会匹配属性的类型:
java类型:必须写全名,如java.lang.String;
hibernate类型:string类型;直接写类型,都是小写
  -->
<property name="name" column="name"></property>
<property name="password" column="password"></property>
<property name="email" column="email"></property>
<property name="phone" column="phone"></property> </class> </hibernate-mapping>

3hibernate核心对象关系映射 xxx.hbm.xml的更多相关文章

  1. 1-3 hibernate核心对象关系映射 xxx.hbm.xml

    详见  http://www.cnblogs.com/biehongli/p/6532800.html 1 <?xml version="1.0" encoding='utf ...

  2. [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. Hibernate的核心对象关系映射

    Hibernate的核心就是对象关系映射: 加载映射文件的两种方式: 第一种:<mapping resource="com/bie/lesson02/crud/po/employee. ...

  5. 【转】关系映射文件***.hbm.xml详解

    http://blog.sina.com.cn/s/blog_7ffb8dd5010144yo.html 附.Oracle使用标准.可变长度的内部格式来存储数字.这个内部格式精度可以高达38位. NU ...

  6. hibernate在配置文件中配置对象关系映射文件即hbm文件路径的写法

    hbm文件如果在src下,则<mapping resource="*.hbm.xml"/> 如果在实体类包中,则<mapping resource="c ...

  7. Hibernate (开源对象关系映射框架)

    一.基本介绍1.它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm(对象关系映射)框架,hibernate可以自动生成SQL语句,自动执行: Hibern ...

  8. JavaEE之Hibernate(开放源代码的对象关系映射框架)

    Hibernate(开放源代码的对象关系映射框架) 1.简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全 ...

  9. 死去活来,而不变质:Domain Model(领域模型) 和 EntityFramework 如何正确进行对象关系映射?

    写在前面 阅读目录: 设计误区 数据库已死 枚举映射 关联映射 后记 在上一篇<一缕阳光:DDD(领域驱动设计)应对具体业务场景,如何聚焦 Domain Model(领域模型)?>博文中, ...

随机推荐

  1. Elasticsearch 5.X 使用 Docker 运行使用 Head 插件

    ES 5.X 版本后就不支持 elasticsearch-head  以插件方式来安装了. for Elasticsearch 5.x: site plugins are not supported. ...

  2. axios跨域post请求后台参数为null

    查了一个小时的资料,大部分都是说设置headers  可能是我查找的关键词不对吧,最后找到一篇文章,把问题解决了 前端解决方式 官方文档 后台解决方式 教程参考地址:http://blog.csdn. ...

  3. 到网上收集了一个“高大上”的CSS3登入表单和大家分享一下

    要求 必备知识 基本了解CSS语法,初步了解CSS3语法知识. 开发环境 Adobe Dreamweaver CS6 演示地址 演示地址 预览截图(抬抬你的鼠标就可以看到演示地址哦): 制作步骤: 一 ...

  4. C语言使用hiredis访问redis

    Hiredis 是Redis数据库的简约C客户端库.它是简约的,因为它只是增加了对协议的最小支持,但是同时它使用了一个高级别的 printf-like API,所以对于习惯了 printf 风格的C编 ...

  5. 【详解】JNI (Java Native Interface) (二)

    案例二:传递参数给C代码,并从其获取结果 注:这里传递的参数是基本类型的参数,在C代码中有直接的映射类型. 此案例所有生成的所有文件如下: (1)编写案例二的Java代码,如下: 这里我们定义了一个n ...

  6. linux sticky

    文件的粘滞位(sticky)位是作什么用的? 普通文件的sticky位会被linux内核忽略, 目录的sticky位表示这个目录里的文件只能被owner和root删除 粘着位(Sticky bit) ...

  7. ActiveMQ专题2: 持久化

    AMQ的持久化问题 前言 ​ 前面一篇AMQ专题中,我们发现对于Topic这种类型的消息,即使将deliveryMode设置为持久化,只要生产者在消费者之前启动.消息生产者发布的消息还是会丢失.这是符 ...

  8. SpringMVC源码阅读入门

    1.导入 Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中.正式的名称“Spring Web MVC”来自于它的源模块(spring-w ...

  9. 并发编程之 ThreadLocal 源码剖析

    前言 首先看看 JDK 文档的描述: 该类提供了线程局部 (thread-local) 变量.这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局 ...

  10. [转]使用C#调用cmd来执行sql脚本

    本文转自:https://blog.csdn.net/tvmerp/article/details/1822669 下面是使用C#调用cmd来执行osql实现脚本的执行. using System; ...