浅析Hibernate映射(一)——基本映射
2015-08-31 10:21
351 查看
在说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 对象
表结构 t_user
实体类--->表,采用<class>标签映射
实体类中的普通属性(不包括集合、自定义类和数组)------->表字段,采用<property>标签映射
映射类:
[java] view
plaincopyprint?
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标识)
映射文件具体说明:
[html] view
plaincopyprint?
<!-- 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="Name" type="string"/>
<property name="password"column="Password" />
</class>
</hibernate-mapping>
注意:如果实体类的名称或实体类中属性的名称和数据库关键字重复,将会出现问题,可以考虑采用table属性和column属性对其进行重新命名
对象-关系映射(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 对象
表结构 t_user
实体类--->表,采用<class>标签映射
实体类中的普通属性(不包括集合、自定义类和数组)------->表字段,采用<property>标签映射
映射类:
[java] view
plaincopyprint?
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标识)
映射文件具体说明:
[html] view
plaincopyprint?
<!-- 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="Name" type="string"/>
<property name="password"column="Password" />
</class>
</hibernate-mapping>
注意:如果实体类的名称或实体类中属性的名称和数据库关键字重复,将会出现问题,可以考虑采用table属性和column属性对其进行重新命名
相关文章推荐
- H264 TS流的解码过程-ES-PES-DTS-PTS-PCR
- 国务院通过大数据发展行动纲要
- ios 数据加密
- hdu 5422 Rikka with Graph
- sql优化:使用存储提纲稳定sql执行计划
- Android怎么通过代码判断是否权限被禁止
- jquery失去焦点与获取焦点事件blur() focus()
- CUDA用于图像处理中的形态学开闭运算
- CentOS 6.5安装部署Glusterfs
- 接口和抽象类有什么区别?
- Unity 项目在设备上场景发白问题
- Unity 项目在设备上场景发白问题
- Scaling Node.js Applications
- eclipse tomcat maven热部署
- 英业达集团再次携手TechExcel,IT运维水平再添新助力
- javascript 折后保留一位小数
- 将apache添加为Linux系统自启动服务
- Kail Linux渗透测试教程之ARP侦查Netdiscover端口扫描Zenmap与黑暗搜索引擎Shodan
- 8月西部数码.wang域名注册量及市场份额统计报告
- MySQL Workbench批量更新或删除