从整理上讲,一个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. javaWeb学习总结(10)- EL函数库(2)

    一.EL函数库介绍 由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用. 这些EL函数在JSTL开发包中进行描述,因此在JSP页 ...

  2. while循环 操作列表与字典

    1.在列表间移动元素 #!/usr/bin/env python #filename=list.py num1 = [1,3,5,7,9,11,13,15] num2 = [] while num1: ...

  3. 【Java并发系列03】ThreadLocal详解

    img { border: solid 1px } 一.前言 ThreadLocal这个对象就是为多线程而生的,没有了多线程ThreadLocal就没有存在的必要了.可以将任何你想在每个线程独享的对象 ...

  4. ArrayList源码解读

    在端午节这个节日里,有一个特殊的任务,我带着你一起揭开"ArrayList"的真面目.从成员变量.构造函数.主要方法三部分,对ArrayList有进一步的认识,希望能够帮助你. 一 ...

  5. 关于用css实现文本和图片垂直水平居中

    关于用css实现文本和图片垂直水平居中   一直相信好记性不如烂笔头,最近遇到很多用到垂直居中的,整理一下以便日后查阅. 一.文本垂直水平居中 1.水平居中: 文字水平居中没什么好说的,用text-a ...

  6. Java中的系统时间

    System.currentTimeMillis()产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒数,Date()其实就是相当于Date(System.currentTimeMi ...

  7. css颜色值设置方式有哪些?以及如何随机一个颜色?

    网页中颜色的使用方式有一下几种 1.颜色名称 ,如red  black white 2.十六进制颜色,网页中常用,每两位代表红绿蓝的值的比例,  如 #ffffff白色   #000000黑色 3.r ...

  8. dede系统自定义变量删除方法

    之前添加了个联系电话的系统变量,忘记写描述,结果就显示个冒号,很难看.这样的就要删除了重来,那么织梦怎么删除添加的变量呢?其实很简单.两种方法: 第一种:执行SQL语句.在织梦后台执行-系统-SQL命 ...

  9. [BZOJ4518]征途

    4518: [Sdoi2016]征途 Time Limit: 10 Sec  Memory Limit: 256 MB Description Pine开始了从S地到T地的征途. 从S地到T地的路可以 ...

  10. Java基本之数据类型

    一.创建一个简单的Java应用程序 public class Code { public static void main(String[]args) { System.out.println(&qu ...