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 ...
随机推荐
- 【LeetCode】616. Add Bold Tag in String 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历 日期 题目地址:https://leetcode ...
- 【九度OJ】题目1208:10进制 VS 2进制 解题报告
[九度OJ]题目1208:10进制 VS 2进制 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1208 题目描述: 对于一 ...
- 【LeetCode】720. Longest Word in Dictionary 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力查找 排序 日期 题目地址:https://le ...
- 【剑指Offer】合并两个排序的链表 解题报告(Python)
[剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interview ...
- 【剑指Offer】丑数 解题报告
[剑指Offer]丑数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: ...
- hud -5124-lines(线段树)
题目的意思是求重合层数最多的段(把点也看成段). 给的数据范围为N<1e5; ai<1e9; 有于N只有1e5;那么离散化一下可以将ai的范围映射到1e5,而不改变原端点的相对大小. 接下 ...
- 【剑指Offer】数据流中的中位数 解题报告(Python)
[剑指Offer]数据流中的中位数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
- 大数据分布式存储之Cassandra
分布式存储区别于集中式数据库存储,通过网络将海量数据存储到企业的各个数据节点(可能分布到不同的数据中心或机架上): 分布式存储需要考虑的问题 元数据管理 元数据是指数据本身的标识,通过元数据能很快的找 ...
- CS5210|低成本HDMI转VGA方案|CS5210参数说明
Capstone最新推出的一款HDMI转VGA音视频转接线或者转换器方案芯片CS5210. 其设计的优势在于内置晶振,外围电路器件较少设计简单,芯片封装集成度较高,方案BOM成本低,相比其他方案产品更 ...
- 基于Spring MVC + Spring + MyBatis的【学生信息管理系统】
资源下载:https://download.csdn.net/download/weixin_44893902/45603211 练习点设计: 模糊查询.删除.新增 一.语言和环境 实现语言:JAVA ...