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 ...
随机推荐
- jQuery实现页面导航内容定位效果,并支持内容切换
需求 页面向下滚动时,需要将顶部的搜索栏信息和导航菜单吸顶,并且,搜索栏信息和导航菜单之间可以切换. 效果 https://www.iguopin.com/index.php?m=&c=ind ...
- IDEA报错 Error:(24, 35) java: 常量字符串过长
修改设置
- 【九度OJ】题目1192:回文字符串 解题报告
[九度OJ]题目1192:回文字符串 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1192 题目描述: 给出一个长度不超过1000的 ...
- C++ 虚函数和友元
虚函数具有动态联编性,在类族中有强大功能:友元函数具有跨类访问的功能,本质却是一种对封装的破坏. 先看这样一个例子: #include<iostream> using namespace ...
- CapstoneCS5210|CS5210低BOM成本方案CS5210|HDMI转VGA芯片方案
Capstone最新推出的一款HDMI转VGA音视频转接线或者转换器方案芯片CS5210. 其设计的优势在于内置晶振,外围电路器件较少设计简单,芯片封装集成度较高,方案BOM成本低,相比其他方案产品更 ...
- Spring Boot 整合 Fisco Bcos(区块链)
简介 FISCO BCOS是由国内企业主导研发.对外开源.安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源. 目前,成熟的区块链的平台不少,之所以选择FISC ...
- MySQL支持IPv6
开启和验证MySQL支持IPv6的方法, 此处使用的MySQL版本为mysql-5.5.35-linux2.6-x86_64. 1.验证操作系统支持IPv6,此处是Linux操作系统 ping6 :: ...
- unittest_认识unittest(1)
unittest是python内置的单元测试框架,具备编写用例.组织用例.执行用例.输出报告等自动化框架的条件. 使用unittest前需要了解该框架的五个概念: 即test case,test su ...
- docker查看容器的ip地址
查看Docker的底层信息. docker inspect 会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息 # 列出所有容器的IP地址docker inspect --forma ...
- sqlserver - 判断字段是否是纯数字
PATINDEX('%[^0-9|.|-|+]%',w.waterMeterNo)=0 如 SELECT w.* FROM [dbo].[waterMeterInfo] w where isnull( ...