浅析Hibernate映射(一)——基本映射
在说Hibernate映射之前,先下了解下面的概念。
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术,本质上就是将数据从一种形式转换到另外一种形式。
面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中
实现ORM的框架很多,其中当属Hibernate最为流行,下面通过几篇文章来看一下Hibernate是如何实现ORM的,即Hibernate的几种映射。
Hibernate在实现ORM功能的时候主要用到的文件有:
1、 映射类(*.java):它是描述数据库表的结构,表中的字段在类中被描述成属性,将来就可以实现把表中的记录映射成为该类的对象了。
2、映射文件(*.hbm.xml):它是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。
3、 hibernate核心配置文件(*.properties/*.cfg.xml):它指定hibernate的一些核心配置,包含与数据库连接时需要的连接信息,比如连接哪种数据库、登录数据库的用户名、登录密码以及连接字符串等。映射文件的地址信息也放在这里
基本映射:
java 对象
关系模型
实体类--->表,采用<class>标签映射
实体类中的普通属性(不包括集合、自定义类和数组)------->表字段,采用<property>标签映射
映射类:
- package com.jialin.hibernate;
- import java.util.Date;
- public class User {
- private int id;
- private String name;
- private String password;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
注:
实体类的设计原则:
* 实现无参的默认的构造函数
* 提供一个标识
* 建议不要使用final修饰实体类(因为采用load延时加载数据的时候会继承实体类生成代理对象)
* 建议为实体类生成getter和setter方法(如果不使用,需要用属性field标识)
映射文件具体说明:
- <!-- XML文件的声明 -->
- <?xml version="1.0"?>
- <!-- hibernate DTD文件的声明 -->
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <!-- 映射文件的根节点 -->
- <hibernate-mapping package="com.jialin.hibernate">
- <!--
- 对象关系映射的开始:class元素表示类和数据库中的表的映射关系。
- name属性指定持久化类(或者接口)的Java全限定名;
- table属性指定要映射的对应的数据库表名,如果省略,则以name作为表名
- -->
- <class name="User" table="t_user">
- <!--
- 持久化类对象的对象标识符(OID)和表的主键的映射关联:
- name属性指定类中作为OID的属性名;
- column属性表中主键字段的名字;如果省略,则以name作为字段名
- -->
- <id name="id" column="id">
- <!-- 指定对象标识符生成器:class属性指定生成器的类别名 -->
- <generator class="native" />
- </id>
- <!--
- 普通属性的映射:
- name属性:属性的名字,以小写字母开头;
- column属性:对应的数据库字段名.如果省略,则以name作为字段名
- type属性:指定Hibernate的映射类型、如果省略,则自动匹配
- -->
- <property name="name" column="user_name" type="string"/>
- <property name="password" />
- </class>
- </hibernate-mapping>
注意:如果实体类的名称或实体类中属性的名称和数据库关键字重复,将会出现问题,可以考虑采用table属性和column属性对其进行重新命名
浅析Hibernate映射(一)——基本映射相关推荐
- 浅析Hibernate映射(五)——集合映射
浅析Hibernate映射(五)--集合映射 集合映射主要包括:set.list.array.map的映射 对象模型: 映射后的关系模型: 映射文件: [html] view plaincopypri ...
- postgresql_如何使用Hibernate将PostgreSQL枚举映射到JPA实体属性
postgresql 介绍 开源的hibernate-types项目允许您映射JSON,ARRAY, YearMonth , Month或特定于数据库的列(例如INET地址). 在本文中,我们将看到使 ...
- Hibernate之对象关系映射文件
一.对象关系映射文件 POJO类和关系数据库之间的映射可以用一个XML文档来定义 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 映射文件的拓展名为 .hbm.xml 1.映射文件说 ...
- hibernate一对多关联映射
一对多关联映射 映射原理 一对多关联映射和多对一关联映射的映射原理是一致的,都是在多的一端加入一个外键,指向一的一端.关联关系都是由多端维护,只是在写映射时发生了变化. 多对一和一对多的区别 多对一和 ...
- 如何使用Hibernate将PostgreSQL枚举映射到JPA实体属性
介绍 开源的hibernate-types项目允许您映射JSON,ARRAY, YearMonth , Month或数据库特定的列(例如INET地址). 在本文中,我们将看到使用JPA和Hiberna ...
- hibernate注释映射_Hibernate一对一映射示例注释
hibernate注释映射 Today we will look into One to One Mapping in Hibernate. We will look into Hibernate O ...
- Hibernate第九篇【组件映射、继承映射】
前言 到目前位置,我们已经学习了一对一.一对多.多对一.多对多映射了-既然Hibernate是ORM实现的框架,它还提供了组件映射和继承映射..本博文主要讲解组件映射和继承映射 Java主要的类主要有 ...
- hibernate中一对一关系映射
这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正. 一对一映射(外键关联) 目标 假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作. 类编 ...
- Spring中的packagesToScan的方式配置hibernate的class文件映射规则的理解
Spring中的packagesToScan的方式配置hibernate的class文件映射规则的理解 1.持久化实体,使用自动扫描class的形式进行配置时,规则如下 (1)& ...
最新文章
- Ansible :一个配置管理和IT自动化工具
- PowerPC中断系统简介(一)
- c语言pause()函数(让进程暂停直到信号出现)
- js控制每行输出2个LI隔行换色
- 文件包含(include require)
- Linux iperf 网络传输性能测试工具
- DataGridView常用操作
- 虚拟机及CentOS7各个版本镜像下载地址
- 期刊论文公式编号、居中技巧
- Couldn‘t delete the database.MySQL said: Error dropping database (can‘t rmdir ‘./test‘, errno: 66)
- 哪些知乎收藏夹关注数超过一万?
- 关于过圣诞节的一段往事
- Hyper-V设置多个网口
- r5 5600u和锐龙r5 4500u的区别
- AutoLisp从入门到放弃(十七)
- 【生活记录】[2020年]上海居转户流程
- gnome状态栏图标消失的解决方法
- Django上传并显示图片
- 抖音云控PHP 18.7框架图 autojs脚本
- 华为,做千行百业与数字化间的破壁人
热门文章
- b丅151组成的充电器电路_555时基电路制作简单的水流控制开关
- 域名怎么绑定ip_服务器怎么绑定域名?
- criscriter英语测试软件,iTEST大学英语测试与训练系统
- npm install 报错 :stack Error: Can't find Python executable python
- Codeforces Round #378 (Div. 2) D - Kostya the Sculptor
- Spring-JDBC通用Dao
- FZU 2082 过路费
- 在javascript当中发现了一个没有调用者的方法。
- magento二次开发的基本步骤分享
- JavaFX学习之Web