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>

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

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


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

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

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

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

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

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

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

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

  4. Hibernate *.hbm.xml对象关系映射文件详解

    在hibernate中表与pojo对象是一一对应的,通过hbm文件将数据库表与实体关联起来,本文将对hbm文件进行介绍. pojo对象:提供了公共的无参构造方法 ,通过反射产生对象.          ...

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

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自 ...

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

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

  7. hibernate(四)__由表逆向创建Domain对象和对象关系映射文件

    之前我们是手写Domain对象和对象关系映射文件->然后生成数据库中的Table. 现在我们反过来先在数据库中建好Table->然后用工具生成Domain对象和对象关系映射文件. 步骤: ...

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

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

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

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

随机推荐

  1. 机器学习:python使用BP神经网络示例

    1.简介(只是简单介绍下理论内容帮助理解下面的代码,如果自己写代码实现此理论不够) 1) BP神经网络是一种多层网络算法,其核心是反向传播误差,即: 使用梯度下降法(或其他算法),通过反向传播来不断调 ...

  2. centos7 memcached+magent+keepalived集群

    111,222均部署keepalived,magent,memcached keepalived 111为主机,222为备机 其中,111上magent以本地memcache为主,222为备用 222 ...

  3. webkitAnimationEnd事件与webkitTransitionEnd事件

    写一个焦点图demo,css3动画完成以后要把它隐藏掉,这里会用到css3的事件,以前没有接触过,结果查了一下发现这是一片新天地啊,而且里面还有好多坑,比如重复动画多次触发什么的.anyway,我还是 ...

  4. C++中模板的使用

    为什么使用模板: C++重载(overloading),重载函数一般含有不同的参数个数或不同的参数类型.如果使用MAX函数对不同类型的求最大值,就要定义不同的重载函数: int max(int x,i ...

  5. [ZJOI2012]波浪弱化版(带技巧的DP)

    题面 \(solution:\) 这道确实挺难的,情况特别多,而且考场上都没想到如何设置状态.感觉怎么设状态不能很好的表示当前情况并转移,考后发现是对全排列的构造方式不熟而导致的,而这一题的状态也是根 ...

  6. mysql数据库备份和恢复

    1.数据库备份 mysqldump -uroot -proot jira736 > jira736.sql 2.数据库恢复 mysql -uroot -proot jira762 < ji ...

  7. Flask最强攻略 - 跟DragonFire学Flask - 第六篇 Flask 中内置的 Session

    Flask中的Session非常的奇怪,他会将你的SessionID存放在客户端的Cookie中,使用起来也非常的奇怪 1. Flask 中 session 是需要 secret_key 的 from ...

  8. java工程师之旅-一个月工作心得

    不知不觉,在工作中已经度过一个月,距离上次写文章已经好几个月了,正好还有二十分钟下班,抽点时间来写一下博文,写一下心得. 首先说一下,在我工作之前,做了一个项目,和一个外校大四的学生做一个毕业设计,一 ...

  9. JNI打通java和c

    1.JNI简介 The Java Native Interface (JNI) is a programming framework that enables Java code running in ...

  10. SpringBoot几个重要的事件回调、监听机制

    (1).需要配置在META-INF/Spring.factories 1.ApplicationContextInitializer // // Source code recreated from ...