作用域允许您重用常用逻辑,共享逻辑需要定义为类型

func(*gorm.DB) *gorm.DB

查询

func Scope1(db *gorm.DB) *gorm.DB {
return db.Where("name = ?", "哈哈哈")
}
func Scope2(slice1 []int) func(tx *gorm.DB) *gorm.DB {
return func(tx *gorm.DB) *gorm.DB {
return tx.Where("age IN (?)", slice1)
}
} var users []User
db.Debug().Scopes(Scope2([]int{7, 55})).Find(&users)
fmt.Println(users)

分页

func Paginate(ctx *gin.Context) func(db *gorm.DB) *gorm.DB {
// 分页功能实现
return func(db *gorm.DB) *gorm.DB {
page, _ := strconv.Atoi(ctx.Query("page"))
if page == 0 {
page = 1
}
size, _ := strconv.Atoi(ctx.Query("size"))
fmt.Println(size)
switch{
case size > 100:
size = 100
case size < 1:
size = 10
}
offset := (page - 1) * size
return db.Offset(offset).Limit(size)
}
} // 分页
router := gin.Default() router.GET("/json", func(context *gin.Context) {
var users []User
db.Scopes(Paginate(context)).Find(&users) // 等价于:Paginate(context)(db).Find(&users)
context.JSON(http.StatusOK, users)
}) router.Run(":8000")

更新

Scope 更新、删除示例:

func CurUser(ctx *gin.Context) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
name := ctx.Query("name")
if name != "" {
var user User
fmt.Println(name)
if db.Session(&gorm.Session{}).First(&user, "name = ?", name).Error == nil {
return db.Where("id = ?", user.ID)
}
}
db.AddError(errors.New("invalid user"))
return db
}
} // 分页
router := gin.Default() router.GET("/json", func(context *gin.Context) {
var users []User
// 更新 //db.Model(new(User)).Scopes(CurUser(context)).Update("name", "新版user")
// 删除
db.Scopes(CurUser(context)).Delete(&User{})
context.JSON(http.StatusOK, users)
}) router.Run(":8000")

gorm中的scope的更多相关文章

  1. 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .

    1.2.    Web开发中常用Scope简介 这里主要介绍基于Servlet的Web开发中常用的Scope. l        第一个比较常用的就是Application级Scope,通常我们会将一 ...

  2. 理解vue中的scope的使用

    理解vue中的scope的使用 我们都知道vue slot插槽可以传递任何属性或html元素,但是在调用组件的页面中我们可以使用 template scope="props"来获取 ...

  3. MAVEN中的Scope

    Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用6个值: *im ...

  4. Maven依赖中的scope详解

    scope的分类 compile 默认就是compile,什么都不配置也就是意味着compile.compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的 ...

  5. Maven依赖中的scope详解,在eclipse里面用maven install可以编程成功,到服务器上用命令执行报VM crash错误

    Maven依赖中的scope详解 项目中用了<scope>test</scope>在eclipse里面用maven install可以编译成功,到服务器上用命令执行报VM cr ...

  6. angularjs指令中的scope

    共享 scope 使用共享 scope 的时候,可以直接从父 scope 中共享属性.因此下面示例可以将那么属性的值输出出来.使用的是父 scope 中定义的值. js代码: app.controll ...

  7. angularjs 中的scope继承关系——(2)

    转自:http://www.lovelucy.info/understanding-scopes-in-angularjs.html angularjs 中的scope继承关系 ng-include ...

  8. spring中的scope详解

    spring容器中的bean默认是单例模式的,改成非单例模式需要在类上加上@Scope("prototype") 1. scope概论 spring中scope是一个非常关键的概念 ...

  9. HTML表格中<td scope="col">与<td scope="row">的含义

    HTML表格中<td scope="col">与<td scope="row">的含义 表格中 <td scope="c ...

随机推荐

  1. 在react项目中实现表格导出为Excel

    需求背景 数据表格有时需要增加导出Excel功能,大多数情况下都是后端出下载接口,前端去调用. 对于数据量少的数据,可以通过前端技术实现,减少后端工作. 实现方式 使用插件--xlsx 根据自己项目情 ...

  2. 【LeetCode】443. String Compression 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 使用额外空间 不使用额外空间 日期 题目地址:htt ...

  3. Java不可变类与final类

    概念 Java的不可变类是指八个基础类型的包装类和String,他们的数据成员是不可变的.使用加法等操作时,其实是创建了一个新的对象. Java的final类是对类用关键字final进行修饰,说明该类 ...

  4. 【LeetCode】814. Binary Tree Pruning 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 后序遍历 日期 题目地址:https://leetc ...

  5. 【剑指Offer】字符流中第一个不重复的字符 解题报告(Python)

    [剑指Offer]字符流中第一个不重复的字符 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...

  6. GCD - Extreme (II)(UVA11426)

    思路:欧拉函数: 欧拉函数,然后用下等差数列公式就行了. 1 #include<stdio.h> 2 #include<algorithm> 3 #include<ios ...

  7. 第九届河南理工大学算法程序设计大赛 正式赛L:最优规划(最小生成树)

    单测试点时限: 1.0 秒 内存限制: 512 MB 有很多城市之间已经建立了路径,但是有些城市之间没有路径联通.为了联通所有的城市,现在需要添加一些路径,为了节约,需要满足添加总路径是最短的. 输入 ...

  8. eclipse的安装及最大子数组求和

    我安装的是eclipse.由于eclipse是一个基于Java的课扩展开发平台,所以在安装eclipse之前要先安装Java的开发工具JDK(Java Devolopment Dit),且安装JDK需 ...

  9. CS5218替代AG6310方案|设计DP转HDMI转换方案|替代AG6310方案

    AG6310是一款实现显示端DP口转HDMI数据转换器.AG6310是一款单芯片解决方案,通过DP端口连接器传输视频和音频流,其DP1.2支持可配置的1.2和4通道,分别为1.62Gbps.2.7Gb ...

  10. JavaWeb项目作业 Market商品管理系统

    目录 一.语言和环境 二.实现功能 三.数据库设计 四.实现代码 一.语言和环境 实现语言:Java语言. 环境要求:MyEclipse(Eclipse)+MySQL. 实现方式:JBDC.jsp/s ...