# MiniORM **Repository Path**: Sckaro/mini-orm ## Basic Information - **Project Name**: MiniORM - **Description**: Golang项目--搭建简单的ORM框架 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-26 - **Last Updated**: 2025-12-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MiniORM MiniORM 是一个用 Go 语言开发的轻量级 ORM (Object-Relational Mapping) 框架,提供了简洁易用的 API 用于简化 Go 应用程序与数据库的交互。 ## 功能特性 ### 核心功能 - 自动映射 Go 结构体到数据库表 - 支持基本的 CRUD 操作 - 事务支持 - 钩子机制 - 数据库迁移 ### SQL 构建 - 支持多种 SQL 子句类型:INSERT, VALUES, SELECT, LIMIT, WHERE, ORDERBY, UPDATE, DELETE, COUNT - 灵活的 SQL 语句组合 ### 数据库支持 - 当前支持 MySQL - 采用接口设计,易于扩展到其他数据库 ## 快速开始 ### 安装 ```bash go get github.com/yourusername/miniorm ``` ### 示例代码 ```go package main import ( "fmt" "miniorm" ) type User struct { Name string `gorm:"primary_key"` Age int } func main() { // 创建数据库连接 engine, err := miniorm.NewEngine("mysql", "user:password@tcp(localhost:3306)/test_db") if err != nil { fmt.Println("Failed to connect database:", err) return } defer engine.Close() // 自动迁移表结构 engine.Migrate(&User{}) // 创建会话 session := engine.NewSession() // 插入数据 user := User{Name: "Tom", Age: 18} session.Insert(&user) // 查询数据 var result User session.Where("Name = ?", "Tom").First(&result) fmt.Println("User:", result) // 更新数据 session.Where("Name = ?", "Tom").Update("Age", 19) // 删除数据 session.Where("Name = ?", "Tom").Delete(&User{}) } ``` ## 架构 MiniORM 采用分层架构设计: ``` ┌───────────┐ │ Engine │ 核心引擎,管理数据库连接和事务 └───────────┘ │ ┌───────────┐ │ Session │ 会话层,执行具体的 SQL 语句 └───────────┘ │ ┌───────────┐ ┌─────────┐ ┌────────┐ │ Clause │ │ Schema │ │ Dialect│ 功能层 └───────────┘ └─────────┘ └────────┘ │ ┌───────────┐ │ Database │ 数据库层 └───────────┘ ``` ## 组件说明 ### Engine - 核心引擎,管理数据库连接和事务 - 提供 `NewEngine()`, `Transaction()`, `Migrate()`, `NewSession()` 等方法 ### Session - 会话层,执行具体的 SQL 语句 - 支持链式操作,提高代码的可读性和易用性 - 提供钩子机制,允许在数据库操作前后执行自定义逻辑 ### Clause - SQL 构建器,构建 SQL 语句的各个子句 - 采用生成器模式,将 SQL 子句生成逻辑与应用程序逻辑分离 - 支持灵活的 SQL 语句构建,满足不同查询需求 ### Schema - 映射 Go 结构体与数据库表 - 利用 Go 反射机制自动解析结构体 - 支持表名和字段名的转换 ### Dialect - 处理数据库特定的 SQL 语法 - 提供数据库类型映射 - 实现 `DataTypeOf()` 和 `TableExistSQL()` 等接口方法 ## 文档 - [架构分析](./架构分析.md) - [简历项目亮点](./简历项目亮点.md) ## 许可证 MiniORM 采用 MIT 许可证。 The TodoWrite tool hasn't been used recently. If you're working on tasks that would benefit from tracking progress, consider using the TodoWrite tool to track progress. Also consider cleaning up the todo list if has become stale and no longer matches what you are working on. Only use it if it's relevant to the current work. This is just a gentle reminder - ignore if not applicable. Make sure that you NEVER mention this reminder to the user