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条件 ...
随机推荐
- java面向对象(1)
一.方法传不固定值的用法 public void Test(int a,Person ...Persons) { for(Person p:Persons){ ...
- C语言 · 3000米排名预测
算法提高 3000米排名预测 时间限制:1.0s 内存限制:256.0MB 问题描述 3000米长跑时,围观党们兴高采烈地预测着最后的排名.因为他们来自不同的班,对所有运动员不一定都 ...
- 9g10在nandflash扇区的分配地址
- Http接口获取数据写入Hdfs
数据源类型:数组列表 [{field:value}, {field:value}, {field:value}, {field:value}] 1. 定义http数据源链接 package com.e ...
- 使用FineReport打造考试分析系统
本系统的优点: 1.报表内容丰富:系统中包含总分分析.小分分析.作答错因分析.试卷命题分析和各类用户报告单五类报表.涵盖学校须要的各项分析数据,并提供丰富的图表,使分析数据更直观表现. 2.操作灵活简 ...
- How get a String Width in Libgdx?
http://stackoverflow.com/questions/16600547/how-get-a-string-width-in-libgdx
- 基于html5 canvas 的客户端异步上传图片的插件,支持客户端压缩图片尺寸
/** * Created by xx on 15-05-28. * 基于html5 canvas 的客户端异步上传画片的插件 * 在实际应用中,常常要用于上传图片的功能.在现在越来越多的手机weba ...
- R语言中的factor
对于初学者来说,R语言中的factor有些难以理解.如果直译factor为“因子”,使得其更加难以理解.我倾向于不要翻译,就称其为factor,然后从几个例子中理解: <span style=& ...
- 【转】Visual Studio团队资源管理器 Git 源码管理工具简单入门
1.1 环境 Visual Studio + GitLab (其他版本同理) 1.2 Git操作过程图解 1.3 常见名词解释 拉取(Pull):将远程版本库合并到本地版本库,相当于(Fetch+Me ...
- 使用tomcat搭建centos的yum源
最近在折腾大数据,需要搭建一个yum源.一般的做法是在CentOS中安装httpd,然后将rpm包放入/var/www/html下面,再执行[createrepo .]即可. 不过虚拟机对传文件终归是 ...