从整理上讲,一个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. .net操作InI文件

    public class INI { public static string IniFileName = "";//路径 [DllImport("kernel32&qu ...

  2. Android框架式编程之BufferKnife

    配置 compile 'com.jakewharton:butterknife:(insert latest version)' annotationProcessor 'com.jakewharto ...

  3. Python字符处理

    字符串就是一系列字符.在python中,用引号括起来的都是字符串,这里的引号可以是单引号也可以双引号. 例如: >>> 'this is a string' 'this is a s ...

  4. jquery deferred done then区别

    jquery deferred done then区别 deferred是jquery 对promise的实现. 以下内容基于jquery 1.8及以上版本 deferred具有then done等属 ...

  5. 判断网站URL是否正常访问脚本

    #!/bin/bash [ -f /etc/init.d/functions ] && . /etc/init.d/functions function usage(){ echo & ...

  6. Javascript加载执行顺序

    本文主要内容 一.不同位置的script标签执行顺序 二.document.ready和window.onload的区别 一.不同位置的script标签执行顺序 整个加载的过程从解析头部开始,比如ht ...

  7. Node.js安装和配置

    今天有时间开始要研究Node.js了,项目的需要,先把环境正好,初次接触,把安装和配置过程记录下来,以备不时之需.言归正传. 1.打开NodeJS的官网,下载和自己系统相配的NodeJS的安装程序,包 ...

  8. HTTPS反向代理嗅探

    两年前的文章,一直在本地笔记放着,发现博客上竟然没存.发出来. 先说说什么是SSL:     SSL是Secure Socket Layer的简称,中文意思是安全套接层,由NetScape公司开发,用 ...

  9. Windows系统前端常用PS快捷键:

    1.设置滚轮放大缩小: 编辑--首选项--常规--用滚轮缩放 2.V 移动 ctrl+v 自动选中(图层), 3.M 选框 Shift+M 变换形状 Alt :确定圆形/矩形中心 Shift: 圆形/ ...

  10. 如何让.Net线程支持超时后并自动销毁!

    如何让.Net线程支持超时后并自动销毁! 1.使用CancellationTokenSource之基于Task实现方式 CancellationTokenSource source = new Can ...