gorm

昨天我的ldap账户改了以后,openfalcon(v2.1)-dashboard竟然无法登陆了!显然,没有把我的密码同步到本地数据库里面,怎么办?只能改openfalcon用户认证的源码了,把ldap密码同步到数据库里面,在这里改动的当中,发现openfalcon使用的gorm来操作数据库,那么我就简单的了解下gorm作为低级入门了。

话不多说,我们先看下openfalcon用户登录这块的源码:

1. 导入包与定义结构体
import (
"github.com/jinzhu/gorm"
) type DBPool struct {
Falcon *gorm.DB
Graph *gorm.DB
Uic *gorm.DB
Dashboard *gorm.DB
Alarm *gorm.DB
}
2. 定义变量
var db config.DBPool
3. http请求处理与使用orm操作数据库
	password := utils.HashIt(inputs.Passwd)

	var user uic.User
user = uic.User{
Name: inputs.Name,
Passwd: password,
Cnname: inputs.Cnname,
Email: inputs.Email,
Phone: inputs.Phone,
IM: inputs.IM,
QQ: inputs.QQ,
}
db.Uic.Table("user").Where("name = ?", inputs.Name).Scan(&user) // 以下代码 针对刚才说的bug,我自己改过了的,
if user.ID != 0 { // update the user's person info
//h.JSONR(c, http.StatusBadRequest, "name is already existing")
dt := db.Uic.Table("user").Where("name = ?", inputs.Name).Update("passwd", password)
if dt.Error != nil {
h.JSONR(c, http.StatusBadRequest, dt.Error)
return
}
} else { //
//for create a root user during the first time
if inputs.Name == "root" {
user.Role = 2
} dt := db.Uic.Table("user").Create(&user)
if dt.Error != nil {
h.JSONR(c, http.StatusBadRequest, dt.Error)
return
}
}

上面的流程说明了,下面就结合openfalcon的源码看看gorm的使用吧

gorm的简单使用

查询用户信息

先提前定义好用户信息的结构体,基本与mysql表字段一致

db.Uic.Table("user").Where("name = ?", inputs.Name).Scan(&user)

数据更新

  1. 更新一个字段用Update
  2. 更新多个字段用Updates
更新一个字段

更新一个字段可以直接写Update(字段名,新值)

dt := db.Uic.Table("user").Where("name = ?" , inputs.Name).Update("passwd", password)
if dt.Error != nil {
return
}
更新多个字段

1.使用map

更新多个字段,那么就要写成map形式了作为Updates的参数

dt := db.Uic.Table("user")..Where("name = ?" , inputs.Name).Updates(map[string]interface{}{"name": "hello", "im": xxx, "Phone": 182****0534})

2.使用struct来更新多个字段,使用struct更新多个属性,只会更新这些更改的和非空白字段,也就是说当使用struct更新时,FORM将仅更新具有非空值的字段

dt := db.Uic.Table("user")..Where("name = ?" , inputs.Name).Updates(User{Name: "hello", cnname: xxx})
更新全部字段

使用Save方法来更新所有字段,传入一个结构体的内存地址,凡是这个结构体的字段,都给更新了。

dt.Save(&user)

好了,到此为止,现学现用,如果还想学期其他功能的同学,可以查看 GORM 中文文档教程

19 Go的全能ORM简单入门的更多相关文章

  1. [原创]MYSQL的简单入门

    MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...

  2. Springmvc整合tiles框架简单入门示例(maven)

    Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...

  3. 运维自动化之SALTSTACK简单入门

    运维自动化之SaltStack简单入门 饱食终日而无所事事,是颓也,废也.但看昨日,费九牛二虎之力除一BUG便流连于新番之中,不知东方之既黑,实乃颓颓然而荒废矣.故今日来缀一文以忏昨日之悔. Salt ...

  4. [转]Scrapy简单入门及实例讲解

    Scrapy简单入门及实例讲解 中文文档:   http://scrapy-chs.readthedocs.io/zh_CN/0.24/ Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用 ...

  5. NumPy简单入门教程

    # NumPy简单入门教程 NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组.它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体 ...

  6. seaJs模块化开发简单入门

    随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发 ...

  7. 数据结构和算法(Golang实现)(1)简单入门Golang-前言

    数据结构和算法在计算机科学里,有非常重要的地位.此系列文章尝试使用 Golang 编程语言来实现各种数据结构和算法,并且适当进行算法分析. 我们会先简单学习一下Golang,然后进入计算机程序世界的第 ...

  8. 数据结构和算法(Golang实现)(2)简单入门Golang-包、变量和函数

    包.变量和函数 一.举个例子 现在我们来建立一个完整的程序main.go: // Golang程序入口的包名必须为 main package main // import "golang&q ...

  9. 数据结构和算法(Golang实现)(3)简单入门Golang-流程控制语句

    流程控制语句 计算机编程语言中,流程控制语句很重要,可以让机器知道什么时候做什么事,做几次.主要有条件和循环语句. Golang只有一种循环:for,只有一种判断:if,还有一种特殊的switch条件 ...

随机推荐

  1. Java 数据库中文变成问号???解决办法

    在连接的URL地址后面加上: url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 于是在正式 ...

  2. [Linux实用工具]Ubuntu环境下SSH的安装及使用

    SSH分为客户端和服务端. 服务端是一个守护进程,一般是sshd进程,在后台运行并响应来自客户端的请求.提供了对远程请求的处理,一般包括公共密钥认证.密钥交换.对称密钥加密和非安全连接. 客户端一般是 ...

  3. 【Web安全】越权操作——横向越权与纵向越权

    参考:http://blog.csdn.net/github_39104978/article/details/78265433 看了上面的文章,对越权操作的概念还是比较模糊,不明确实际场景. 横向越 ...

  4. html超链接,锚点以及特殊字符

    超链接 <a></a>中不加东西是显示不了的. href:跳转的地址 target:_self(本页面打开,默认选项),_blank(新页面打开) title:文本提示 空链接 ...

  5. C语言 · 身份证排序

    算法提高 身份证排序   时间限制:1.0s   内存限制:256.0MB      问题描述 安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号 ...

  6. backlight 子系统(转载)

    http://blog.csdn.net/weiqing1981127/article/details/8511676   Linux下的Backlight子系统(一) http://blog.csd ...

  7. JAVA ZIP 处理文件

    压缩文件 public static void main(String[] args) throws IOException { String filePath = "E:\\技术部员工工作 ...

  8. ASP.net中aspx与cs函数的互调

    转载自:http://www.2cto.com/kf/201209/152898.html aspx前台的script函数,调用aspx.cs中后台函数: aspx: <script type= ...

  9. hbase 学习(十三)集群间备份原理

    集群建备份,它是master/slaves结构式的备份,由master推送,这样更容易跟踪现在备份到哪里了,况且region server是都有自己的WAL 和HLog日志,它就像mysql的主从备份 ...

  10. Spark的机器学习算法mlib的例子运行

    Spark自带了机器学习的算法mlib,页面网址 http://spark.incubator.apache.org/docs/latest/mllib-guide.html 但是运行的时候,遇到了很 ...