Hibernate的映射机制

对象关系映射(Object Relation Mapping(ORM))是一种为了解决面向对象与面向关系数据库互不匹配现象的技术,简而言之

ORM是通过使用描述对象之间映射的元数据,将java程序中的对象自动持久化到关系数据库中,这种映射机制从本质上来说

其实就是将数据从一种形式转化为另一种形式

Hibernate的基本映射数据类型

Hibernate的基本映射数据类型是java基本类型与标准SQL类型相互转化的桥梁,其关系

java类型----------->Hibernate的映射数据类型----------->标准SQL类型

通过Hibernate的基本映射数据类型可以非常方便地将数据从一种形式转化成另一个形式,完成高质量的ORM任务

...

<!--

name:这是持久化类User.java中一个String类型的属性

column:这是数据库表user中一个类型为char(20)的字段

type:这是Hibernate映射类型

-->

<property name="password"

column="password"

type="string"

...

>

datamap数据表

-----------------------------------------------------------------------------------------------

字段名称 数据类型
主键 自增 允许为空
描述

ID int(4)
是 增1 否
ID号

MYBOOLEAN bit(1)
逻辑型数据

MYINT int(5)
整型数据

MYLONG bigint(11)
长整型数据

MYFLOAT float(8,2)
单精度浮点型数据

MYDOUBLE double(10,2)
双精度浮点型数据

MYDECIMAL decimal(10,2)
Decimal型数据

MYSTRING varchar(100)
字符串数据

MYTEXT text
Text型数据

MYDATE date
Date型数据

MYTIME time
Time型数据

MYDATETIME datetime
Datetime型数据

MYTIMESTAMP timestamp
Timestamp型数据

MYBINARY varbinary(10240)
Binary型数据

MYBLOB longblob
Blob型数据

------------------------------------------------------------------------------------------------

其对应的持久化类Datamap.java

com.hephec.orm

import java.io.Serializable

public class Datamap implements Serializable{

private int hashValue=0;

private Integer id;

private Boolean myboolean;

private Integer myint;

private Long mylong;

private Float myfloat;

private Double mydouble;

private BigDecimal mydecimal;

private String mytext;

private String mytext;

private Date mydatel;

private Time mytime;

private Date mydatetime;

private Timestamp mytimestamp;

private byte[] mybinary;

private Blob myblob;

private Datamap(){}//构造方法

//getter...setter省略

}

datamap表与Datamap类的ORM映射文件Datamap.hbm.xml

<hibernate-mapping package="com.orm">

<class name="Datamap" table="datamap">

<id name="id" column="ID" type="Integer">

<generator class="identity"/>

</id>

<property name="myboolean" column="MYBOOLEAN" type="boolean"/>

<property name="myint" column="MYINT" type="integer"/>

<property name="mylong" column="MYLONG" type="long"/>

<property name="myfloat" column="MYFLOAT" type="float"/>

<property name="mydouble" column="MYDOUBLE" type="double"/>

<property name="mydecimal" column="MYDECIMAL" type="decimal"/>

<property name="mystring" column="MYSTRING" type="string"/>

<property name="mytext" column="MYTEXT" type="string"/>

<property name="mydate" column="MYDATE" type="date"/>

<property name="mytime" column="MYTIME" type="time"/>

<property name="mydatetime" column="MYDATETIME" type="timestamp"/>

<property name="mytimestamp" column="MYTEMESTAMP" type="timestamp"/>

<property name="mybinary" column="MYBINARY" type="binary"/>

<property name="myblob" column="MYBLOB" type="blob"/>

</class>

<hibernate-mapping/>

(1)创建数据访问DAO接口TestDAO.java

package com.DAO;

import com.ORM.*;

public interface TestDAO{

public void addDatamap(Datamap datamap);

public Datamap loadDatamap(Integer id);

public void delDatamap(Integer id);

}

(2)创建数据访问DAO接口实现TestDAOImpl.java

package com.DAO;

import com.ORM.*;

import org.hibernate.*;

public class TestDAOImpl implements TestDAO{

public void addDatamap(Datamap datamap){

Session session=MySessionFactory.currentSession();

Transaction ts=null;

try{

ts=session.beginTransaction();

session.save(datamap);

ts.commit();

}catch(Exception e){

if(ts!=null){

ts.rollback();

}

e.printStackTrace();

}finally{

MySessionFactory.closeSession();

}

}

public Datamap loadDatamap(Integer id){

Session session=MySessionFactory.currentSession();

Transaction ts=null;

try{

ts=session.beginTransaction();

datamap=(Datamap)session.get(Datamap.class,id);

ts.commit();

}catch(Exception e){

if(ts!=null){

ts.rollback();

}

e.printStackTrace();

}finally{

MySessionFactory.closeSession();

}

return datamap;

}

public void delDatamap(Integer id){

Session session=MySessionFactory.currentSession();

Transaction ts=null;

try{

ts=session.beginTransaction();

Datamap datamap=(Datamap)session.load(Datamap.class,id);

session.delete(datamap);

ts.commit();

}catch(Exception e){

if(ts!=null){

ts.rollback();

}

e.printStackTrace();

}finally{

MySessionFactory.closeSession();

}

}

}

(3)创建一个可供测试用的TestBean.java

package com.bean;

import com.ORM.*;

import java.io.*;

import java.math.BigDecimal;

import java.net.*;

import org.hibernate.*;

public class TestBean{

TestDAO dao=new TestDAOImpl();

//得到指定URL的html内容

private String getHtmlByUrl(String url){

StringBuffer hmtl=new StringBuffer();

String line=null;

try{

URL u=new URL(url);

URLConnection uc=u.openConnection();

BufferedReader br=new BufferedReader(new InputStreamReader(uc.getInputStream()));

while(line=(br.readLine())!=null){

html.append(line);

}

}catch(Exception e){

e.printStackTrace();

}

return html.toString();

}

//读取二进制流

private byte[] readBinary(InputStream in){

byte[] binCodes=null;

try{

binCodes=new byte[in.available()];

in.read(binCodes);

in.close();

}catch(Exception e){

e.printStackTrace();

}

return binCodes;

}

}

//从输出流中创建BLOB对象

private java.sql.Blob getBlob(InputStream in){

java.sql.Blob blob=null;

try{

blob=Hibernate.createBlob(in);

in.close();

}catch(Exception e){

e.printStackTrace();

}

return blob;

}

对象关系映射(Object Relation Mapping(ORM))是一种为了解决面向对象与面向关系数据库互不匹配现象的技术,简而言之

ORM是通过使用描述对象之间映射的元数据,将java程序中的对象自动持久化到关系数据库中,这种映射机制从本质上来说

其实就是将数据从一种形式转化为另一种形式

Hibernate的基本映射数据类型

Hibernate的基本映射数据类型是java基本类型与标准SQL类型相互转化的桥梁,其关系

java类型----------->Hibernate的映射数据类型----------->标准SQL类型

通过Hibernate的基本映射数据类型可以非常方便地将数据从一种形式转化成另一个形式,完成高质量的ORM任务

...

<!--

name:这是持久化类User.java中一个String类型的属性

column:这是数据库表user中一个类型为char(20)的字段

type:这是Hibernate映射类型

-->

<property name="password"

column="password"

type="string"

...

>

datamap数据表

-----------------------------------------------------------------------------------------------

字段名称 数据类型
主键 自增 允许为空
描述

ID int(4)
是 增1 否
ID号

MYBOOLEAN bit(1)
逻辑型数据

MYINT int(5)
整型数据

MYLONG bigint(11)
长整型数据

MYFLOAT float(8,2)
单精度浮点型数据

MYDOUBLE double(10,2)
双精度浮点型数据

MYDECIMAL decimal(10,2)
Decimal型数据

MYSTRING varchar(100)
字符串数据

MYTEXT text
Text型数据

MYDATE date
Date型数据

MYTIME time
Time型数据

MYDATETIME datetime
Datetime型数据

MYTIMESTAMP timestamp
Timestamp型数据

MYBINARY varbinary(10240)
Binary型数据

MYBLOB longblob
Blob型数据

------------------------------------------------------------------------------------------------

其对应的持久化类Datamap.java

com.hephec.orm

import java.io.Serializable

public class Datamap implements Serializable{

private int hashValue=0;

private Integer id;

private Boolean myboolean;

private Integer myint;

private Long mylong;

private Float myfloat;

private Double mydouble;

private BigDecimal mydecimal;

private String mytext;

private String mytext;

private Date mydatel;

private Time mytime;

private Date mydatetime;

private Timestamp mytimestamp;

private byte[] mybinary;

private Blob myblob;

private Datamap(){}//构造方法

//getter...setter省略

}

datamap表与Datamap类的ORM映射文件Datamap.hbm.xml

<hibernate-mapping package="com.orm">

<class name="Datamap" table="datamap">

<id name="id" column="ID" type="Integer">

<generator class="identity"/>

</id>

<property name="myboolean" column="MYBOOLEAN" type="boolean"/>

<property name="myint" column="MYINT" type="integer"/>

<property name="mylong" column="MYLONG" type="long"/>

<property name="myfloat" column="MYFLOAT" type="float"/>

<property name="mydouble" column="MYDOUBLE" type="double"/>

<property name="mydecimal" column="MYDECIMAL" type="decimal"/>

<property name="mystring" column="MYSTRING" type="string"/>

<property name="mytext" column="MYTEXT" type="string"/>

<property name="mydate" column="MYDATE" type="date"/>

<property name="mytime" column="MYTIME" type="time"/>

<property name="mydatetime" column="MYDATETIME" type="timestamp"/>

<property name="mytimestamp" column="MYTEMESTAMP" type="timestamp"/>

<property name="mybinary" column="MYBINARY" type="binary"/>

<property name="myblob" column="MYBLOB" type="blob"/>

</class>

<hibernate-mapping/>

(1)创建数据访问DAO接口TestDAO.java

package com.DAO;

import com.ORM.*;

public interface TestDAO{

public void addDatamap(Datamap datamap);

public Datamap loadDatamap(Integer id);

public void delDatamap(Integer id);

}

(2)创建数据访问DAO接口实现TestDAOImpl.java

package com.DAO;

import com.ORM.*;

import org.hibernate.*;

public class TestDAOImpl implements TestDAO{

public void addDatamap(Datamap datamap){

Session session=MySessionFactory.currentSession();

Transaction ts=null;

try{

ts=session.beginTransaction();

session.save(datamap);

ts.commit();

}catch(Exception e){

if(ts!=null){

ts.rollback();

}

e.printStackTrace();

}finally{

MySessionFactory.closeSession();

}

}

public Datamap loadDatamap(Integer id){

Session session=MySessionFactory.currentSession();

Transaction ts=null;

try{

ts=session.beginTransaction();

datamap=(Datamap)session.get(Datamap.class,id);

ts.commit();

}catch(Exception e){

if(ts!=null){

ts.rollback();

}

e.printStackTrace();

}finally{

MySessionFactory.closeSession();

}

return datamap;

}

public void delDatamap(Integer id){

Session session=MySessionFactory.currentSession();

Transaction ts=null;

try{

ts=session.beginTransaction();

Datamap datamap=(Datamap)session.load(Datamap.class,id);

session.delete(datamap);

ts.commit();

}catch(Exception e){

if(ts!=null){

ts.rollback();

}

e.printStackTrace();

}finally{

MySessionFactory.closeSession();

}

}

}

(3)创建一个可供测试用的TestBean.java

package com.bean;

import com.ORM.*;

import java.io.*;

import java.math.BigDecimal;

import java.net.*;

import org.hibernate.*;

public class TestBean{

TestDAO dao=new TestDAOImpl();

//得到指定URL的html内容

private String getHtmlByUrl(String url){

StringBuffer hmtl=new StringBuffer();

String line=null;

try{

URL u=new URL(url);

URLConnection uc=u.openConnection();

BufferedReader br=new BufferedReader(new InputStreamReader(uc.getInputStream()));

while(line=(br.readLine())!=null){

html.append(line);

}

}catch(Exception e){

e.printStackTrace();

}

return html.toString();

}

//读取二进制流

private byte[] readBinary(InputStream in){

byte[] binCodes=null;

try{

binCodes=new byte[in.available()];

in.read(binCodes);

in.close();

}catch(Exception e){

e.printStackTrace();

}

return binCodes;

}

}

//从输出流中创建BLOB对象

private java.sql.Blob getBlob(InputStream in){

java.sql.Blob blob=null;

try{

blob=Hibernate.createBlob(in);

in.close();

}catch(Exception e){

e.printStackTrace();

}

return blob;

}

时间: 2024-10-07 06:55:20

Hibernate的映射机制的相关文章

Hibernate关系映射基础

1.  Hibernate关系映射基础 1.1.  Doctype <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 指定根元素和dtd文件的命名空间. 1.2.  hibernate-mapping <hiberna

hibernate关联映射

本文可作为北京尚学堂马士兵hibernate课程的学习笔记. hibernate的映射,主要分为一对一,一对多,多对一,多对多,同时还要单向与双向的区别. OK,不要纠结于名字,我们开始看例子. 一对一单向 老公是一个实体,老婆也是一个实体. 一个老公只有一个老婆,同时一个老婆也只有一个老公. 上面的关系就叫做一对一. 什么叫单向呢. 看代码: package com.bjsxt.hibernate; @Entity public class Husband { private int id;

初识MFC----消息映射机制

一.MFC的消息映射机制 1.消息映射机制的使用 1.1类必须派生自CCmdTarget 1.2类内必须添加声明宏 DECLARE_MESSAGE_MAP 1.3类外必须添加实现宏 BEGIN_MESSAGE_MAP     END_MESSAGE_MAP 2.数据结构 struct AFX_MSGMAP_ENTRY  (宏展开的静态数组每个元素的类型) { UINT nMessage;   // 消息ID UINT nCode;      // 通知码 UINT nID;        //

hibernate enum映射详解

hibernate enum映射详解 在这里介绍注解的形式,如果想要了解XML配置的方式,可以自行查找相关资料. 例如以下Entity @Entity @Table(name = "t_user") public class User implements Serializable { /** * */ private static final long serialVersionUID = -9042615274714038279L; @Id @GeneratedValue(stra

【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表

上篇文章说的是每个类映射一张表,不管是父类还是子类.与上篇文章不同的是,这里是每个"具体类"映射一张表,什么意思呢?就是让每个子类(具体的.有意义的类)映射一张表. 场景 与上篇文章场景一样,如下类图 上图中Pig类和Bird类继承Animal类,要让每个具体类映射一张表,就是只映射Pig和Bird,如下表所示: (表 1) 上面的表有个特点就是,t_pig和t_bird的主键永远都不会相同.因为表面上看起来这是两张表,但实际上存储的都是动物(同一类型),所以还可以看做是一张表. 配置

Hibernate的缓存机制

一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据. 二.what(Hibernate缓存原理是怎样的?)Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存. 1.Hibernate一级缓存又称为“Session的

java框架篇---hibernate之缓存机制

一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据. 二.what(Hibernate缓存原理是怎样的?)Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存. 1.Hibernate一级缓存又称为“Session的

Java学习笔记-Hibernate关系映射

1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1(多对一,一对多): http://www.cnblogs.com/zilong882008/archive/2011/11/05/2236559.html 3. Hibernate关联映射 http://www.cnblogs.com/huxi/archive/2009/12/15/1624988.

使用oracle数据库和MySQL数据库时hibernate的映射文件.hbm.xml的不同

如果是使用oracle数据库,那么hibernate的映射文件.hbm.xml如下: <id name="xuehao" column="xuehao"> </id> 这个id不是数据库自动生成的,这需要注意:而且这些字段必须和实体类中相对应,实体类中还需要对应的get()方法和set()方法. 因为oracle数据库中的id都是自动生成的,所以这里不需要写数据库的id,这和MySQL数据库有很大区别:另外,MySQL数据库建表时必须指明id