当前位置:首页 > 技术文章 > 正文内容

ORM框架介绍(orng专用框架)

zonemu12小时前技术文章3

一、ORM框架介绍

ORM(对象关系映射,Object-Relational Mapping)是一种用于实现面向对象编程语言与关系型数据库之间数据转换的技术。常见于C#(Entity Framework)、Java(Hibernate)、Python(SQLAlchemy)等开发中。

ORM(Object-Relational Mapping,对象关系映射)框架是用于简化对象与关系型数据库之间数据交互的工具。它将数据库表与程序中的对象进行映射,使开发者可以用面向对象的方式操作数据库,而无需直接编写SQL语句。


1.1. 基本概念

  • 对象:程序中的类和实例。
  • 关系:数据库中的表和记录。
  • 映射:将类与表、对象属性与表字段一一对应。

1.2. ORM的优点

  • 开发效率高:无需手写大量SQL,直接操作对象即可。
  • 易维护:数据结构变更时只需修改模型类。
  • 跨数据库:屏蔽底层数据库差异,便于迁移。
  • 安全性:自动防止SQL注入等安全问题。

1.3. ORM的缺点

  • 性能损耗:复杂查询时性能不如手写SQL。
  • 学习成本:需要理解ORM框架的用法和原理。
  • 灵活性有限:极端复杂的SQL场景下不如直接写SQL灵活。

1.4. ORM框架的原理

  1. 映射关系

ORM框架通过配置或约定,将数据库中的表、字段与程序中的类、属性一一对应。例如,表Students对应Student类,字段Name对应属性Name。

  1. 对象持久化

ORM负责将对象的状态同步到数据库(如插入、更新、删除),也能将数据库中的数据转换为对象实例。

  1. 自动生成SQL

ORM根据对象的操作自动生成SQL语句,开发者无需手写SQL。

  1. 上下文管理

ORM通常有一个上下文(如EF的DbContext),用于追踪对象的变化并统一提交到数据库。

  1. 关系处理

ORM支持一对一、一对多、多对多等关系的映射和操作。


1.5. 常见ORM框架

  • Entity Framework(微软官方,.NET平台)
  • Dapper(轻量级,半ORM)
  • NHibernate(功能强大,.NET平台)
  • SqlSugar(国产,语法简单)
  • Hibernate(Java平台)

1.6. 基本用法(以Entity Framework为例)

模型类定义:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
}

DbContext定义:

using Microsoft.EntityFrameworkCore;

public class SchoolContext : DbContext
{
    public DbSet<Student> Students { get; set; }
}

增删改查示例:

using (var context = new SchoolContext())
{
    // 新增
    context.Students.Add(new Student { Name = "张三" });
    context.SaveChanges();

    // 查询
    var student = context.Students.FirstOrDefault(s => s.Name == "张三");

    // 修改
    if (student != null)
    {
        student.Name = "李四";
        context.SaveChanges();
    }

    // 删除
    if (student != null)
    {
        context.Students.Remove(student);
        context.SaveChanges();
    }
}

1.7. 进阶知识

  • Code First / Database First:先写代码生成数据库,或先有数据库生成代码。
  • 迁移(Migration):自动管理数据库结构变更。
  • 懒加载/急加载:控制关联数据的加载时机。
  • 事务支持:ORM通常支持数据库事务操作。

相关文章

Vue3开发极简入门(15.1):emits补完-结合v-model

之前代码是通过按钮触发emit,如果希望输入框里的内容在输入之后也能同步到父组件,就可以结合v-model的update事件来操作,具体如下。Son2.vue:<template>...

10个实例小练习,快速入门熟练 Vue3 核心新特性(一)

作者:xuying 全栈修炼转发链接:https://mp.weixin.qq.com/s/_n2seDbbiO5hXQfuUGbUCQ前言Vue3.0 发 beta 版都有一段时间了,正式版也不远了...

Vue 2 和 Vue 3的区别(vue2和vue3的区别有哪些)

1.双向数据绑定原理不同Vue2 的双向数据绑定是利用ES5的一个APIObject.definePropert() 对数据进行劫持,结合发布订阅模式的方式来实现的。Vue3 中使用ES6的Proxy...

「2022」打算跳槽涨薪,必问面试题及答案——VUE篇

1、为什么选择VUE,解决了什么问题?vue.js 正如官网所说的,是一套构建用户界面的渐进式框架。与其它重量级框架不同的是,vue 被设计为可以自底向上逐层应用。vue 的核心库只关注视图层,不仅易...

Vue3快速入门(vue3快速上手)

  1.核心语法  1. 1选项式和组合式的区别  Vue2的API设计是Options(选项)风格的。  Vue3的API设计是Composition(组合)风格的。  Options类型的 API...

vue 3 学习笔记 (八)——provide 和 inject 用法及原理

在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,就需要先传给子组件,子组件再传给孙组件,如果多个子组件或多个孙组件使用时,就需要传...