zoukankan      html  css  js  c++  java
  • GORM高级查询

    models

    nav.go

    package models
    
    type Nav struct {
    	Id     int    `json:"id"`
    	Title  string `json:"title"`
    	Url    string `json:"url"`
    	Status int    `json:"status"`
    	Sort   int    `json:"sort"`
    }
    
    func (n Nav) TableName() string {
    	return "nav"
    }

    controllers

    nav.go

    package controllers
    
    import (
    	"beegogorm/models"
    
    	"github.com/astaxie/beego"
    )
    
    type NavController struct {
    	beego.Controller
    }
    
    func (c *NavController) Get() {
    
    	// 查询全部数据
    	nav := []models.Nav{} // nav实例,查询的数据是集合
    	models.DB.Find(&nav)  // &nav 把查到的数据赋值给nav
    
    	// 查询一条数据
    	nav := models.Nav{Id: 3} // 获取Id等于3的数据
    	models.DB.Find(&nav)
    
    	/*
    		1、Where条件
    		=
    		<
    		>
    		<=
    		>=
    		!=
    		IS NOT NULL
    		IS NULL
    		BETWEEN AND
    		NOT BETWEEN AND
    		IN
    		OR
    		AND
    		NOT
    		LIKE
    	*/
    	// 查询id大于3的数据
    	nav := []models.Nav{}
    	models.DB.Where("id<3").Find(&nav)
    
    	// 查询id大于5的数据
    	var n = 5
    	nav := []models.Nav{}
    	models.DB.Where("id>?", n).Find(&nav) // 动态的数据使用占位符
    
    	var n1 = 3
    	var n2 = 9
    	nav := []models.Nav{}
    	models.DB.Where("id > ? AND id < ?", n1, n2).Find(&nav)
    
    	// 查询id等于3 5 6的数据
    	nav := []models.Nav{}
    	models.DB.Where("id in (?)", []int{3, 5, 6}).Find(&nav)
    
    	// 查询标题有 会 的数据
    	nav := []models.Nav{}
    	models.DB.Where("title like ?", "%会%").Find(&nav)
    
    	// 查询id在什么之间
    	nav := []models.Nav{}
    	models.DB.Where("id between ? and ?", 3, 6).Find(&nav)
    
    	/*
    		2、Or 条件
    	*/
    	nav := []models.Nav{}
    	models.DB.Where("id=? OR id=?", 2, 3).Find(&nav)
    	// 另一种写法
    	nav := []models.Nav{}
    	models.DB.Where("id=?", 2).Or("id=?", 3).Or("id=4").Find(&nav)
    
    	/*
    		3、选择字段查询
    	*/
    	nav := []models.Nav{}
    	models.DB.Select("id, title, url").Find(&nav)
    
    	/*
    		4、SubQuery 子查询
    		models.DB.Table("user").Select("avg(age)").SubQuery()
    	*/
    	user := []models.User{}
    	// 先查出平均年龄 models.DB.Table("user").Select("avg(age)").SubQuery()
    	// 在当做参数传给问号
    	// 在Find一下
    	models.DB.Where("age<?", models.DB.Table("user").Select("avg(age)").SubQuery()).Find(&user)
    	c.Data["json"] = user
    	c.ServeJSON()
    
    	/*
    		5、排序 Limit 、Offset
    
    	*/
    	nav := []models.Nav{}
    	// id Asc 按照id进行升序排序
    	// desc 降序
    	models.DB.Where("id>2").Order("id Asc").Find(&nav)
    
    	nav := []models.Nav{}
    	models.DB.Where("id>2").Order("sort Desc").Order("id Asc").Find(&nav)
    	
    	// 只要前面两条
    	nav := []models.Nav{}
    	models.DB.Where("id>1").Limit(2).Find(&nav)
    
    	// 跳过2条查询2条
    	nav := []models.Nav{}
    	models.DB.Where("id>1").Offset(2).Limit(2).Find(&nav)
    	
    	/*
    		6、总数
    	*/
    	// 分页时用到
    	nav := []models.Nav{}
    	var num int
    	models.DB.Where("id > ?", 2).Find(&nav).Count(&num)
    
    	c.Data["json"] = num
    	c.ServeJSON()
    
    	// 上面每一个nav,都需要封装和返回,只写一个在这
    	c.Data["json"] = nav // 封装json
    	c.ServeJSON()        // 返回json
    
    }
    

      

      

  • 相关阅读:
    html5全局属性
    net包之Lookup
    net包之dial拨号和listen监听
    net包之IPConn
    利用 RequireJS 进行依赖项管理
    canvas 学习资料
    net包之UDPConn
    LABjs、RequireJS、SeaJS 哪个最好用?为什么?
    WIA
    Mac OS 10.x.x安装在Vmware虚拟机上!
  • 原文地址:https://www.cnblogs.com/yzg-14/p/13418261.html
Copyright © 2011-2022 走看看