Hibernate的核心对象关系映射

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Hibernate的核心就是对象关系映射: 加载映射文件的两种方式:   第一种:   第二种://便于测试,会自动加载映射文件:employee.hbm.xml        private static SessionFactory sf;          static{     ...

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

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL Java 数据库连接
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。
Hibernate 是一款开源 ORM(对象关系映射)框架,封装了 JDBC,允许以面向对象的方式操作数据库,简化了数据访问层的开发。通过映射机制,它可以自动处理对象与数据库表之间的转换,支持主流数据库,提高了代码的可移植性和可维护性。其核心接口包括 SessionFactory、Session 和 Transaction 等,通过它们可以执行数据库的 CRUD 操作。配置方面,需在项目中引入 Hibernate 及数据库驱动依赖,并创建 `hibernate.cfg.xml` 配置文件来设置数据库连接和 Hibernate 行为参数。
63 1
|
4月前
|
Java 数据库连接 数据库
|
4月前
|
Java 数据库连接 数据库
|
6月前
|
缓存 Java 数据库连接
解析Hibernate与JPA:Java对象的数据库化之旅
【6月更文挑战第25天】在Java企业开发中,Hibernate和JPA提供优雅的数据持久化方案。Hibernate是JPA规范的强大ORM实现,简化对象与数据库映射。配置环境后,通过@Entity注解定义实体类映射表,如`User`类映射&quot;users&quot;表。利用JPA的EntityManager执行查询和更新,如JPQL查询及对象更新。事务管理和性能优化是关键,确保数据完整性和应用性能。本文揭示了Hibernate与JPA的最佳实践,助开发者从容应对数据持久化。
56 0
|
6月前
|
存储 Java 数据库连接
深入探索Hibernate与JPA:Java对象与数据库表的桥梁
【6月更文挑战第25天】Java ORM如Hibernate和JPA简化了数据库交互。在电商系统案例中,JPA注解如`@Entity`、`@Table`、`@Id`定义了对象-表映射。Hibernate利用这些定义实现持久化,如`Session.save()`保存用户对象至数据库,降低了复杂性并提升了开发效率。
61 0
|
7月前
|
SQL Java 数据库连接
Hibernate - QBC和本地SQL对象检索详解
Hibernate - QBC和本地SQL对象检索详解
72 0
|
7月前
|
SQL Java 数据库连接
Hibernate - HQL对象检索详解
Hibernate - HQL对象检索详解
61 0
|
7月前
|
SQL 存储 Java
Hibernate - 继承关联关系映射
Hibernate - 继承关联关系映射
75 0
|
7月前
|
机器学习/深度学习 SQL Java
Hibernate - 多对多关联关系映射
Hibernate - 多对多关联关系映射
71 0