hints GORM 提供了 optimizer/index/comment hint 支持 https://github.com/go-gorm/hints Optimizer Hints1234import "gorm.io/hints"db.Clauses(hints.New("hint")).Find(&User{})// SELECT * /*+ hi 2024-12-04 Go #Go
hooks 对象生命周期Hook 是在创建、查询、更新、删除等操作之前、之后调用的函数。 如果您已经为模型定义了指定的方法,它会在创建、更新、查询、删除时自动被调用。如果任何回调返回错误,GORM 将停止后续的操作并回滚事务。 钩子方法的函数签名应该是 func(*gorm.DB) error Hook创建对象创建时可用的 hook 123456789// 开始事务BeforeSaveBeforeCreate 2024-12-04 Go #Go
indexes GORM 允许通过 index、uniqueIndex 标签创建索引,这些索引将在使用 GORM 进行AutoMigrate 或 Createtable 时创建 索引标签GORM 可以接受很多索引设置,例如class、type、where、comment、expression、sort、collate、option 下面的示例演示了如何使用它: 1234567891011121314151617 2024-12-04 Go #Go
logger 日志Gorm 有一个 默认 logger 实现,默认情况下,它会打印慢 SQL 和错误 Logger 接受的选项不多,您可以在初始化时自定义它,例如: 1234567891011121314151617181920newLogger := logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer logger.Con 2024-12-04 Go #Go
method_chaining GORM 的方法链功能可实现平滑流畅的编码风格。 Here’s an example: 1db.Where("name = ?", "jinzhu").Where("age = ?", 18).First(&user) Method CategoriesGORM 将方法分为三大类: Chain Methods, Finisher Methods, and New Session Meth 2024-12-04 Go #Go
migration AutoMigrateAutoMigrate 用于自动迁移您的 schema,保持您的 schema 是最新的。 注意: AutoMigrate 会创建表、缺失的外键、约束、列和索引。 It will change existing column’s type if its size, precision changed, or if it’s changing from non-nullable 2024-12-04 Go #Go
performance GORM 已经优化了许多东西来提高性能,其默认性能对大多数应用来说都够用了。但这里还是有一些关于如何为您的应用改进性能的方法。 禁用默认事务对于写操作(创建、更新、删除),为了确保数据的完整性,GORM 会将它们封装在一个事务里。但这会降低性能,你可以在初始化时禁用这种方式 123db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Conf 2024-12-04 Go #Go
prometheus GORM 提供了 Prometheus 插件来收集 DBStats 和用户自定义指标 https://github.com/go-gorm/prometheus 用法1234567891011121314151617181920import ( "gorm.io/gorm" "gorm.io/driver/sqlite" "gorm.io/plugin/prometheus")db, err 2024-12-04 Go #Go
scopes 作用域允许你复用通用的逻辑,这种共享逻辑需要定义为类型func(*gorm.DB) *gorm.DB。 查询Scope 查询示例: 1234567891011121314151617181920212223242526func AmountGreaterThan1000(db *gorm.DB) *gorm.DB { return db.Where("amount > ?", 1 2024-12-04 Go #Go
security GORM 使用 database/sql 的参数占位符来构造 SQL 语句,这可以自动转义参数,避免 SQL 注入数据 注意 Logger 打印的 SQL 并不像最终执行的 SQL 那样已经转义,复制和运行这些 SQL 时应当注意。 查询条件用户的输入只能作为参数,例如: 1234567userInput := "jinzhu;drop table users;"// 安全的,会被转义db.Whe 2024-12-04 Go #Go
serializer Serializer is an extensible interface that allows to customize how to serialize and deserialize data with database. GORM 提供了一些默认的序列化器:json、gob、unixtime,这里有一个如何使用它的快速示例 123456789101112131415type User s 2024-12-04 Go #Go
session GORM 提供了 Session 方法,这是一个 New Session Method,它允许创建带配置的新建会话模式: 1234567891011121314151617// Session 配置type Session struct { DryRun bool PrepareStmt bool NewDB 2024-12-04 Go #Go
settings GORM 提供了 Set, Get, InstanceSet, InstanceGet 方法来允许用户传值给 勾子 或其他方法 Gorm 中有一些特性用到了这种机制,如迁移表格时传递表格选项。 12// 创建表时添加表后缀db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{}) Set 2024-12-04 Go #Go
sharding Sharding 是一个高性能的 Gorm 分表中间件。它基于 Conn 层做 SQL 拦截、AST 解析、分表路由、自增主键填充,带来的额外开销极小。对开发者友好、透明,使用上与普通 SQL、Gorm 查询无差别,只需要额外注意一下分表键条件。 为您提供高性能的数据库访问。 https://github.com/go-gorm/sharding 功能特点 非侵入式设计, 加载插件,指定配置,既可 2024-12-04 Go #Go
transactions 禁用默认事务为了确保数据一致性,GORM 会在事务里执行写入操作(创建、更新、删除)。如果没有这方面的要求,您可以在初始化时禁用它,这将获得大约 30%+ 性能提升。 12345678910// 全局禁用db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ SkipDefaultTransaction: true, 2024-12-04 Go #Go
v2_release_note GORM 2.0 完全从零开始,引入了一些不兼容的 API 变更和许多改进 摘要 性能改进 代码模块化 Context,批量插入,预编译模式,DryRun 模式,Join 预加载,Find To Map,Create From Map,FindInBatches 支持 支持嵌套事务,SavePoint,Rollback To SavePoint SQL 生成器,命名参数,分组条件,Upsert, 2024-12-04 Go #Go
write_driver GORM offers built-in support for popular databases like SQLite, MySQL, Postgres, SQLServer, and ClickHouse. However, when you need to integrate GORM with databases that are not directly supported or h 2024-12-04 Go #Go
write_plugins CallbacksGORM leverages Callbacks to power its core functionalities. These callbacks provide hooks for various database operations like Create, Query, Update, Delete, Row, and Raw, allowing for extens 2024-12-04 Go #Go
Go 标准库之 database.sql database/sql 包提供了保证SQL或类SQL数据库的泛用接口,常用的数据库驱动有 github.com/go-sql-driver/mysql https://pkg.go.dev/database/sql 1、初始化数据库连接首先得初始化一个数据库连接,我们可以通过 sql.Open 来连接数据库: 12345DB, err := sql.Open(" 2024-12-03 Go > Go 标准库 #Go #Go 标准库
Go 标准库之 fmt fmt 包实现了格式化 I/O,其功能类似于 C 的 printf 和 scanf。主要分为向外输出内容和获取输入内容两大部分https://pkg.go.dev/fmt 1、输出1.1、输出到控制台 fmt.Print 系列print 有三个相关的函数: 123456789func Print(a ...any) (n int, err error) { return F 2024-12-03 Go > Go 标准库 #Go #Go 标准库