golang操作gorm基本

aside section ._1OhGeD · · 12394 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

对于golang中使用gorm操作mysql,可能其他的操作都是固定的,唯一麻烦的就是字段的映射。
gorm允许自己定义一个表的结构映射,但是,golang中,首字母大写来表示public或者private,而gorm在做映射的时候,大写的转化是不一样的。这里就做一下区分。

1.直接使用表的机构映射

比如你用find之类不需要写表名称,直接用结构获取的情况下,struct的机构和数据库中的结构要一致,不一样的用gorm:"column:nameSpace",这个来说明,column里面就是你想要映射的名称。

2.定义自己的结构

这么定义的话,就不要求完全一样。
这里又分两种

一,你如果没有用row,直接一条语句末尾加Scan(&struct),这么来接受的,需要字段名称对应,也可以这个可以首字母大写,前提是数据库中表没有其他大写,如果数据库表内字段有其他大写,则使用gorm:"column:nameSpace"来重新定义在数据库中使用的名称。
二,没有直接返回结果,而是返回一个rows,在next内接受结果,这样的话,就不用注重名称,只需要顺序对应好即可。比如你的struct第一个成员代表name,那就写在表name的那一列上就好。

以下是一个小例子,注释里面的是另一种写法

package main

import (
    "log"

    _ "github.com/go-sql-driver/mysql"
)

type TestTable struct {
    NameSpace string `gorm:"column:nameSpace"`
    Age       int
    Address   string
}

func main() {
    db, err := DbOpen("mysql", "root:123456@(127.0.0.1:3306)/stbtest?charset=utf8")
    if err != nil {
        log.Println(err)
        return
    }
    defer DbClose(db)
    st := TestTable{}
    db.Table("test").Where("nameSpace=? and age = ?", "aa", 1).Scan(&st)
    // row, err := db.Table("test").Rows()
    // for row.Next() {
    //  row.Scan(&st.NameSpace, &st.Age, &st.Address)
    //  log.Println("||", st.NameSpace, "||", st.Age, "||", st.Address)
    // }
    log.Println("||", st.NameSpace, "||", st.Age, "||", st.Address)
    if err != nil {
        log.Println(err)
        return
    }
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section ._1OhGeD

查看原文:golang操作gorm基本

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

12394 次点击  
加入收藏 微博
下一篇:gjson
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传