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

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

zonemu3个月前 (07-17)技术文章31

一、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通常支持数据库事务操作。

相关文章

「图解」父子组件通过 props 进行数据交互的方法

1.组件化开发,经常有这样的一个场景,就是父组件通过 Ajax 获取数据,传递给子组件,如何通过 props 进行数据交互来实现,便是本图解的重点。2.代码的结构3.具体代码 ①在父组件 data 中...

Vue3 中有哪些值得深究的知识点?(vue3例子)

众所周知,前端技术一直更新很快,这不 vue3 也问世这么久了,今天就来给大家分享下vue3中值得注意的知识点。喜欢的话建议收藏,点个关注!1、createAppvue2 和 vue3 在创建实例时,...

Python 实现 | 通过 Gitlab API 获取项目工程、分支、commit 提交记录

前提在 gitlab 中你的工程创建 Access Token然后你会得到一个 21 位 access token,代码中需要用到。代码''' 说明: 1.登录gitlab的r...

使用Java统计gitlab代码行数(统计github代码行数的方法)

使用Java统计gitlab代码行数一、背景:需要对当前公司所有的项目进行代码行数的统计二、 可实现方式1.脚本:通过git脚本将所有的项目拉下来并然后通过进行代码行数的统计样例:echo 创建项目对...

jenkins+gitlab 实现自动化部署(gitlab触发jenkins)

目录1、安装jdk,要记住安装路径2、安装maven,要记住安装路径3、安装git,要记住安装路径4、安装gitlab5、安装jenkins(centos7)创建安装目录下载通用war包启动和关闭Je...

(一)熟练HTML5+CSS3,每天复习一遍

前言学习网页的概念和分类,了解静态网页和动态网页的不同;了解网页浏览器的工作原理。了解HTML,XHTML,HTML5的概念,制作简单的HTML页面的开发。什么是网页可以在internet上通过网页浏...