{"repo":"yinshuwei/osm","free":true,"listed":false,"github":"https://github.com/yinshuwei/osm","clone":"git clone https://github.com/yinshuwei/osm.git","description":"The lightweight Go language ORM tool uses only the Go standard library to implement SQL templates, data introspection, and supports MySQL and PostgreSQL.","language":"Go","stars":51,"topics":["sql-mapping","go","sqlmap","orm","database","db"],"license":"MIT","category":"databases-storage","readme_excerpt":"OSM - Object SQL Mapping English 简体中文 osm (Object SQL Mapping) 是用 Go 编写的轻量级 SQL 工具库，已在生产环境中广泛使用。 支持的数据库: MySQL、PostgreSQL、SQL Server、SQLite、Oracle、TiDB、CockroachDB、ClickHouse ✨ 核心理念 提供极简且优雅的 SQL 操作接口，让数据库操作更加简单直观： 🚀 核心特性 零依赖 - 仅依赖 Go 标准库，无第三方依赖 - 轻量级设计，易于集成和维护 灵活的参数绑定 使用 #{ParamName} 语法进行参数绑定，支持多种参数类型： - 顺序参数 : 按参数顺序自动匹配 - Map 参数 : 支持 map[string]interface{} - Struct 参数 : 直接使用结构体作为参数 - IN 查询 : 原生支持 SQL IN 语句 原生 SQL 占位符支持 除了 Named 参数绑定（ #{ParamName} ）之外，osm 还支持原生 SQL 占位符，以获得更好的性能： - MySQL 原生占位符 : 使用 ? 占位符 - PostgreSQL 原生占位符 : 使用 $1 , $2 等占位符 - 自动检测 : 根据 SQL 内容自动判断使用哪种模式 - 高性能 : 原生占位符比 Named 参数快 10-12 倍 MySQL 原生占位符示例: PostgreSQL 原生占位符示例: 检测机制: - 如果 SQL 中包含 #{ ，则使用 Named 参数模式 （向后兼容） - 否则使用 原生占位符模式 （直接将参数传递给数据库驱动） - 无需配置，完全自动 性能对比: 模式 性能 内存使用 分配次数 ------ ------------ -------------- -------- 原生占位符 100 ns/op 160 B/op 4 allocs/op Named 参数 1100 ns/op 2346 B/op 33 allocs/op 注意: 原生占位符绕过参数解析，直接将参数传递给数据库驱动，因此性能显著提升。在不需要 Named 参数灵活性的场景下，推荐使用原生占位符。 数据库占位符格式 不同的数据库使用不同的原生占位符格式，osm 会自动根据数据库类型生成正确的占位符： 数据库 占位符格式 示例 驱动名称 -------- ----------- ------ --------- MySQL ? SELECT FROM users WHERE id = ? mysql SQLite ? SELECT FROM users WHERE id = ? sqlite3 PostgreSQL $1 , $2 SELECT FROM users WHERE id = $1 postgres SQL Server $1 , $2 SELECT FROM users WHERE id = $1 mssql Oracle :1 , :2 SELECT FROM users WHERE id = :1 oracle , godror TiDB ? SELECT FROM users WHERE id = ? mysql (兼容) CockroachDB $1 , $2 SELECT FROM users WHERE id = $1 postgres (兼容) ClickHouse $1 , $2 SELECT FROM users WHERE id = $1 clic","default_branch":null,"files":null,"tree":[],"storefront":"/r/yinshuwei","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/yinshuwei/osm/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}