gorm 教程二

Gorm教程 - 关联 嵌套预加载。 阅读详情

关联

Belongs To

属于

belongs to 关联建立一个和另一个模型的一对一连接,使得模型声明每个实例都「属于」另一个模型的一个实例 。

例如,如果你的应用包含了用户和用户资料, 并且每一个用户资料只分配给一个用户

type User struct {
  gorm.Model
  Name string
}

// `Profile` 属于 `User`, `UserID` 是外键
type Profile struct {
  gorm.Model
  UserID int
  User   User
  Name   string
}

外键

为了定义从属关系, 外键是必须存在的, 默认的外键使用所有者类型名称加上其主键。

像上面的例子,为了声明一个模型属于 User,它的外键应该为 UserID。

GORM 提供了一个定制外键的方法,例如:

type User struct {
    gorm.Model
    Name string
}

type Profile struct {
    gorm.Model
  Name      string
  User      User `gorm:"foreignkey:UserRefer"` // 使用 UserRefer 作为外键
  UserRefer string
}

关联外键

对于从属关系, GORM 通常使用所有者的主键作为外键值,在上面的例子中,就是 User 的 ID。

当你分配一个资料给一个用户, GORM 将保存用户表的 ID 值 到 用户资料表的 UserID 字段里。

你可以通过改变标签 association_foreignkey 来改变它, 例如:

type User struct {
    gorm.Model
  Refer int
    Name string
}

type Profile struct {
    gorm.Model
  Name      string
  User      User `gorm:"association_foreignkey:Refer"` // use Refer 作为关联外键
  UserRefer string
}

使用属于

你能找到 belongs to 和 Related 的关联

db.Model(&user).Related(&profile)
//// SELECT * FROM profiles WHERE user_id = 111; // 111 is user's ID

Has One

has one 关联也是与另一个模型建立一对一的连接,但语义(和结果)有些不同。 此关联表示模型的每个实例包含或拥有另一个模型的一个实例。

例如,如果你的应用程序包含用户和信用卡,并且每个用户只能有一张信用卡。

// 用户有一个信用卡,CredtCardID 外键
type User struct {
    gorm.Model
    CreditCard   CreditCard
}

type CreditCard struct {
    gorm.Model
    Number   string
    UserID    uint
}

外键

对于一对一关系,一个外键字段也必须存在,所有者将保存主键到模型关联的字段里。

这个字段的名字通常由 belongs to model 的类型加上它的 primary key 产生的,就上面的例子而言,它就是 CreditCardID

当你给用户一个信用卡, 它将保存一个信用卡的 ID 到 CreditCardID 字段中。

如果你想使用另一个字段来保存这个关系,你可以通过使用标签 foreignkey 来改变它, 例如:

type User struct {
  gorm.Model
  CreditCard CreditCard `gorm:"foreignkey:CardRefer"`
}

type CreditCard struct {
    gorm.Model
    Number      string
    UserName string
}

关联外键

通常,所有者会保存 belogns to model 的主键到外键,你可以改为保存其他字段, 就像下面的例子使用 Number 。

type User struct {
  gorm.Model
  CreditCard CreditCard `gorm:"association_foreignkey:Number"`
}

type CreditCard struct {
    gorm.Model
    Number string
    UID       string
}

多态关联

支持多态的一对多和一对一关联。

  type Cat struct {
    ID    int
    Name  string
    Toy   Toy `gorm:"polymorphic:Owner;"`
  }

  type Dog struct {
    ID   int
    Name string
    Toy  Toy `gorm:"polymorphic:Owner;"`
  }

  type Toy struct {
    ID        int
    Name      string
    OwnerID   int
    OwnerType string
  }

注意:多态属于和多对多是明确的不支持并将会抛出错误。

使用一对一

你可以通过 Related 找到 has one 关联。

var card CreditCard
db.Model(&user).Related(&card, "CreditCard")
//// SELECT * FROM credit_cards WHERE user_id = 123; // 123 是用户表的主键
// CreditCard  是用户表的字段名,这意味着获取用户的信用卡关系并写入变量 card。
// 像上面的例子,如果字段名和变量类型名一样,它就可以省略, 像:
db.Model(&user).Related(&card)

Has Many

一对多

has many 关联就是创建和另一个模型的一对多关系, 不像 has one,所有者可以拥有0个或多个模型实例。

例如,如果你的应用包含用户和信用卡, 并且每一个用户都拥有多张信用卡。

// 用户有多张信用卡,UserID 是外键
type User struct {
    gorm.Model
    CreditCards []CreditCard
}

type CreditCard struct {
    gorm.Model
    Number   string
    UserID  uint
}

外键

为了定义一对多关系, 外键是必须存在的,默认外键的名字是所有者类型的名字加上它的主键。

就像上面的例子,为了定义一个属于User 的模型,外键就应该为 UserID。

使用其他的字段名作为外键, 你可以通过 foreignkey 来定制它, 例如:

type User struct {
    gorm.Model
    CreditCards []CreditCard `gorm:"foreignkey:UserRefer"`
}

type CreditCard struct {
    gorm.Model
    Number    string
  UserRefer uint
}

外键关联

GORM 通常使用所有者的主键作为外键的值, 在上面的例子中,它就是 User 的 ID。

当你分配信用卡给一个用户, GORM 将保存用户 ID 到信用卡表的 UserID 字段中。

你能通过 association_foreignkey 来改变它, 例如:

type User struct {
    gorm.Model
  MemberNumber string
    CreditCards  []CreditCard `gorm:"foreignkey:UserMemberNumber;association_foreignkey:MemberNumber"`
}

type CreditCard struct {
    gorm.Model
    Number           string
  UserMemberNumber string
}

多态关联

支持多态的一对多和一对一关联。

  type Cat struct {
    ID    int
    Name  string
    Toy   []Toy `gorm:"polymorphic:Owner;"`
  }

  type Dog struct {
    ID   int
    Name string
    Toy  []Toy `gorm:"polymorphic:Owner;"`
  }

  type Toy struct {
    ID        int
    Name      string
    OwnerID   int
    OwnerType string
  }

注意:多态属于和多对多是明确不支持并会抛出错误的。

使用一对多

你可以通过Related 找到 has many 关联关系。

db.Model(&user).Related(&emails)
//// SELECT * FROM emails WHERE user_id = 111; // 111 是用户表的主键

Many To Many

多对多

多对多为两个模型增加了一个中间表。

例如,如果你的应用包含用户和语言, 一个用户会说多种语言,并且很多用户会说一种特定的语言。

// 用户拥有并属于多种语言, 使用  `user_languages` 作为中间表
type User struct {
    gorm.Model
    Languages         []Language `gorm:"many2many:user_languages;"`
}

type Language struct {
    gorm.Model
    Name string
}

反向关联

// 用户拥有并且属于多种语言,使用 `user_languages` 作为中间表
type User struct {
    gorm.Model
    Languages         []*Language `gorm:"many2many:user_languages;"`
}

type Language struct {
    gorm.Model
    Name string
    Users               []*User     `gorm:"many2many:user_languages;"`
}

db.Model(&language).Related(&users)
//// SELECT * FROM "users" INNER JOIN "user_languages" ON "user_languages"."user_id" = "users"."id" WHERE  ("user_languages"."language_id" IN ('111'))

外键

type CustomizePerson struct {
  IdPerson string             `gorm:"primary_key:true"`
  Accounts []CustomizeAccount `gorm:"many2many:PersonAccount;association_foreignkey:idAccount;foreignkey:idPerson"`
}

type CustomizeAccount struct {
  IdAccount string `gorm:"primary_key:true"`
  Name      string
}

外键会为两个结构体创建一个多对多的关系,并且这个关系将通过外键customize_person_id_person 和 customize_account_id_account 保存到中间表 PersonAccount。

中间表外键

如果你想改变中间表的外键,你可以用标签 association_jointable_foreignkey, jointable_foreignkey

type CustomizePerson struct {
  IdPerson string             `gorm:"primary_key:true"`
  Accounts []CustomizeAccount `gorm:"many2many:PersonAccount;foreignkey:idPerson;association_foreignkey:idAccount;association_jointable_foreignkey:account_id;jointable_foreignkey:person_id;"`
}

type CustomizeAccount struct {
  IdAccount string `gorm:"primary_key:true"`
  Name      string
}

自引用

为了定义一个自引用的多对多关系,你不得不改变中间表的关联外键。

和来源表外键不同的是它是通过结构体的名字和主键生成的,例如:

type User struct {
  gorm.Model
  Friends []*User `gorm:"many2many:friendships;association_jointable_foreignkey:friend_id"`
}

GORM 将创建一个带外键 user_id 和 friend_id 的中间表, 并且使用它去保存用户表的自引用关系。

然后你可以像普通关系一样操作它, 例如:

DB.Preload("Friends").First(&user, "id = ?", 1)

DB.Model(&user).Association("Friends").Append(&User{Name: "friend1"}, &User{Name: "friend2"})

DB.Model(&user).Association("Friends").Delete(&User{Name: "friend2"})

DB.Model(&user).Association("Friends").Replace(&User{Name: "new friend"})

DB.Model(&user).Association("Friends").Clear()

DB.Model(&user).Association("Friends").Count()

使用多对多

db.Model(&user).Related(&languages, "Languages")
//// SELECT * FROM "languages" INNER JOIN "user_languages" ON "user_languages"."language_id" = "languages"."id" WHERE "user_languages"."user_id" = 111

//  当查询用户时预加载 Language
db.Preload("Languages").First(&user)

关联

自动创建/更新

GORM 将在创建或保存一条记录的时候自动保存关联和它的引用,如果关联有一个主键, GORM 将调用 Update 来更新它, 不然,它将会被创建。

user := User{
    Name:            "jinzhu",
    BillingAddress:  Address{Address1: "Billing Address - Address 1"},
    ShippingAddress: Address{Address1: "Shipping Address - Address 1"},
    Emails:          []Email{
        {Email: "jinzhu@example.com"},
        {Email: "jinzhu-2@example@example.com"},
    },
    Languages:       []Language{
        {Name: "ZH"},
        {Name: "EN"},
    },
}

db.Create(&user)
//// BEGIN TRANSACTION;
//// INSERT INTO "addresses" (address1) VALUES ("Billing Address - Address 1");
//// INSERT INTO "addresses" (address1) VALUES ("Shipping Address - Address 1");
//// INSERT INTO "users" (name,billing_address_id,shipping_address_id) VALUES ("jinzhu", 1, 2);
//// INSERT INTO "emails" (user_id,email) VALUES (111, "jinzhu@example.com");
//// INSERT INTO "emails" (user_id,email) VALUES (111, "jinzhu-2@example.com");
//// INSERT INTO "languages" ("name") VALUES ('ZH');
//// INSERT INTO user_languages ("user_id","language_id") VALUES (111, 1);
//// INSERT INTO "languages" ("name") VALUES ('EN');
//// INSERT INTO user_languages ("user_id","language_id") VALUES (111, 2);
//// COMMIT;

db.Save(&user)

关闭自动更新

如果你的关联记录已经存在在数据库中, 你可能会不想去更新它。

你可以设置 gorm:association_autoupdate 为 false

// 不更新有主键的关联,但会更新引用
db.Set("gorm:association_autoupdate", false).Create(&user)
db.Set("gorm:association_autoupdate", false).Save(&user)
或者使用 GORM 的标签, gorm:"association_autoupdate:false"

type User struct {
  gorm.Model
  Name       string
  CompanyID  uint
  // 不更新有主键的关联,但会更新引用
  Company    Company `gorm:"association_autoupdate:false"`
}

关闭自动创建

即使你禁用了 AutoUpdating, 仍然会创建没有主键的关联,并保存它的引用。

你可以通过把 gorm:association_autocreate 设置为 false 来禁用这个行为。

// 不创建没有主键的关联,不保存它的引用。
db.Set("gorm:association_autocreate", false).Create(&user)
db.Set("gorm:association_autocreate", false).Save(&user)
或者使用 GORM 标签, gorm:"association_autocreate:false"

type User struct {
  gorm.Model
  Name       string
  // 不创建没有主键的关联,不保存它的引用。
  Company1   Company `gorm:"association_autocreate:false"`
}

关闭自动创建/更新

禁用 AutoCreate 和 AutoUpdate,你可以一起使用它们两个的设置。

db.Set("gorm:association_autoupdate", false).Set("gorm:association_autocreate", false).Create(&user)

type User struct {
  gorm.Model
  Name    string
  Company Company `gorm:"association_autoupdate:false;association_autocreate:false"`
}

或者使用 gorm:save_associations

db.Set("gorm:save_associations", false).Create(&user)
db.Set("gorm:save_associations", false).Save(&user)

type User struct {
  gorm.Model
  Name    string
  Company Company `gorm:"association_autoupdate:false"`
}

关闭保存引用

如果你不想当更新或保存数据的时候保存关联的引用, 你可以使用下面的技巧

db.Set("gorm:association_save_reference", false).Save(&user)
db.Set("gorm:association_save_reference", false).Create(&user)
或者使用标签

type User struct {
  gorm.Model
  Name       string
  CompanyID  uint
  Company    Company `gorm:"association_save_reference:false"`
}

关联模式

关联模式包含一些可以轻松处理与关系相关的事情的辅助方法。

// 开启关联模式
var user User
db.Model(&user).Association("Languages")
// `user` 是源表,必须包含主键
// `Languages` 是源表关系字段名称。
// 只有上面两个条件都能匹配,关联模式才会生效, 检查是否正常:
// db.Model(&user).Association("Languages").Error

查找关联

查找匹配的关联

db.Model(&user).Association("Languages").Find(&languages)

增加关联

为 many to many, has many 新增关联, 为 has one, belongs to 替换当前关联

db.Model(&user).Association("Languages").Append([]Language{languageZH, languageEN})
db.Model(&user).Association("Languages").Append(Language{Name: "DE"})

替换关联

用一个新的关联替换当前关联

db.Model(&user).Association("Languages").Replace([]Language{languageZH, languageEN})
db.Model(&user).Association("Languages").Replace(Language{Name: "DE"}, languageEN)

删除关联

删除源和参数对象之间的关系, 只会删除引用,不会删除他们在数据库中的对象。

db.Model(&user).Association("Languages").Delete([]Language{languageZH, languageEN})
db.Model(&user).Association("Languages").Delete(languageZH, languageEN)

清理关联

删除源和当前关联之间的引用,不会删除他们的关联

db.Model(&user).Association("Languages").Clear()

统计关联
返回当前关联的统计数

db.Model(&user).Association("Languages").Count()

预加载

预加载

db.Preload("Orders").Find(&users)
//// SELECT * FROM users;
//// SELECT * FROM orders WHERE user_id IN (1,2,3,4);

db.Preload("Orders", "state NOT IN (?)", "cancelled").Find(&users)
//// SELECT * FROM users;
//// SELECT * FROM orders WHERE user_id IN (1,2,3,4) AND state NOT IN ('cancelled');

db.Where("state = ?", "active").Preload("Orders", "state NOT IN (?)", "cancelled").Find(&users)
//// SELECT * FROM users WHERE state = 'active';
//// SELECT * FROM orders WHERE user_id IN (1,2) AND state NOT IN ('cancelled');

db.Preload("Orders").Preload("Profile").Preload("Role").Find(&users)
//// SELECT * FROM users;
//// SELECT * FROM orders WHERE user_id IN (1,2,3,4); // has many
//// SELECT * FROM profiles WHERE user_id IN (1,2,3,4); // has one
//// SELECT * FROM roles WHERE id IN (4,5,6); // belongs to

自动预加载

始终自动预加载的关联

type User struct {
  gorm.Model
  Name       string
  CompanyID  uint
  Company    Company `gorm:"PRELOAD:false"` //没有预加载
  Role       Role                           // 已经预加载
}

db.Set("gorm:auto_preload", true).Find(&users)

嵌套预加载

db.Preload("Orders.OrderItems").Find(&users)
db.Preload("Orders", "state = ?", "paid").Preload("Orders.OrderItems").Find(&users)

自定义预加载 SQL

您可以通过传入func(db * gorm.DB)* gorm.DB来自定义预加载SQL,例如:

db.Preload("Orders", func(db *gorm.DB) *gorm.DB {
    return db.Order("orders.amount DESC")
}).Find(&users)
//// SELECT * FROM users;
//// SELECT * FROM orders WHERE user_id IN (1,2,3,4) order by orders.amount DESC;
GORM多态关联和关联标签详解 GORM 是一个支持多态关联的 Go 语言 ORM 库。通过示例演示了多态关联的使用方法,包括 has one 和 has many 关系。还介绍了关联标签的用法,以及外键和引用的设置。 阅读详情

相关推荐

GORM教程

GORM gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。 安装 go get -u gorm.io/gorm 连接数据库 引入驱动 import "gorm.io/driver/mysql" import "gorm.io/driver/postgres" import "gorm.io/driver/sqlite" import "gorm.io/driver/mssql" 可以根据自己的需要选择对应的包 连接数据库(mysql) import ( "gorm

weixin_48101150的博客 3357

Gorm之关联

会与另一个模型建立了一对一的连接。 这种模型的每一个实例都“属于”另一个模型的一个实例。例如,您的应用包含 user 和 company,并且每个 user 能且只能被分配给一个 company。下面的类型就表示这种关系。 注意,在 对象中,有一个和 一样的 。 默认情况下, 被隐含地用来在 和 之间创建一个外键关系, 因此必须包含在 结构体中才能填充 内部结构体。 请参阅 预加载 以了解内部结构的详细信息。要定义一个 belongs to 关系,数据库的表中必须存在外键。默认情况下,外键的名

qq_53267860的博客 4702

Gorm教程 - 入门

安装配合goland编辑器使用uintstringuint8*string*time.TimeCreatedAtUpdatedAt。

很努力的恺恺 727

数据库事务隔离级别和四大特性

数据库四大特性和事务隔离级别 数据库中经常被问到四大特性和隔离级别,一般都是涉及到概念性问题,在此做一些整理总结,方便理解。 1、事务的隔离级别 由低到高依次为Read uncommitted(未授权读取、读未提交)、Read committed(授权读取、读提交)、Repeatable read(可重复读取)、Serializable(序列化),这四个级别可以逐个解决脏读、不可...

weixin_34406086的博客 648

go-zero 集成 GORM 操作教程

本文介绍了如何在go-zero框架中集成GORM进行数据库操作,主要内容包括: 集成原因:对比GORM与go-zero原生Model的优势,分析适用场景,提出保留go-zero架构优势同时替换Model层的策略。 环境配置:详细说明依赖安装步骤、项目结构设计、配置文件设置(YAML)和配置结构定义(Go)。 模型定义:展示基础模型(BaseModel)的通用字段和钩子方法,以及用户模型(User)的具体实现,包含字段定义、枚举类型、表名指定和创建前钩子。

qq_48107900的博客 1164

Go 语言 ORM 王者 GORM:从入门到精通的保姆级教程

在 GORM 中,一个 Go 结构体(Struct)就代表数据库中的一张表。字段的映射关系则通过“结构体标签(Struct Tag)”来定义。我们来创建一个User模型,它将对应数据库中的users表。import ("time"// User 模型定义gorm.Model // 内嵌 gorm.Model,它包含了 ID, CreatedAt, UpdatedAt, DeletedAt 四个字段not null"`not null"`模型解析gorm.Model。

dl999666的博客 1754

gorm数据库外键关联和级联操作

gorm操作数据库外键相关内容,主要是级联操作和预加载

jnjavelin的博客 1261

Fritzing0.9.10下载安装和简单使用

Fritzing 作为一款电子设计自动化软件,其画图用于导入到论文和文档,清晰好看,能解决用相机拍实物照片杜邦线很乱的痛点。

李同学Lino的博客 3万+

Go-zero新手教程(二):使用goctl实现人员管理API并使用gorm自动创建人员信息表

本教程详细介绍了如何使用Go-zero(v1.8.4)和GORM实现人员管理API的全流程。内容包括:从环境准备(安装Go、goctl、GORM和MySQL)到项目创建、API接口定义;从数据库配置和模型设计到业务逻辑实现(CRUD操作);最后通过Postman和Apifox进行接口测试。教程特别讲解了如何使用GORM自动创建人员表,并详细说明了PersonModel接口的设计与实现。通过150字的精炼步骤,帮助开发者快速掌握基于Go-zero构建微服务的关键技术。

weixin_44024036的博客 1076

如何浏览与下载全球免费的地图高分辨率(亚米级)的遥感影像?

前言 如果你想使用商业卫星的高分辨遥感影像,一般价格昂贵。我们可以使用地图平台上免费的高分辨率数据。目前数据源很多,比如说google earth、天地图、四维地球、必应地图等等。这些影像统一有一个共同点就是:RGB三波段;Web地图瓦片服务。这意味着我们可以通过瓦片服务下载影像,但下载的影像只有三个波段,分别是 一.引言 二、可使用高分辨率的地图数据源 1.Google Earth影像 2.Esri World Image 3.天地图 4.必...

锐多宝的地理空间 2万+

为什么你的SiC MOSFET仿真不准?可能是离子注入的‘沟道效应’在捣鬼(Silvaco BCA模块详解)

本文深入分析了SiC MOSFET仿真中离子注入沟道效应的关键影响,揭示了Silvaco BCA模块在模拟SiC晶向和角度参数时的核心设置要点。通过详细解析晶圆偏切与注入角度的等效关系,提供优化MOSFET沟道区注入仿真的五步实战方法,帮助工程师将阈值电压仿真误差从26%降低到5%以内。

weixin_26789847的博客 409

【GO】GORM 使用教程

GORM 是一个功能强大且易于使用的 Go 语言 ORM 库,能够让开发者以面向对象的方式与数据库交互,减少了 SQL 语句的编写和管理的复杂度。它适合需要处理数据库的 Go 项目,特别是那些涉及大量数据操作、需要事务支持和多表关联的应用。

weixin_43825008的博客 2713

紫光同创PGL50H开发板实战:盘古50KH视频板的多媒体处理与高速通信方案

本文详细介绍了基于紫光同创PGL50H FPGA芯片的盘古50KH视频开发板在多媒体处理与高速通信方面的实战应用。文章从开发板硬件架构解析入手,逐步指导开发环境搭建、DDR3内存控制器配置、HDMI视频输入输出实战,并重点探讨了利用板载HSST高速收发器实现光纤通信与万兆以太网的方案。最后,通过构建一个集多路视频采集、处理与光纤传输于一体的系统案例,展示了该开发板在高性能实时数据处理领域的强大潜力。

b9c0d的博客 484

GORM SQLite 驱动使用教程

GORM SQLite 驱动使用教程 1. 项目介绍 GORM SQLite 驱动是 GORM 框架的一个插件,专门用于支持 SQLite 数据库。GORM 是一个 Go 语言的 ORM 库,而 SQLite 是一个轻量级的嵌入式数据库。通过 GORM SQLite 驱动,开发者可以方便地在 Go 项目中使用 SQLite 数据库。 2. 项目快速启动 安装 GORM 和 SQLite 驱动 首先...

gitblog_00685的博客 1318

【Qualcomm高通音频】如何封装音频控件?

音频代码涉及面很广,这篇文档介绍如何封装音频控件给HAL层使用。这里以AW87519芯片调试为例进行介绍封装音频控件和使用的方法。在最初接出到高通音频基础功能调试的时候,都是从tinyalsa指令/mixer_paths文件配置开始。因为单独一个音频设备的调试,都对应一条音频链路的打通。比如以下链接上高通平台基础音频输入输出设备调试: 【Qualcomm音频】Speaker 调试记录http...

crow_ch的博客 1954

STM32标准库下载保姆级教程:2024最新官网免注册直接下载方法

本文提供2024年最新STM32标准库免注册下载方法,包括直接下载链接、GitHub镜像仓库和开发工具内置库三种途径。详细介绍了标准外设库的优势、配置步骤及常见问题解决方案,帮助开发者快速获取并应用这一重要开发资源。

weixin_29163581的博客 365

Golang GORM系列:GORM 高级查询教程

从Go应用程序获取和修改数据的最全面的工具集是由GORM复杂的查询功能提供的。通过学习如何使用连接和关系、预加载相关数据,甚至尝试原始SQL查询,可以很快掌握精确而复杂地数据查询。这些特性不仅提高了程序的效率,而且还提供了对以前难以想象的复杂数据情况的访问。

neweastsun的专栏 2272

OBC_开环扫频波特图拟合操作流程(结合 Simulink)

摘要: 本文详细介绍了基于Simulink的开环扫频波特图测试与拟合流程,适用于电源/控制系统(如LLC/PFC)的小信号分析。主要内容包括:1)前期准备(测试点选择、信号范围设定);2)Simulink建模方法(信号注入、数据记录);3)两种扫频方式(逐频正弦/Chirp扫频)的实现;4)MATLAB数据处理(FFT分析、传递函数拟合);5)线性分析工具使用技巧。重点强调了激励信号幅值控制、稳态数据采集及模型验证方法,并提供完整MATLAB脚本示例。该流程可有效获取系统频域特性,为控制器设计提供可靠依据。

Sumerking的博客 232

GORM PostgreSQL 驱动使用教程

GORM PostgreSQL 驱动使用教程 1. 项目介绍 GORM PostgreSQL 驱动是 GORM(Go 语言的 ORM 库)的一个官方 PostgreSQL 数据库驱动。GORM 是一个功能强大且灵活的 ORM 库,支持多种数据库,而 PostgreSQL 驱动则是专门为 PostgreSQL 数据库设计的。该驱动提供了对 PostgreSQL 数据库的高效访问和操作,支持事务、连接...

gitblog_01103的博客 1759

可维护的 SAP UI5 Theming 策略:从 CSS 级联与特性选择器到 UI Theme Designer 的工程化落地

摘要:SAP UI5主题化是一个涉及CSS级联、选择器特异性和主题参数的系统工程,与应用逻辑解耦以实现品牌化和无障碍适配。轻量级调整优先使用附加CSS,重大改动才考虑创建新主题。样式冲突需通过特异性原则解决,避免滥用!important。动态添加样式应使用addStyleClass而非直接操作DOM。主题可通过bootstrap参数、URL或运行时API设置,企业级主题推荐使用UI Theme Designer。自定义内容应消费主题变量以实现一致性,避免直接修改控件内部结构或内联样式。工程化落地需规范分层和

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 307

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

GORM DBResolver 使用教程

DBResolver 是 GORM 的一个插件,旨在为 Golang 开发者提供多数据库支持。它支持多个 sources 和 replicas,实现读写分离、自动和手动连接切换、负载均衡等功能。DBResolver 适用于原生 SQL 和事务操作,使得在复杂的数据库拓扑结构中进行开发变得更加简单和高效。 ## 项目快速启动 ### 安装 首先,确保你已经安装了 GORM 和 MySQL 驱动...

gitblog_00288的博客 764

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

GORM gorm.DB 对象剖析

GORM 是一个流行的 Golang ORM 库。类似于 Java 生态里大家听到过的 Mybatis、Hibernate、SpringData 等。GORM 由国人开发,中文文档齐全,对开发者友好,支持主流关系型数据库。MySQLSQL ServerPostgreSQLSQLite关联 (拥有一个,拥有多个,属于,多对多,多态,单表继承)钩子(before/after create/save/update/delete/find)支持 Preload、Joins 的预加载。

Doublelv 的博客专栏。 2874

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Gorm】模型定义

模型定义映射机制:GORM 将 Go 语言中的结构体(struct)映射为数据库中的表。定义模型就是编写对应的结构体。字段类型:模型字段可以使用基本类型(如uintstringuint8)、指针(如*string*time.Time)以及特殊类型(如)来处理可空值。自动管理的时间戳:如果定义了CreatedAt和UpdatedAt字段,GORM 会在创建和更新记录时自动填充当前时间。非导出字段:结构体中首字母小写的字段不会映射到数据库中。内置模型(gorm.Model)

Pyroyster的博客 2283

Go语言之GORM框架(二) ——GORM的单表操作

在讲解单表查询之前,我们先来看一个很简单的单表查询代码import ("fmt""log""os""time"if err!= nil {fmt.Println("数据库连接失败,err:", err)returnfmt.Println("数据库连接成功")myDB = dbmysqlLogger = logger.Default.LogMode(logger.Info) //设置日志打印级别。

qq_73924465的博客 1676
上一篇: http 详解 一 http的诞生
下一篇: http 详解 二 http简易使用,报文内的信息和返回状态码解释
过去日记
过去日记 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄3年 5342粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过去日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值