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基础解疑!!

    解疑1:抽象关键字为什么不能和 private. static. final 共存 ①private 是私有的意思,当它修饰方法的时候子类是不能够继承父类私有方法的,但是 abstract 修饰的方法 ...

  2. spring-retry的简单使用

    添加Maven依赖: <dependency> <groupId>org.springframework.retry</groupId> <artifactI ...

  3. git diff 的用法

    git diff 对比两个文件修改的记录 不带参数的调用 git diff filename 这种是比较 工作区和暂存区 比较暂存区与最新本地版本库 git diff --cached filenam ...

  4. 数据库ACID属性

    A:Atomicity,原子性.即是事务要么全部完成,要么不完成. C:Consistency,一致性.即是事务如果是并发的,系统也必须如同串行一样. I:Isolation,隔离性.即是使得每个事务 ...

  5. 基于Cookie的购物车

    var Cookies = {}; Cookies.set = function (name, value) { var argv = arguments; var argc = arguments. ...

  6. java 生成指定区间随机数

    int randNumber =rand.nextInt(MAX - MIN + 1) + MIN; // randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数

  7. 记录第一次使用jni编译so包的入门操作

    1.配置 下载自己相对应的ndk平台版本后配置到studio 在local.properties加入路径 在gradle.properties文件添加 2.创建工具类(注意方法都是native的) 3 ...

  8. office 2013 快速换KEY

    在有些时候,我们总会碰到一些需要更换Office安装Key(序列号.密钥)的情形,例如购买或朋友赠了新的Key等等.网上搜索的话,有很多种更改变换Office 2010序列号办法,今天就来挨个介绍一下 ...

  9. Check which .NET Framework version is installed

    his article will help you to know which .NET Framework version is installed from command line. Check ...

  10. 机器学习 demo分西瓜

    周老师的书,对神经网络写了一个小的Demo 是最简单的神经网络,只有一层的隐藏层. 这次练习依旧是对西瓜的好坏进行预测. 主要分了以下几个步骤 1.数据预处理 对西瓜的不同特性进行数学编码表示(0~1 ...