开篇前言
       在前面的博文中,小编分别介绍了【SSH系列】-- hibernate基本原理&&入门demo,通过这篇博文,小伙伴们对hibernate已经有了基本的了解,以及hibernate的核心,采用对象化的思维操作关系型数据库。
    【SSH系列】-- Hibernate持久化对象的三种状态 ,通过这篇博文的讲解,小伙伴们了解到java对象的生命周期,是从通过new语句创建开始,到不再被任何引用变量引用结束,结束后它占用的内存将被JVM垃圾回收机制收回。在hibernate中持久化类的对象可以划分为三种状态,分别是瞬态,持久态,脱管态。今天这篇博文,小编来介绍一下hibernate中的映射,还请小伙伴们多多指教哦。

首先,什么是映射

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。
        还记得在【SSH系列】-- hibernate基本原理&&入门demo这篇博文中,通过一个例子讲解了什么是hibernate,其中最重要的就是通过User.hbm.xml来实现映射,这里的映射就是对象关系映射,将对象数据保存到数据库中,同时可以将数据库中的数据读取到对象中,而作为开发人员,我们只需要对对象进行操作就可以完成对象数据库数据的操作。

       ORM的实现原理
       现在在Java领域大家对Hibernate的讨论很多,比如它的优缺点、如何应用、错误如何解决以及把它和Struts/spring等框架相结合作为整个系统的解决方案。Hibernate是如何实现ORM的功能?如果让我们自己开发一款实现ORM功能的框架需要怎么做?其实这些问题就是围绕着一个词,那就是“映射”,如果我们知道如何实现这种映射那么我们也能够开发出自己的一款ORM框架。会使用Hibernate的开发人员都知道,在使用它实现ORM功能的时候,主要的文件有:
       映射类(*.java):它的作用是描述数据库表的结构,表中的字段在类中被描述成属性,将来就可以实现把表中的记录映射成为该类的对象。
       映射文件(*.hbm.xml):它的作用是指定数据库表和映射类之间的关系,包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。
       数据库配置文件(*.properties或*.cfg.xml):它的作用是指定与数据库连接时需要的连接信息,比如连接哪中数据库、登录用户名、登录密码以及连接字符串等。现在数据库配置文件大多数采用*.cfg.xml这种形式,因为更加的灵活。

       Hibernate的映射分类

Hibernate的映射分类,小编简单的画了一张思维导图,如下所示:

接着,小编结合deom来具体的讲解一下基本映射。

  小试牛刀

第一步、我们使用XML配置映射代码如下:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjpowernode.hibernate">
	<class name="User3" table="t_user3">
		<id name="id" >
			<generator class="assigned"/>
		</id>
		<property name="name" length="30" unique="true" not-null="true"/>
		<property name="password"/>
		<property name="expireTime" column="expireTime" not-null="false" type="date"/>
		<property name="createTime" column="createTime" not-null="false" type="date"/>
	</class>

</hibernate-mapping>

第二步、建立实体类User3,代码如下所示:

package com.bjpowernode.hibernate;

import java.util.Date;

public class User3 {

	private int id;

	private String name;

	private String password;

	private Date createTime;

	private Date expireTime;

	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;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

	public Date getExpireTime() {
		return expireTime;
	}

	public void setExpireTime(Date expireTime) {
		this.expireTime = expireTime;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
}

第三步、编写hibernate.cfg.xml文件,将实体类User加入到hibernate.cfg.xml配置文件中,完成基本配置,代码如下所示:

<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory >
		<!-- MySql数据库驱动 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<!-- 数据库名称 -->
		<property name="hibernate.connection.url"> jdbc:mysql:///hibernate_basemapping</property>
		<!-- 数据库的用户名 -->
		<property name="hibernate.connection.username">root</property>
		<!-- 数据库的密码 -->
		<property name="hibernate.connection.password">123456</property>
		<!-- 方言:为每一种数据库提供适配器,方便转换 -->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<!-- 显示语句 -->
		<property name="hibernate.show_sql">true</property>
		<!-- 格式排版 -->
		<!-- <property name="hibernate.format_sql">true</property> -->
		<mapping resource="com/bjpowernode/hibernate/User3.hbm.xml"/>

	</session-factory>
</hibernate-configuration>

第四步、编写工具类ExportDB.java,代码如下所示:

package com.bjpowernode.hibernate;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
 * 将hbm生成ddl
 * @author 丁国华
 *
 */
public class ExportDB {

	public static void main(String[] args) {

		//默认读取hibernate.cfg.xml文件
		Configuration cfg = new Configuration().configure();
		SchemaExport export = new SchemaExport(cfg);
		export.create(true, true);
	}
}

第五步、编写客户端Client.java,添加用户数据到数据库,代码如下所示:

package com.bjpowernode.hibernate;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Client {

	public static void main(String[] args){

		//读取hibernate.cfg.xml文件
		Configuration cfg = new Configuration().configure();
		//建立SessionFactory
		SessionFactory factory = cfg.buildSessionFactory();
		//取得session
		Session session = null;
		try{
			session = factory.openSession();
			//开启事物
			session.beginTransaction();
			User3 user = new User3();
			user.setId(1000);
			user.setName("张三");
			user.setPassword("123");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());

			//保存user对象
			session.save(user);
			//提交事物
			session.getTransaction().commit();
		}catch (Exception e){
			e.printStackTrace();
			//回滚事物
			session.getTransaction().rollback();

		}finally{
			if (session != null){
				if(session.isOpen()){
					//关闭session
					session.close();
				}
			}

		}

	}

}

最后,来运行一下,看看我们的数据库,效果如下所示:


       小编寄语:该博文,小编主要介绍了hibernate中的基本映射,分别从什么是映射、ORM的实现原理、映射的分类、配上demo进行讲解,希望可以帮助有需要的小伙伴们,有不同意见的小伙伴欢迎在下方留言,在后续SSH系列博文中,小编将继续介绍hibernate的相关知识,敬请期待`(*∩_∩*)′。

【SSH系列】---Hibernate的基本映射的更多相关文章

  1. 【SSH系列】Hibernate映射 -- 继承映射

    开篇前言 在前面的博文中,小编介绍了hibernate中的映射,一对一,一对多,多对多,单向,双向等,今天这篇博文,小编主要来介绍一下hibernate中的继承映射,小伙伴都知道在C#中,如果想要实现 ...

  2. 【SSH系列】Hibernate映射 -- 一对一单向关联映射

     映射原理       一对一关联映射:两个实体对象之间是一对一的关联映射,即一个对象只能与另外唯一的一个对象相对应.有两种策略可以实现一对一的关联映射:       a.主键关联:即让两个对象具有相 ...

  3. 【SSH系列】Hibernate映射-- 多对一单向关联映射

    在hibernate中非常重要的就是映射,在前面的博文中,小编简单的介绍了基本映射,基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型 ...

  4. 【SSH系列】-- Hibernate持久化对象的三种状态

    在上一篇博文中,小编主要简单的介绍了[SSH系列]--hibernate基本原理&&入门demo,今天小编来继续介绍hibernate的相关知识, 大家知道,Java对象的生命周期,是 ...

  5. SSH:Hibernate框架(七种关联关系映射及配置详解)

    概念 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用. 分类 关联关系分为上述七种,但是由于相互之间有各种关系, ...

  6. Hibernate的集合映射(Set、List、Array、Map、Bag)

    POJOs如下: Customer类------>customer表   Order类对应---------->orders表  customer(1)<-------------- ...

  7. 工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

    上文中我们介绍<工作笔记2.软件开发经常使用工具> 从今天開始本文将教大家怎样进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个 ...

  8. ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存

    ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存 hibernate  : Hibernate是一个持久层框架,经常访问物理数据库 ...

  9. 同一个数据库实例,不同用户下多表创建视图,Hibernate完毕ORM映射,Spring整合,后台实现

    1.同一个数据库实例.同用户,多表创建视图 2.同一个数据库实例,不同用户下.多表创建视图 3.同一个数据库,不同数据库实例,多表创建视图 4.不同类型数据库,多表创建视图 1.同一个数据库实例.同用 ...

随机推荐

  1. [LeetCode] Split Array into Consecutive Subsequences 将数组分割成连续子序列

    You are given an integer array sorted in ascending order (may contain duplicates), you need to split ...

  2. [LeetCode] K Inverse Pairs Array K个翻转对数组

    Given two integers n and k, find how many different arrays consist of numbers from 1 to n such that ...

  3. 百度API-------热力图

    <!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content=& ...

  4. ActiveMQ笔记:源码分析

    本文对ActiveMQ的启动过程,以及BrokerService,TransportConnector和NetworkConnector等几个重要的模块的代码做一个简要的分析. 启动过程 如果要快速地 ...

  5. bzoj 2004: [Hnoi2010]Bus 公交线路

    Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距 离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决 ...

  6. 【转载】 HTTP 中 GET 与 POST 的区别

    HTTP 中 GET 与 POST 的区别   GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通 ...

  7. PTA 邻接表存储图的广度优先遍历(20 分)

    6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...

  8. Linux学习之CentOS(十)----Linux 的账号与群组

    Linux 的账号与群组 管理员的工作中,相当重要的一环就是『管理账号』啦!因为整个系统都是你在管理的, 并且所有一般用户的账号申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个服务 ...

  9. 关于Matchvs一些使用心得与建议

    我的项目是类似<贪吃蛇>玩法的一款IO游戏,就是几个玩家在游戏界面中可以吃食物,也可以相互吃,吃了食物或对方都会变大这样子.我是在用cocos creator做完前端开发的部分后,开始接入 ...

  10. ionic笔记

    ionic教程网站:http://www.ionic.wang/ 1.ui-router路由简介 https://blog.csdn.net/mcpang/article/details/551015 ...