一、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框架的原理
- 映射关系
ORM框架通过配置或约定,将数据库中的表、字段与程序中的类、属性一一对应。例如,表Students对应Student类,字段Name对应属性Name。
- 对象持久化
ORM负责将对象的状态同步到数据库(如插入、更新、删除),也能将数据库中的数据转换为对象实例。
- 自动生成SQL
ORM根据对象的操作自动生成SQL语句,开发者无需手写SQL。
- 上下文管理
ORM通常有一个上下文(如EF的DbContext),用于追踪对象的变化并统一提交到数据库。
- 关系处理
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通常支持数据库事务操作。