`
yanfaguanli
  • 浏览: 658186 次
文章分类
社区版块
存档分类
最新评论

hibernate学习笔记(一)属性映射和关联关系映射

 
阅读更多

Hibernate的小小映射

Hibernate的映射本人给分为两种,一个是简单属性的映射,一个相对复杂属性的映射,复杂属性指的是set list map等。

简单的映射:(只列举一些常见的属性和常用的配置方法)

Private String name;

Private int gender;

Private Date birthday;

Private byte[] photo;

Private String desc; //description 的简写

对应的hibernate的映射配置:

<property name="name" column="" insert="true" not-null="true" update="true" length="" ></property>

红色字体的可以选择配置:属性介绍:

column="" 代表生成的表中的name属性对应的列名,如果不指定,则默认与name属性相同

not-null="true" 不允许为空

length: 一般在设置字符串类型,或者binary,blob等类型时,设置其最大的长度。

<property name="gender" type="int" />

最简单的基本设置

<property name="birthday" type="date" />

Type 为生成表时,该字段的类型,而日期的类型有多种:年月日,时分秒,年月日时分秒,每个都有其对应的值

<property name="photo" type="binary" length="512000"/>

Length属性表示了上传的图片最大为512000字节

<property name="desc" column="`desc`"/>

Column属性设置的是列名,但是该列名与关键字冲突,所以为了避免这一问题,加了两个反引号(左上角波浪形)

这里介绍一下对应的映射类型:hibernate—java-DB(需要注意的是,DB每种都有细节上的不同,这里仅是适用于大多数)

内置的映射类型

Hibernate

java

sql

取值范围

int或integer

int 或java.lang.Integer

INTEGER

4

long

Long或java.lang.Long

BIGINT

8

short

short Short

SMALLINT

2

byte

byte Byte

TINYINT

1

float

float Float

FLOAT

4

double

double Double

DOUBLE

8

big_decimal

java.math.BigDecinimal

NUMERIC

8位含2位小数部分

character

char Character String

CHAR(1)

定长字符

string

java.langString

VARCHAR

变长串

boolean

boolean Boolean

BIT

布尔

yes_no

boolean Boolean

CHAR(1)

布尔

true_false

boolean Boolean

CHAR(1)

布尔

Java的时间类型:

Hibernate

java

sql

取值范围

date

util.Date sql.Date

DATE

YYYY-MM-DD

time

util.Date sql.Time

TIME

HH:MM:SS

timestamp

util.Date sql.timestamp

TIMESTAMP

YYYYMMDDHHMMSS

calendar

java.util.Calendar

TIMESTAMP

YYYYMMDDHHMMSS

calendar_date

java.util.Calendar

DATE

YYYY-MM-DD

大对象类型:

Hibernate

java

sql

binary

byte[]

VARBINARY(BLOB)

text

String

CLOB

serializable

实现类

BARBINARY(BLOB)

clob

sql.Clob

CLOB

blob

sql.Blob

BLOB

JDK自带的个别java类的映射类型

Hibernate

java

sql

class

java.lang.Class

VARCHAR

locale

java.util.Locale

VARCHAR

timezone

java.util.TimeZone

VARCHAR

currency

java.util.Currency

VARCHAR

复杂对象的映射:(其实也没多复杂,就是set,list,map,object[]这些东西的映射)

这个会在用到的时候写

仔细想了想,还是和对象关系映射一起写吧,这样实用性也比较强

接上面的User继续谈:

一对多映射:

现在有一个实体Department部门:和User的关系是一对多(一个部门有多个员工),这里主要用的是set的映射。

private Long id;

private String name;

private String desc;

private Set<User> set;

这个时候在User实体中也要加一个属性就是:private Department department;

对应的配置文件:

<class name="Department" table="test_department" >

<set name="set" >

<key column="departmentId" ></key>--------在department

<one-to-many class="User" />

</set>

</class>

<class name="User" table="test_user" >

<many-to-one name="department" class="Department" column="departmentId"></many-to-one>

</class>

User表中一个外键列departmentId,

下面仔细描述一下这些属性之间的关系:

如果我们自己写这个一对多的对应关系的映射,那么我个人建议先从多的一方写起,在这里就是User,我们的建表规则一般就是默认的在多的一方建外键,这个时候,在User里面维护一个属性Department,其与department的对应关系是多对一,所以写<many-to-one> name属性就是我们维护的属性的名字,class就是其对应的类,最后一个column是最关键的,它标志着,在我们即将自动生成的User表中的外键列—这里是departmentId,而在department表中对应的实体映射(这里应该参照javabean)应该为set, 并且是一的一方,所以为<one-to-many>,但是<set>必须要添加一个<key>属性,key中有一个column属性,这个<key>可以什么都不指定,就<key />就可以,这样默认的就会引用刚才我们配置的外键列departmentId,如果指定并且和User的外键列一致,那么就会在User表中只有一个外键列departmentId(建议这么配置),如果<key column=?>这个属性配置的和User引用的外键列不一致,那么就会在user表中生成两个外键列。造成冗余。

多对多映射:用户-----岗位

我们再添加一个实体岗位:station

private long id;

private String name;

private Set<User> user;

并且这时我们要在User实体中添加一个新的属性:

private Set<Station> station;

首先我们已经分析出了用户与岗位是多对多的关系,那么我们最明白的就是这个时候为了表述清楚他们之间的关系,我们必须建立一个中间表。这个时候配置如下:

先配置User:

<set name="station" table="user_station">

<key column="userId"></key>

<many-to-many class="Station" column="stationId" ></many-to-many>

</set>

配置station:

<set name="user" table="user_station">

<key column="stationId"></key>

<many-to-many class="User" column="userId"></many-to-many>

</set>

还是依次介绍这些属性,name就不用说了吧就是写实体bean时候的那个属性名。Table是中间表的表名,这两个多对多关系的配置的该属性必须一致。<key column=?>这个属性名和在对应关系的<many-to-many 中column属性必须一致。这个就不像一对多那种随意的控制,因为这个column的值是要相互引用的,所以也必须保持一致,否则的话就会出现中间表里的列增多了。不是我们想要的结果。相对来说我们平日分析最麻烦的多对多的关系,现在倒是很好配置了。

(不支持图片。。本来想把映射这里用图片的。)

如有错误,请您批评与更正!!!

分享到:
评论

相关推荐

    hibernate学习笔记

    Hibernate 学习笔记 Hibernate 学习笔记 1 第一个hibernate项目(hibernate_first) 2 测试实体对象的生命周期(hibernate_session) 3 hibernate基本映射(hibernate_basemapping) 4 class实体类---表 4 标签id 5 ...

    Hibernate学习笔记

    007 Hibernate 基本映射标签和属性介绍 008 多对一 关联映射 009 一对一 主键关联映射_单向 010 一对一 主键关联映射_双向 011 一对一 唯一外键关联映射_单向 012 一对一 唯一外键关联映射_双向 013 session_flush ...

    Hibernate学习笔记和资料

    hibernate中一对一,一对多,多对多关系的配置,延迟加载,cascade,inverse hibernate查询方式概述,HQL查询,QBC查询,分页,结果集封装方式 ,高级查询 查询的优化,一级缓存,二级缓存,批量查询,注解方式

    Spring和Hibernate学习笔记

    第四课:hibernate多对一关联映射 ...................... Spring: 第一课:构建Spring的环境并建立一个例子 第三课:spring Bean的作用域 第四课:spring对AOP的只是(采用Annotation的方式) 第五课:spring对AOP...

    Hibernate学习笔记_songjignhao_1

    自己记录的学习笔记,内容很详细,有代码,包括:一对多双向关联关系、一对多双向自身关联关系、一对一关联关系(主键关联、外键关联)、一对多与一对一结合、多对多关联关系、Map、Set、List与Bag映射关系、查询...

    Hibernate3 学习笔记.ppt

    Hibernate3 学习笔记.ppt 一、O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) 四、Hibernate Annotations 五、持久化对象的状态和生命周期 六、Hibernate查询 七、Hibernate最佳实践 ...

    Hibernate学习笔记(java的)

    Hibernate学习笔记(java的) 包括基础的使用和配置,有Hibernate的控制事务,映射关系等内容。 可快速入门,也可当手册使用。 更多:http://download.csdn.net/user/daillo/all

    Hibernate3.2学习笔记

    Hibernate环境搭建 Hibernate主要接口 Hibernate主要映射 Hibernate的lazy、fetch、cascade等策略 Hibernate性能优化

    Hibernate入门教程学习笔记

    这是一个Hibernate入门学习的不错资源,主要内容包括Hibernate主配置文件的讲解、映射普通属性、映射主键、映射集合、映射关联关系(一对多多对一、多对多、一对一)、HQL查询等内容,最后给出一个综合练习案例

    Hibernate学习笔记(1)

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

    Hibernate学习笔记(3)

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

    Hibernate学习笔记(2)

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

    Hibernate笔记 马士兵

    第9课 Hibernate的重点学习:Hibernate的对象关系映射 12 一、对象---关系映射模式 12 二、常用的O/R映射框架: 13 第10课 模拟Hibernate原理(OR模拟) 13 一、 项目名称 13 二、 原代码 13 第11课 Hibernate基础配置...

    JPA学习笔记-EJB-04JPA关联映射总结

    感觉JPA关联映射实现感觉比Hibernate配置文件的关联映射几乎一样,只是引入了“零配置”这个概念。劣者自己在做一个东西的时候用到了关联映射,在此将它做一个总结。留给自己回顾用。

    Hibernate实体映射

    里面包含Hibernate实体映射的具体实例代码,还有相关教程笔记,喜欢的可以学习学习。

    hibernate的学习笔记

    hibernate的word笔记,其中包括了初始的hibernate的关系映射,以及各种关于hibernate的相关知识,配置之类的

    hibernate 3.3学习笔记

    第10课 模拟Hibernate原理(OR模拟) 第11课 Hibernate基础配置 第16课 关系映射(重点 Annotation注解)

Global site tag (gtag.js) - Google Analytics