首页 > 其他分享 >golang gorm使用

golang gorm使用

时间:2022-12-02 21:11:33浏览次数:33  
标签:Db fmt db whereSql golang age values 使用 gorm

 

gorm链式操作:

Method Chaining,Gorm 实现了链式操作接口,所以你可以把代码写成这样:

 
// 创建一个查询
tx := db.Where("name = ?", "jinzhu")
// 添加更多条件
if someCondition {
 tx = tx.Where("age = ?", 20)
} else {
 tx = tx.Where("age = ?", 30)
}
if yetAnotherCondition {
 tx = tx.Where("active = ?", 1)
}

 

var db *gorm.DB  // 已经进行了db的初始化操作,db为全局变量
func getUsers(c *gin.Context) {
  users := make([]User, 0)
  Db := db   
  if age, isExist := c.GetQuery("age"); isExist == true {
    ageInt, _ := strconv.Atoi(age)
    Db = Db.Where("age = ?", ageInt)
  }
  if num, isExist := c.GetQuery("num"); isExist == true {
    numInt, _ := strconv.Atoi(num)
    Db = Db.Where("num = ?", numInt)
  }
  if name, isExist := c.GetQuery("name"); isExist == true {
    Db = Db.Where("name = ?", name)
  }
  if err := Db.Find(&users).Error; err != nil {
    fmt.Println(err.Error())
  }
  c.JSON(http.StatusOK, gin.H{
    "data": users,
  })
}

这里需要注意一个细节,首先将全局的db变量赋值给了Db,如果用db直接进行操作,那一系列的赋值语句将会影响db的地址,影响后续的数据库操作.

Db := db

https://www.jb51.net/article/202475.htm

 

类似 PHP的laravel框架就提供了这个便捷,比如$condition[] = ["age",">",20],

func BuildCondition(where map[string]interface{}) (whereSql string,
    values []interface{}, err error) {
    for key, value := range where {
        conditionKey := strings.Split(key, " ")
        if len(conditionKey) > 2 {
            return "", nil, fmt.Errorf("" +
                "map构建的条件格式不对,类似于'age >'")
        }
        if whereSql != "" {
            whereSql += " AND "
        }
        switch len(conditionKey) {
        case 1:
            whereSql += fmt.Sprint(conditionKey[0], " = ?")
            values = append(values, value)
            break
        case 2:
            field := conditionKey[0]
            switch conditionKey[1] {
            case "=":
                whereSql += fmt.Sprint(field, " = ?")
                values = append(values, value)
                break
            case ">":
                whereSql += fmt.Sprint(field, " > ?")
                values = append(values, value)
                break
            case ">=":
                whereSql += fmt.Sprint(field, " >= ?")
                values = append(values, value)
                break
            case "<":
                whereSql += fmt.Sprint(field, " < ?")
                values = append(values, value)
                break
            case "<=":
                whereSql += fmt.Sprint(field, " <= ?")
                values = append(values, value)
                break
            case "in":
                whereSql += fmt.Sprint(field, " in (?)")
                values = append(values, value)
                break
            case "like":
                whereSql += fmt.Sprint(field, " like ?")
                values = append(values, value)
                break
            case "<>":
                whereSql += fmt.Sprint(field, " != ?")
                values = append(values, value)
                break
            case "!=":
                whereSql += fmt.Sprint(field, " != ?")
                values = append(values, value)
                break
            }
            break
        }
    }
    return
}

 

目前这种实现方法利用了map来实现,但是还有一种方法可以实现,仿照php的laravel框架实现形式利用切片的形式也是可以实现的,这种实现方法和这种类似,我就不实现了。

具体的用法如下所示:

conditionString, values, _ := tool.BuildCondition(map[string]interface{}{
        "itemNO":        "02WZ05133",
        "itemName like": "%22220",
        "id in":         []int{20, 19, 30},
        "num !=" : 20,
    })
var student model.Student
db.where(conditionString,values).Find(&student)

以上就是拼接sql条件的构建。



链接:https://www.jianshu.com/p/09eea18e33c1/

 

标签:Db,fmt,db,whereSql,golang,age,values,使用,gorm
From: https://www.cnblogs.com/youxin/p/16945620.html

相关文章

  • 使用iSCSI服务部署网络存储
    实验环境:主机名称操作系统IP地址iSCSI服务端CentOS7.4192.168.126.131iSCSI客户端CentOS7.4192.168.126.200iSCSI客户端Windows10专业版192.168.126.2......
  • kali使用命令ifconfig查询ip地址一直为127.0.0.1的解决办法
    解决方法:执行命令:dhclient-v,即可解决  ......
  • golang的插入排序算法
    1、什么是插入排序?先看一个例子:{7,6,1,9,3}无序数列中,我们约定好无序数列的第一个元素7作为有序数列{7},然后分别对{6,1,9,3}的数与7进行比较移位得到新的有序数列。第一次迭......
  • 使用关联参数
    在http请求下加入“后置处理器”->“正则表达式提取器”:引用名称即使用的参数名;填入正则表达式;模板选取匹配的组;匹配数字为匹配的个数,负数表示全部匹配;缺省值为没有匹配到......
  • webSocket基本使用
    //创建ws实例,建立连接(ws://121.40.165.18.8800有广告)    varws=newWebSocket('wss://javascript.info/article/websocket/demo/hello')    //......
  • Istio的使用场景参考
    初步使用Kubernetes或Kubernetes在生产环境中已经稳定运行了一段时间,如果想要接入Istio服务网格,那么对Kubernetes集群版本也有要求,如果读者正在使用的Kubernetes集群不支持......
  • CSS3 filter(滤镜) 属性使用整理
    一、CSS3filter(滤镜) 1.定义filter属性定义了元素(通常是<img>)的可视效果(例如:模糊与饱和度)。默认值:none继承:no动画支持:是。详细可查阅 CSS动画......
  • [C#] Func、Action的简单使用
    参考代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;namespaceFuncActionDemo{classFuncActionTest{publicvoidTe......
  • lwl-resume 个人简历编辑使用说明
    LWLRESUME一个简洁、可自定义生成pdf的在线简历编辑工具!前言我们一般都是使用word编写简历,但是排版问题比较头疼,非常耗时不说,最后转换pdf有些地方可能还会样式错乱……......
  • Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测|附代码数据
    全文下载链接:http://tecdat.cn/?p=20678在本文中,预测股价已经受到了投资者,政府,企业和学者广泛的关注。然而,数据的非线性和非平稳性使得开发预测模型成为一项复杂而具有挑......