从整理上讲,一个ORM框架(以hibernate为例)所涉及内容无非就是,如何映射,如何检索,还有事务处理。所以从这三方面入手,基本上可以保证将hibernate可以用到自己的项目之中。所以我先说一下我对orm的映射,欢迎吐槽,互相交流,共同进步。

1:ORM中设计对象模型

一个Java对象,域模型,保存在内存中。一个是数据库关系对象,保存在表中。

2:不考虑hibernate,JDBC持久化实体域

  就是采用原生jdbc语句,加载驱动,建立连接,(事务开启),创建句柄,执行查询(或者增删改),手动解析结果集初始化实体域,(关闭事务)

开发中一定不会用,了解一下就好

3:涉及ORM的分层 

说一下,在这里我开始的时候,直接用baseDao(抽象得dao层公共方法),然后在业务逻辑层写sql(被骂的狗血临头),实际上这是非常挫的设计。应该在持久层写sql代码。

4:orm映射

  原生jdbc去映射,一定不会有人用。一般都是采用orm中间件,比如hibernate,

常见的orm中间件hibernate mybatis topllink,    (java EE 中也有ORM框架,以JPA(java持久化接口)作为ORM框架的标准API)

5:  hibernate中 ORM映射的

5.1对象关系映射基础

 javaBean风格(提供get set)

     当session.save()时,调用getXXX(),拿到值保存到表

      当session.load(),调用setXXX()将值塞到实体域对象

 实体域中的 private 只是影响 实体对象,与hibernate无关。

 第二点:hibernate是通过反射获取的属性(如果不写get,set,只能是声明属性assess设置为field来反射得到)

 第三点:getXXX() setXXX()也可以带一些逻辑(一般不推荐,比如需要计算,可以写在get set方法。但是实际上应该写到业务逻辑层)

5.2  映射对象标识符

  ORM框架中区分业务主键与代理主键(一般都是用代理主键)在java对象中根据内存地址区分对象

5.3映射对象

   精粒度对象模型,粗粒度对象模型。映射组成关系

   建表的原则是:尽量减少过多的外键关系(影响效率)

   建对象模型的原则是:精粒度的对象,利于复用

    区分值类型与实体类型,具有组成关系的持久化类

5.4映射实体关联关系(我会单独博文说明)

  一对一,一对多,多对多。

   注意即使是一对一,从性能上讲也不要配置一对一,要配置一对多。

  多对多一般通过配置中间表。

    多对多的情况下 cascade 可以配置 save-update。但是不允许配置成all。因为级联删除的时候,多对多会有问题

  一对多的配置:

     一的一端采用Set来保存,多的一端保存一的对象。 级联更新让一的一端维护,提高效率。 一的一端比如Set a = new HashSet()最好初始化。

  在数据库中,多的一端保存外键ID,在关系型数据库中,实际上只支持多对一和一对一

5.5 hibernate类型映射

  基本属性映射,

  Date时间类型映射(标准sql中只有DATE,TIME,TIMESTAMP)

  大字段类型映射(BLOB和CLOB)

  hibernate也可以自定义映射类型

5.6映射继承关系

   实体类中也存在继承关系,数据库表中不存在继承关系

  需要自己考虑是映射父类,还是映射每一个子类

5.7映射值的类型(比如Set List Map)当然也有组件类型

     

【hibernate 初探】之 关系映射,ORM的更多相关文章

  1. 对象关系映射ORM

    对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效 ...

  2. Hibernate 中对象关系映射(ObjectRelationMapping)

    1.什么是对象关系映射? 解析:对象-关系映射(Object Relational Mapping,简称ORM,对象关系映射)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说, ...

  3. Hibernate多对多关系映射(建表)

    下边讲述Hibernate多对多关系映射. 多对多关系的表的结构为: 两个实体表,还包含一个关系表,关系表为复合主键,如果要使用Hibernate多对多关系映射,则关系表必须只包含两个字段,如果生成了 ...

  4. 菜鸟学习Hibernate——多对多关系映射

    Hibernate中的关系映射,最常见的关系映射之一就是多对多关系映射例如用户与角色的关系,一个用户对应多个角色,一个角色对应多个用户.如图: Hibernate中如何来映射这两个的关系呢? 下面就为 ...

  5. 菜鸟学习Hibernate——一对多关系映射

    Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生.如图: Hibernate中如何来映射这两个的关系呢? 下面就为大家讲解一下: 1.创 ...

  6. Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包

    Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...

  7. hibernate的对象/关系映射结果为空,exists查不到值的问题-20190823

    1: hibernate的对象/关系映射 情景:在使用@onetotone/@manytonone时关联结果为空 原因:在使用这个注解的时候,默认的时crossjoin(交叉连接),在进行查询时以及排 ...

  8. 对象-关系映射ORM(Object Relational Mapping)(转)

    ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现 Hibernate在实现ORM功能的时候主要用到的文件有:映射类(*.java).映射文件(*.hbm.xml)和数据库配置文件 ...

  9. Django 源码小剖: Django 对象关系映射(ORM)

    引 从前面已经知道, 一个 request 的到来和一个对应 response 的返回的流程, 数据处理和数据库离不开. 我们也经常在 views.py 的函数定义中与数据库打交道. django O ...

  10. Hibernate学习之关系映射(转)

    一.一对多 "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系.一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多.多对一:从订单的角度来说多个订单可以对应一 ...

随机推荐

  1. 在 eclipse 中将 web 项目部署到 tomcat 服务器上

    1.在 eclipse 中,选择 Window--->Preferences--->Server--->Runtime Environments,选择 Add 按钮 2.在弹出的对话 ...

  2. xml 和html 语言区别

    都是标记语言(ML),一个是超文本标记语言,一个是扩展标记语言. 不同之处: 1可扩展性:HTML不具备扩展性,而XML是原标记语言,可以用于定义新的标记语言. 2侧重点: HTML侧重于如何表现信息 ...

  3. 线程机制、CLR线程池以及应用程序域

    最近在总结多线程.CLR线程池以及TPL编程实践,重读一遍CLR via C#,比刚上班的时候收获还是很大的.还得要多读书,读好书,同时要多总结,多实践,把技术研究透,使用好. 话不多说,直接上博文吧 ...

  4. 打开Eclipse弹出“No java virtual machine was found..."的解决方法

    今天准备用Eclipse抓取Android应用崩溃log,打开Eclipse时发现运行不了有以下弹框 A Java Runtime Environment(JRE) or Java Developme ...

  5. 【2017-06-06】Ajax完整结构、三级联动的制作

    一.Ajax完整结构 $.ajax({ url:"Main.ashx", data:{}, dataType:"json", type:"post&q ...

  6. html表格表单标签的结合

    今天我尝试将表格表单基本标签结合起来放在网页中,发现再没用表单元素中<form></form>时各类标签功能都可显示,只是不能提交网页,所有与提交网页的标签都不能使用提交功能, ...

  7. 隐马尔科夫模型HMM(一)HMM模型

    隐马尔科夫模型HMM(一)HMM模型基础 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数(TODO) 隐马尔科夫模型HMM(四)维特比 ...

  8. 第一个CGI程序-----完全就是普通的c语言嘛‘(*∩_∩*)′

    第一个CGI程序 ----完全就是普通的C语言嘛  '(*∩_∩*)′ PainterQ 2017年5月14日 上一篇博文里面叙述了Apache的安装和配置方法,恍恍惚惚我就拥有了自己的第一个http ...

  9. ex2:逻辑回归及正则条件下的练习

    EX2 逻辑回归练习 ​ 假设你是一个大学某系的管理员,你想根据两项考试结果来确定每个申请人的录取机会.你有以前申请人的历史资料以作为逻辑回归的训练集.对于每一个训练集,你拥有每个申请人的两项考试的分 ...

  10. Winform中Chart图表的简单使用

    在常见的一些数据采集的系统中, 都少不了一个就是, 数据分析, 无论是报表的形式, 还是图形的形式. 他都是可以迅速的展现一个数据趋势的实现方法, 而今天, 就是简单介绍一下, 微软的工具库自带的 C ...