19 Go的全能ORM简单入门
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)
数据更新
- 更新一个字段用Update
- 更新多个字段用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简单入门的更多相关文章
- [原创]MYSQL的简单入门
MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- 运维自动化之SALTSTACK简单入门
运维自动化之SaltStack简单入门 饱食终日而无所事事,是颓也,废也.但看昨日,费九牛二虎之力除一BUG便流连于新番之中,不知东方之既黑,实乃颓颓然而荒废矣.故今日来缀一文以忏昨日之悔. Salt ...
- [转]Scrapy简单入门及实例讲解
Scrapy简单入门及实例讲解 中文文档: http://scrapy-chs.readthedocs.io/zh_CN/0.24/ Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用 ...
- NumPy简单入门教程
# NumPy简单入门教程 NumPy是Python中的一个运算速度非常快的一个数学库,它非常重视数组.它允许你在Python中进行向量和矩阵计算,并且由于许多底层函数实际上是用C编写的,因此你可以体 ...
- seaJs模块化开发简单入门
随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发 ...
- 数据结构和算法(Golang实现)(1)简单入门Golang-前言
数据结构和算法在计算机科学里,有非常重要的地位.此系列文章尝试使用 Golang 编程语言来实现各种数据结构和算法,并且适当进行算法分析. 我们会先简单学习一下Golang,然后进入计算机程序世界的第 ...
- 数据结构和算法(Golang实现)(2)简单入门Golang-包、变量和函数
包.变量和函数 一.举个例子 现在我们来建立一个完整的程序main.go: // Golang程序入口的包名必须为 main package main // import "golang&q ...
- 数据结构和算法(Golang实现)(3)简单入门Golang-流程控制语句
流程控制语句 计算机编程语言中,流程控制语句很重要,可以让机器知道什么时候做什么事,做几次.主要有条件和循环语句. Golang只有一种循环:for,只有一种判断:if,还有一种特殊的switch条件 ...
随机推荐
- vue-router "path" is required in a route configuration
启用了动态路由,一直提示这个错误,页面打开也是空白,后来发现原来是component参数错误. 正确的写法为: component: () => import ('@/views/own-spa ...
- Bootstrap+Angularjs自制弹框
指令 directive('bsPopup', function ($parse) { return { require: 'ngModel', restrict: 'A', link: functi ...
- 在SQL Server中创建用户角色及授权
参考文献 http://database.51cto.com/art/201009/224075.htm 正文 要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权: 获得准许 ...
- 【Android】Android6.0读取通话记录
需求:读取通话记录,然后列表显示,每条记录的数据包括姓名.号码.类型(来电.去电.未接,字体颜色分别为绿.蓝.红),然后长按条目弹出一个列表弹窗,显示[复制号码到拨号盘].[发短信].[打电话]. 先 ...
- 【Unity】使用AssetDatabase编辑器资源管理
最近参考了各位大神的资源,初步学习了Unity的资源管理模式,包括在编辑器管理(使用AssetDatabase)和在运行时管理(使用Resources和AssetBundle).在此简单总结编辑器模式 ...
- hbase源码系列(三)Client如何找到正确的Region Server
客户端在进行put.delete.get等操作的时候,它都需要数据到底存在哪个Region Server上面,这个定位的操作是通过HConnection.locateRegion方法来完成的. loc ...
- RavenDb学习(三)静态索引
在静态索引这块,RavenDb其实的是lucene,所以里面有很多概念,其实都是lucene本身的. .定义静态Indexes documentStore.DatabaseCommands.PutIn ...
- 【C】——使用creat()函数需要注意的事项
#include<fcntl.h> int creat(const char *pathname, mode_t mode); 若成功则返回为只写打开的文件描述符,若出错则返回-1: 有时 ...
- 无法转换json问题 Error: Model.nodeDataArray value is not an instance of Array or NodeList or HTMLCollection
var jsonobj=eval('('+t+')'); 使用eval 函数,讲后台json字符串转换为前台jsarray数组. 如果使用 ajax不会出现这种情况,因为会自动转换. 但是如果直接从后 ...
- R语言比较运算符和逻辑运算符
比较运算:>,<,>=,<=,==,!=.(大于,小于,大于等于,小于等于,等于,不等于.) 逻辑运算:&,|,!.(与,或,非.)