## 前言 本篇文章用于新手学习Go语言的Gorm框架,用于快速增删改查。 --- ## gorm入门 [scode type="blue" size=""]本篇文章使用的gorm链接的数据库均为mysql[/scode] --- ### gorm链接mysql方式 ``` // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) ``` 这个是官网的链接数据库方式。 这里需要注意导入的包,因为gorm有着重写的mysql自定义驱动,所以需要导入他们官网上的包。 ``` "gorm.io/driver/mysql" "gorm.io/gorm" ``` 同时返回的db结构,也可以设置并发和最大连接池。 ``` SQL, err := gorm.Open(mysql.Open(sqlInit), &gorm.Config{}) sql, err := SQL.DB() // 设置最大连接数 默认为0 也就是没有限制 sql.SetMaxOpenConns(0) // 设置最大空闲连接 每次执行完语句都将连接放入连接池,默认为2 sql.SetConnMaxIdleTime(100) ``` 设置好之后就可以正常使用gorm进行数据库操作了。 --- ### 进行结构体绑定 ``` type Register struct { User string `json:"User,omitempty"` UserName string `json:"UserName,omitempty" gorm:"column:username"` UID string `json:"UID,omitempty" gorm:"column:uid"` Password string `json:"Password,omitempty" ` Auto string `json:"Auto,omitempty"` Times int64 `json:"Times"` } ``` 用这个举列子。 倘若使用这个结构体,我们可以发现column值得是绑定数据库的字段,因为部分结构体的参数会有大小写,倘若链接绑定不到相应 的结构体,就可以用这种方式。 --- ### 结构体选择数据表或gorm直接选中数据表 当你使用这个字段时,gorm会自动绑定数据表,会自动加上s,比如Register这个结构体,会变成Registers数据表。 当我们不想使用s作为后缀,有着两种方式。 --- #### 第一种 ``` config.MysqlURL.Table("user_account").Where("user=?", r.User).First(&R) ``` 使用Table用于绑定一个数据表。 --- #### 第二种 使用反射将mysql数据表去掉s,[gorm官网](https://gorm.io/zh_CN/docs/index.html)有介绍。 --- ### 使用gorm进行增加记录,删除记录,更改记录,查询记录 #### 增加记录 ``` // 自己的列子 if err := config.MysqlURL.Table("user_account").Create(&r).Error; err != nil { ``` ``` // 官网的代码 db.Select("Name", "Age", "CreatedAt").Create(&user) ``` 从这里可以看出Create时用于创建记录的命令,其中的r指的是绑定的数据库模型结构体。 [scode type="red" size=""]报错信息Gorm:Panic info is: runtime error: invalid memory address or nil pointer dereference [/scode] 解决方法:必须要使用&,否则会报错。 --- #### 查询记录 ``` config.MysqlURL.Table("user_account").Where("user=?", r.User).First(&R) ``` 这里看出Where就是用于查询需要的条件的,这个的语句时查询与数据库的user是否有相同的记录值。 --- #### 删除记录 ``` // Email 的 ID 是 `10` db.Delete(&email) // DELETE from emails where id = 10; // 带额外条件的删除 db.Where("name = ?", "jinzhu").Delete(&email) // DELETE from emails where id = 10 AND name = "jinzhu"; ``` Delete很容易看出来是删除字段的功能。 这里的Where看上面的查询功能。 --- #### 更改记录 ``` // 条件更新 db.Model(&User{}).Where("active = ?", true).Update("name", "hello") // UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE active=true; ``` 有了上面的基础,很容易看懂这个。 这个的关键语句就是update,这个语句功能是更新name字段的where选定记录的值改为hello。 --- ### gorm开发分页器 ``` func (t *Task) ReadTask(i, m int64) ([]taskrun, int64) { var r []taskrun if m-i >= 25 { return r, 0 } result := orm.Where("user=?", t.Session.goadminUser.Username).Find(&r) orm.Where("user=?", t.Session.goadminUser.Username).Scopes(Paginate(i, m)).Find(&r) // in := result.RowsAffected / (m - i) // if result.RowsAffected%(m-i) != 0 { // in++ // } // orm.Where("user=?", user).Limit(i).Offset(m).Find(&u) logrus.Info("计算的分页总数结果:", result.RowsAffected) logrus.Info(r) return r, result.RowsAffected } ``` 其中i是起始地址,m是最大地址。 --- Loading... ## 前言 本篇文章用于新手学习Go语言的Gorm框架,用于快速增删改查。 --- ## gorm入门 <div class="tip inlineBlock info"> 本篇文章使用的gorm链接的数据库均为mysql </div> --- ### gorm链接mysql方式 ``` // 参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name 获取详情 dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) ``` 这个是官网的链接数据库方式。 这里需要注意导入的包,因为gorm有着重写的mysql自定义驱动,所以需要导入他们官网上的包。 ``` "gorm.io/driver/mysql" "gorm.io/gorm" ``` 同时返回的db结构,也可以设置并发和最大连接池。 ``` SQL, err := gorm.Open(mysql.Open(sqlInit), &gorm.Config{}) sql, err := SQL.DB() // 设置最大连接数 默认为0 也就是没有限制 sql.SetMaxOpenConns(0) // 设置最大空闲连接 每次执行完语句都将连接放入连接池,默认为2 sql.SetConnMaxIdleTime(100) ``` 设置好之后就可以正常使用gorm进行数据库操作了。 --- ### 进行结构体绑定 ``` type Register struct { User string `json:"User,omitempty"` UserName string `json:"UserName,omitempty" gorm:"column:username"` UID string `json:"UID,omitempty" gorm:"column:uid"` Password string `json:"Password,omitempty" ` Auto string `json:"Auto,omitempty"` Times int64 `json:"Times"` } ``` 用这个举列子。 倘若使用这个结构体,我们可以发现column值得是绑定数据库的字段,因为部分结构体的参数会有大小写,倘若链接绑定不到相应 的结构体,就可以用这种方式。 --- ### 结构体选择数据表或gorm直接选中数据表 当你使用这个字段时,gorm会自动绑定数据表,会自动加上s,比如Register这个结构体,会变成Registers数据表。 当我们不想使用s作为后缀,有着两种方式。 --- #### 第一种 ``` config.MysqlURL.Table("user_account").Where("user=?", r.User).First(&R) ``` 使用Table用于绑定一个数据表。 --- #### 第二种 使用反射将mysql数据表去掉s,[gorm官网](https://gorm.io/zh_CN/docs/index.html)有介绍。 --- ### 使用gorm进行增加记录,删除记录,更改记录,查询记录 #### 增加记录 ``` // 自己的列子 if err := config.MysqlURL.Table("user_account").Create(&r).Error; err != nil { ``` ``` // 官网的代码 db.Select("Name", "Age", "CreatedAt").Create(&user) ``` 从这里可以看出Create时用于创建记录的命令,其中的r指的是绑定的数据库模型结构体。 <div class="tip inlineBlock error"> 报错信息Gorm:Panic info is: runtime error: invalid memory address or nil pointer dereference </div> 解决方法:必须要使用&,否则会报错。 --- #### 查询记录 ``` config.MysqlURL.Table("user_account").Where("user=?", r.User).First(&R) ``` 这里看出Where就是用于查询需要的条件的,这个的语句时查询与数据库的user是否有相同的记录值。 --- #### 删除记录 ``` // Email 的 ID 是 `10` db.Delete(&email) // DELETE from emails where id = 10; // 带额外条件的删除 db.Where("name = ?", "jinzhu").Delete(&email) // DELETE from emails where id = 10 AND name = "jinzhu"; ``` Delete很容易看出来是删除字段的功能。 这里的Where看上面的查询功能。 --- #### 更改记录 ``` // 条件更新 db.Model(&User{}).Where("active = ?", true).Update("name", "hello") // UPDATE users SET name='hello', updated_at='2013-11-17 21:34:10' WHERE active=true; ``` 有了上面的基础,很容易看懂这个。 这个的关键语句就是update,这个语句功能是更新name字段的where选定记录的值改为hello。 --- ### gorm开发分页器 ``` func (t *Task) ReadTask(i, m int64) ([]taskrun, int64) { var r []taskrun if m-i >= 25 { return r, 0 } result := orm.Where("user=?", t.Session.goadminUser.Username).Find(&r) orm.Where("user=?", t.Session.goadminUser.Username).Scopes(Paginate(i, m)).Find(&r) // in := result.RowsAffected / (m - i) // if result.RowsAffected%(m-i) != 0 { // in++ // } // orm.Where("user=?", user).Limit(i).Offset(m).Find(&u) logrus.Info("计算的分页总数结果:", result.RowsAffected) logrus.Info(r) return r, result.RowsAffected } ``` 其中i是起始地址,m是最大地址。 --- 最后修改:2022 年 04 月 26 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 5 如果觉得我的文章对你有用,请随意赞赏
1 条评论
感谢站长分享。