zoukankan      html  css  js  c++  java
  • MyBatis ORM概念和原理(三)

    ORM 概念

    我们在介绍 MyBatis 时说到,MyBatis是一种半自动 ORM 实现。那何为 ORM,何为半自动?

    ORM(Object/Relation Mapping,对象/关系数据库映射)是一种描述对象与关系数据库之间映射的规范。怎么理解呢?就拿班规来说吧,它也是一种规范,描述学生与班集体之间行为的规范。

    ORM 作用

    我们知道班规的作用是约束学生的不良行为,目的是营造良好的班级学习氛围。那ORM的作用呢?ORM 作用是为对象与关系数据库之间搭建桥梁,以解决对象与关系数据库之间不协调的问题。

    那对象与关系数据库之间到底哪里不协调了?我们都知道在 Java 一种面向对象的编程语言,在 Java 世界里万物皆对象,就是说 Java 编程玩的就是对象,涉及的核心概念就是对象、类和属性。我们回头再看关系数据库,它操作的是对象吗?它能否直接存储对象到数据库或者从数据库直接获取对象?显然不能,如果可以那就不叫关系数据库,而应该叫对象数据库。我们可以说,在关系数据库的世界里,万物皆关系,玩的就是二维表,涉及的核心概念是表、记录和字段

    所以,Java对象和关系数据库如同马和牛,简直是牛头不对马嘴,存在不协调的问题。那这个不协调的问题导致怎样的结果呢?导致的结果就是我们在数据库编程时,使用 JDBC 从数据库里获取的不是对象,而是一个个数据库字段,需要手动创建一个 Java 对象实体,再把这些字段存放到 Java 对象实体的属性里。代码如下:

    // 从数据库获取字段
    int id = rs.getInt("id");
    String userName = rs.getString("userName");
    String password = rs.getString("password");
    String name = rs.getString("name");
    int age = rs.getInt("age");
    int sex = rs.getInt("sex");
    Date birthday = rs.getDate("birthday");
    String created = rs.getString("created");
    String updated = rs.getString("updated");
    
    // 创建对象实体并将字段存放到对象属性中
    UserEntity userEntity = new UserEntity();
    userEntity.setId(id);
    userEntity.setUserName(userName);
    userEntity.setPassword(password);
    userEntity.setName(name);
    userEntity.setAge(age);
    userEntity.setSex(sex);
    userEntity.setBirthday(birthday);
    userEntity.setCreated(created);
    userEntity.setUpdated(updated);
    

    由于 Java 对象与关系数据库之间不协调的问题,导致的结果就是数据库编程代码繁琐,开发效率低。

    ORM 映射规则

    1. 类与表相对应(基本规则)

    2. 类的属性(或成员变量)与表的字段相对应(基本规则)

    3. 类的实例与表中具体的一条记录相对应(基本规则)

    4. 一个类可以对应多个表,一个表也可以对应多个类

    5. 数据库中的表可以没有主键,但是类中必须有主键字段

    6. 数据库中表与表之间的关系对应类与类之间的关系

    7. 数据库中表的字段个数和名称可以和类的属性(或成员变量)不一样

    这7条 ORM 映射规则中,前3条是基本规则,也是最重要的规则。

    ORM 框架

    我们已经知道 ORM 是一种规范,而 ORM 本身并不能带来开发效率的提升,这就好比我们制定了一个好的班规,如果大家并不去遵守和执行它,也不会带来任何学习效率的提升。

    ORM 框架就是指实现了 ORM 映射规则的框架,而 MyBatis 就是一种 ORM 框架,当然Hibernate也是。有了这些 ORM 框架,我们就不用自己手动编写代码去实现 ORM 规范,使用 ORM 框架就可以发挥 ORM 规范的威力,以提升开发效率。

    总结

    • ORM 作用是为对象与关系数据库之间搭建桥梁,以解决对象与关系数据库之间不协调的问题
    • ORM 框架已实现 ORM 映射规则(MyBatis 为半自动 ORM 框架,而 Hibernate 为全自动 ORM 框架)
    作者:Binge
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    Redis12:客户端
    Redis11:事件
    Redis10:RDB持久化与AOF持久化
    Redis09:过期时间与删除策略、redis中的特殊线程
    Redis08:redis中的对象与存储形式
    Redis07:底层:基数树radix tree
    Redis06:底层:跳跃链表skiplist
    C++基础知识:异常处理
    C++基础知识:STL简介
    C++基础知识:泛型编程
  • 原文地址:https://www.cnblogs.com/binbingg/p/13743103.html
Copyright © 2011-2022 走看看