网站制作呼和浩特,昆山网站建设哪里好,大学生网站建设开题报告,校园社交网站开发的目的与意义文章目录 安装连接数据库Gorm基本示例自动迁移创建数据行查询数据更新数据删除数据 Gorm Model主键表名列名 时间戳CreatedAtUpdatedAtDeletedAt GORM#xff08;Go Object Relational Mapper#xff09;是一个在Go语言中使用的对象关系映射#xff08;ORM#xff09;库。它… 文章目录 安装连接数据库Gorm基本示例自动迁移创建数据行查询数据更新数据删除数据 Gorm Model主键表名列名 时间戳CreatedAtUpdatedAtDeletedAt GORMGo Object Relational Mapper是一个在Go语言中使用的对象关系映射ORM库。它允许开发者通过Go语言的结构体来定义数据模型而不必直接编写SQL语句从而简化了与数据库的交互和操作。
安装
go get -u github.com/jinzhu/gorm连接数据库
gorm中有连接多种数据库的方式这里以Mysql为例
package mainimport (fmtgithub.com/jinzhu/gorm_ github.com/jinzhu/gorm/dialects/mysql
)func main() {// 连接mysql数据库db, err : gorm.Open(mysql, root:123456(127.0.0.1:3306)/users?charsetutf8mb4parseTimeTruelocLocal)if err ! nil {panic(err)}defer db.Close()
}Gorm基本示例
首先创建一个struct用来表示数据库中的数据。
type UserInfo struct {ID uintName stringGender stringHobby string
}自动迁移
gorm框架自带的自动迁移功能使得开发者能够根据Go语言中定义的结构体自动创建或更新数据库表结构而不必手动编写SQL语句。 根据上面定义的struct只需要用AutoMigrate方法就能实现会把结构体和数据表进行对应。
db.AutoMigrate(UserInfo{})执行代码后发现数据库users中多出来一个user_infos的表。
创建数据行
u1 : UserInfo{ID: 1, Name: xay, Gender: 男, Hobby: swim}
db.Create(u1)运行结果如下图所示。
查询数据
var u UserInfo
db.First(u)
fmt.Printf(u:%v, u)// 运行结果u:{1 xay 男 swim}更新数据
db.Model(u).Update(Hobby, 双色球)// 运行结果u:{1 xay 男 双色球}删除数据
db.Delete(u)Gorm Model
GORM内置了一个gorm.Model结构体。gorm.Model是一个包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段的结构体用继承的方式来使用。也可以自己定义字段。
type User struct {gorm.ModelName stringAge sql.NullInt64Birthday *time.TimeEmail string gorm:type:varchar(100);unique_indexRole string gorm:size:255MemberNumber *string gorm:unique;not null // 设置会员号member number唯一并且不为空Num int gorm:AUTO_INCREMENT // 设置 num 为自增类型Address string gorm:index:addr // 给address字段创建名为addr的索引IgnoreMe int gorm:- // 忽略本字段
}主键
该Model会默认使用字段中的id来作为主键自己定义的格式如下
// 使用AnimalID作为主键
type Animal struct {AnimalID int64 gorm:primary_keyName stringAge int64
}表名
在gorm.Model创建表时会自动将表名定义为struct名的复数如果遇到用驼峰法命名的struct名会用下划线连接单词。自己定义的格式如下
func (User) TableName() string {return profiles
}func (u User) TableName() string {if u.Roleadmin {return admin_users} else {return users}
}用如下代码禁用复数命名
db.SingularTable(true)也可以使用Table()方法来创建表
db.Table(xiaowang).CreateTable(User{})GORM还支持更改默认表名称规则如果是指定的表名则不支持修改
gorm.DefaultTableNameHandler func (db *gorm.DB, defaultTableName string) string {return prefix_ defaultTableName;
}列名
列名由字段名称进行下划线分割来生成如上面的MemberNumber在数据库中变成member_number 如果想要指定列名可以用struct tag来实现
type Animal struct {AnimalId int64 gorm:column:beast_id // set column name to beast_idBirthday time.Time gorm:column:day_of_the_beast // set column name to day_of_the_beastAge int64 gorm:column:age_of_the_beast // set column name to age_of_the_beast
}时间戳
CreatedAt
如果模型有 CreatedAt字段该字段的值将会是初次创建记录的时间。
db.Create(user) // CreatedAt将会是当前时间// 可以使用Update方法来改变CreateAt的值
db.Model(user).Update(CreatedAt, time.Now())UpdatedAt
如果模型有UpdatedAt字段该字段的值将会是每次更新记录的时间。
db.Save(user) // UpdatedAt将会是当前时间db.Model(user).Update(name, jinzhu) // UpdatedAt将会是当前时间DeletedAt
如果模型有DeletedAt字段调用Delete删除该记录时将会设置DeletedAt字段为当前时间而不是直接将记录从数据库中删除。