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哦,很实用的哦~..~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

第14课 组合查询创建组合查询union的使用规则

组合查询很容易理解就是讲多个查询的结果放在一起显示 使用UNION关键字进行查询的组合

532
来自专栏小二的折腾日记

LeetCode-8-String to Integer (atoi)

讲字符串转化为整型。当然过程很简单,但是需要考虑的乱七八糟的情况很多,空格和正负号之类的。提交了一百次,终于过了,但是看到别人的代码还是很气呀,还是得多写才行,...

673
来自专栏技术专栏

无向图最短路径问题升级版

问题: 无向图G有N个结点,它的边上带有正的权重值。 你从结点1开始走,并且一开始的时候你身上带有M元钱。如果你经过结点i, 那么你就要花掉S[i]元(可以把...

754
来自专栏Java帮帮-微信公众号-技术文章全总结

【数据库】MySQL进阶七、limit用法& varchar类型排序

【数据库】MySQL进阶七、 limit用法与varchar排序 limit用法 limit是mysql的语法 select * from table limi...

3256
来自专栏Java技术

为什么Java中1000==1000为false而100==100为true?

基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。

954
来自专栏用户2442861的专栏

Java中如何遍历Map对象的4种方法

既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtabl...

311
来自专栏Grace development

MySQL常用函数汇总

我整理的另一篇文章 MySQL常用系统表汇总 : https://blog.fastrun.cn/2016/07/10/1-27/

422
来自专栏顶级程序员

Java中的反射总结

刚开始学习Java的时候真的很难理解反射到底是个什么东西 一些书籍,哪怕是很经典的书籍都解释的让人感觉懵懵的,或许的确是我太笨 况且,网上说在将来学习框架的时...

3125
来自专栏微信公众号:Java团长

Java反射机制深入详解

  反射是java语言的一个特性,它允程序在运行时(注意不是编译的时候)来进行自我检查并且对内部的成员进行操作。例如它允许一个java的类获取他所有的成员变量和...

361
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列13

一、说出一些常用的类,包,接口,请各举5个 常用的类:BufferedReader BufferedWriter FileReader FileWirter ...

2583

扫码关注云+社区