gorm中的scope
作用域允许您重用常用逻辑,共享逻辑需要定义为类型
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的更多相关文章
- 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .
1.2. Web开发中常用Scope简介 这里主要介绍基于Servlet的Web开发中常用的Scope. l 第一个比较常用的就是Application级Scope,通常我们会将一 ...
- 理解vue中的scope的使用
理解vue中的scope的使用 我们都知道vue slot插槽可以传递任何属性或html元素,但是在调用组件的页面中我们可以使用 template scope="props"来获取 ...
- MAVEN中的Scope
Dependency Scope 在POM 4中,<dependency>中还引入了<scope>,它主要管理依赖的部署.目前<scope>可以使用6个值: *im ...
- Maven依赖中的scope详解
scope的分类 compile 默认就是compile,什么都不配置也就是意味着compile.compile表示被依赖项目需要参与当前项目的编译,当然后续的测试,运行周期也参与其中,是一个比较强的 ...
- Maven依赖中的scope详解,在eclipse里面用maven install可以编程成功,到服务器上用命令执行报VM crash错误
Maven依赖中的scope详解 项目中用了<scope>test</scope>在eclipse里面用maven install可以编译成功,到服务器上用命令执行报VM cr ...
- angularjs指令中的scope
共享 scope 使用共享 scope 的时候,可以直接从父 scope 中共享属性.因此下面示例可以将那么属性的值输出出来.使用的是父 scope 中定义的值. js代码: app.controll ...
- angularjs 中的scope继承关系——(2)
转自:http://www.lovelucy.info/understanding-scopes-in-angularjs.html angularjs 中的scope继承关系 ng-include ...
- spring中的scope详解
spring容器中的bean默认是单例模式的,改成非单例模式需要在类上加上@Scope("prototype") 1. scope概论 spring中scope是一个非常关键的概念 ...
- HTML表格中<td scope="col">与<td scope="row">的含义
HTML表格中<td scope="col">与<td scope="row">的含义 表格中 <td scope="c ...
随机推荐
- Abelian Period
Abelian Period Accepts: 288 Submissions: 984 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 26 ...
- 1276 - Very Lucky Numbers
1276 - Very Lucky Numbers PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 32 ...
- 【授课录屏】JavaScript高级(IIFE、js中的作用域、闭包、回调函数和递归等)、MySQL入门(单表查询和多表联查)、React(hooks、json-server等) 【可以收藏】
一.JavaScript授课视频(适合有JS基础的) 1.IIFE 2.js中的作用域 3.闭包 4.表达式形式函数 5.回调函数和递归 资源地址:链接:https://pan.baidu.com/s ...
- 小白自制Linux开发板(第二季 V3s篇) 一. 换个核心再来一次
1.前言 大家心心念念(个人认为)的小白自制开发板全新系列正式来了,之前我们使用全志的F1C200s芯片制作了一个小电脑,众所周知,调试很艰难,坑也很多,以至于墨云到现在还是没找到对应的补救方案,为了 ...
- Java基础(八)——IO流1_字节流、字符流
一.概述 1.介绍 I/O是 Input/Output 的缩写,IO流用来处理设备之间的数据传输,如读/写文件,网络通讯等.Java对数据的操作是通过流的方式进行.java.io 包下提供了各种&qu ...
- Dart 2.15 现已发布
作者 / Michael Thomsen, Dart & Flutter Product Manager, Google 我们已经正式发布了 Dart SDK 的 2.15 版本,该版本新增了 ...
- Capstone CS5266替代AG9311 Type-C转HDMI带PD3.0+USB3.0拓展坞方案
Capstone CS5266替代AG9311 Type-C转HDMI带PD3.0+USB3.0拓展坞方案CS5266是 Capstone 最新推出的一款用于USB TYPE-C端口的高度集成.高 ...
- 访问局域网内其他主机的VMware虚拟机上的mysql数据库和redis缓存
上一篇写了访问局域网内其他主机的虚拟机上的项目 ,现在说说访问局域网内其他主机的虚拟机上的数据库和缓存 博主使用的linux是Ubuntu16.04: 一.安装数据库和缓存 这里连接的数据库和缓存以m ...
- 更便捷的Mybatis增强插件——EasyMybatis
easy-mybatis是一个对Mybatis的增强框架(插件).在Spring集成Mybatis的基础上,将项目开发中对数据库的常用操作统一化.使用本框架可以很便捷的对数据库进行操作,提高开发效率, ...
- CSS基础 华为渐变色产品列表 综合实战
华为网页链接:https://www.huawei.com/cn/?ic_medium=direct&ic_source=surlent html代码部分: <div class=&qu ...