zoukankan      html  css  js  c++  java
  • 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)
    

    数据更新

    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 中文文档教程

  • 相关阅读:
    PDO如何选择其他数据库的驱动
    PHP里关于时间日期大小写(Y,y,M,m...)
    数据库的基本操作
    数据库--PHP环境搭建
    曾经的中国互联网:多少巨头销声匿迹
    SQL 查找 45道练习题
    关于padding
    Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'(using password: YSE)
    centos 格式化硬盘并挂载,添加重启后生效
    windows2003服务器不显示桌面怎么办
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/8137303.html
Copyright © 2011-2022 走看看