首页 > 代码库 > Hibernate映射解析(一)—— 基本映射
Hibernate映射解析(一)—— 基本映射
在了解Hibernate框架之前,我们应该先要了解对象-关系映射(ORM)和关系型数据库这两个概念。
对象-关系映射(ORM)主要是实现程序对象到关系数据库数据的映射。为什么这么说呢?
关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。
回顾我们以前开发的项目,我们在操作数据库过程中,都是在做一些映射的东西。例如,有一个User对象,我们需要做的就是把这个对象存到数据库里的哪个表,这个对象的属性对应数据库表的哪些字段,而要完成这些就需要映射。以往这些映射关系都是由我们自己来完成的。现在有了Hibernate框架,这些关系就可以由它来维护了。
Hibernate提供了几种映射方式:
Hibernate 基本组件:
- Hibernate 核心配置文件:Hibernate.cfg.xml文件,完成基本的配置
- 实体类(*.java):即映射类,描述对象名和属性,对应表中的表名和字段
- 映射文件(*.hbm.xml):指定映射类和数据库表的关系
基本映射
<!--声明Hibernate配置文件的开始--> <hibernate-configuration> <!--表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存HIbernate的配置信息,以及对Session的操作--> <session-factory> <!--配置数据库的驱动程序--> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 设置数据库的连接url;Localhost 表示mysql服务器名称,hibernate_basemapping表示数据库名 --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_basemapping</property> <!--连接数据库的用户名--> <property name="hibernate.connection.username">root</property> <!--连接数据库的密码--> <property name="hibernate.connection.password">root</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 是否在后台显示Hibernate用到的sql语句 --> <property name="hibernate.show_sql">true</property> <!-- 根据映射文件和数据库中的表对应起来,如果不一致,就更新表的结构 --> <property name="hibernate.hbm2ddl.auto">update</property> <mapping resource="com/bjpowernode/hibernate/User.hbm.xml"/> </session-factory> </hibernate-configuration>
2.实体类
package com.blackfox.hibernate; import java.util.Date; public class User { private String id; private String name; private String password; public String getId() { return 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; } }
实体类的设计原则:
- 实现无参的默认的构造函数
- 提供一个标识
- 建议不要使用fianl修饰实体类
- 建议为实体类生成getter和setter方法
实体类中的普通属性(不包括集合、自定义和数组)映射成表字段,采用<property>标签映射
<!-- 可在根元素声明包名 --> <hibernate-mapping package="com.bjpowernode.hibernate"> <!-- 使用class元素定义一个持久化类,name持久化类名,table对应数据库表名 --> <class name="User" table="t_user"> <!-- id 定义该属性到数据库表主键字段的映射 ,name 标识属性的名字,column表主键字段的名字,不写默认一样--> <id name="id" column="user_id" length="32" access="field"> <!-- <generator>:指定主键由什么生成,推荐使用uuid,assigned指用户手工填入 --> <generator class="uuid"/> </id> <!-- 为类定义一个持久化的javaBean风格的属性,name 属性的名字 --> <property name="name" length="30" unique="true" not-null="true"/> <property name="password"/> </class> </hibernate-mapping>
注意:如果实体类的名称或实体类中属性的名称和数据库关键字重复,将会出现问题可以考虑采用table属性和column对其进行重新命名。
Hibernate 处于持久层,是我们程序跟数据库打交道的桥梁,让我们以面向对象的方式来跟数据库打交道。好处:彻底封装了JDBC隐藏细节,带来移植性。缺点:封装的太彻底,不灵活,对大数据量的更新操作还有问题。
Hibernate 的基本映射只是冰山一角,下面还将为大家介绍Hibernate的几种关联映射。
Hibernate映射解析(一)—— 基本映射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。