Gorm组件学习| 青训营笔记

121 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

ORM

什么是ORM

ORM(Object Relational Mapping)对象关系映射,其主要作用是在编程中把面向对象的概念跟数据库中表的概念对应起来。比如说:定义一个对象就对应了一张表,这个对象的实例就是表中的一条记录。

ORM的特点如下: ① 提高开发效率,利用ORM可以使我们实体对象与数据库中的表进行字段与属性的映射; ② ORM提供了对数据库的映射,不用sql直接编码,能够操作对象一样从数据库获取数据。

golang常用的ORM

gorm、xorm、gorose

  1. 相同点:①对主流数据库都给予支持;② 同时支持事务性、链式查询等。

  2. 不同点:① xorm、gorose支持批量查询处理;② xorm支持主从读写分离;③ gorm支持热加载; ④ gorose便于在多个数据库切换; ⑤ 文档全面性:gorm>xorm>gorose

GORM

GORM简介

GORM将Go的结构体与数据库之间进行映射:能够通过操作结构体对象来创建、操作数据库表。 GORM目前支持MySQL、SQLServer、PostgreSQL、SQLite,GORM通过驱动来连接数据库。

GORM使用示例

  1. 数据库表设计;
  2. GORM数据库创建;
  3. 数据库连接创建;
  4. 迁移创建表;
  5. 创建、更新数据;
type Product struct {
    Name unit
}

func main() {
    dsn := "root:123456@tcp(127.0.0.1:3306)/gorm?
charset=utf8mb4&parseTime=True&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    db.AutoMigrate(&Product{})
    product := Product {
        Name: "grom"
    }
    db.create(&product)
    db.Model(&product).Update()
}

其中mysql驱动程序的一些高级配置可以在GORM数据库创建的时候进行配置,可以配置如下选项: ① string类型字段默认长度、②禁用datetime精度、③重命名索引时采用删除并新建的方式、④用change重命名列、⑤根据当前MySQL版本自动配置。

GORM的CRUD及事务操作

create: 创建一条数据、选定字段创建、排除选定字段

user := ...
result := db.Create(&user)
db.Select(...).Create(&user)
db.Omit(...).Create(&user)

read: 读取第一条、最后一条、满足条件的数据

db.First() \ db.Take() \ db.Last() 
db.Find() \ db.Where()

update: 含条件的更新

db.Model().Where().Update()
db.Model().Updates()

delete: 含条件的删除

db.Where().Delete()
db.Delete()

事务:创建事务、回滚、提交事务

tx := db.Begin()
tx.Rollback()
tx.Commit()