gorm+ginlaravel的多条件查询(包含LIKE模糊查询、Map、Not、Order)、增、改、删MVC示例

-

GinLaravel框架:

Github(推荐):https://github.com/fyonecon/ginlaravel

Gitee(备用):https://gitee.com/fyonecon/ginlaravel

-

示例User数据库数据:

多条件查询多一个列表:

-

Kit数据库定义:

var Db *sql.DB = driver.MysqlDb // 连接gomysql扩展
var DB *gorm.DB = driver.GDB    // 连接gorm扩展

controller:

package Gen3App

import (
	"ginlaravel/app/Common"
	"ginlaravel/app/Http/Model/Gen3"
	"ginlaravel/app/Kit"
	"github.com/gin-gonic/gin"
	"log"
)

// 用户列表
func ListGMUser(ctx *gin.Context)  {
	// 预定义参数
	var state int
	var msg string

	type ListUserKeys struct { // 结果集,参数名需大写
		UserId int
		UserClassId int
		UserClassName string
		Nickname string
		CreatTime string
	}

	_userClassId := Kit.Input(ctx, "user_class_id")
	userClassId := Common.StringToInt(_userClassId)
	nickname := Kit.Input(ctx, "nickname")

	_page := Kit.Input(ctx, "page")
	page := int(Common.StringToInt(_page))

	// 处理分页
	var limit int = Common.Page["limit"]
	var offset int = 0 // 本页从第几个开始
	if page <= 0 { page = 1 } else if page > 200 { page = 200 }
	page = page - 1
	offset = limit*page

	listUserModel := Gen3.ListUserKeys{}
	res, total, err := listUserModel.ListUser(limit, offset, userClassId, nickname)

	if err != nil {
		state = 0
		msg = "查询无数据"
	}else {
		state = 1
		msg = "查询完成"
	}

	// 返回一些测试数据
	testData := map[string]interface{}{
		"page": _page,
		"user_class_id": userClassId,
		"nickname": nickname,
	}

	// 分页数据
	paging := map[string]interface{}{
		"total": total,
		"limit": limit,
		"page": page+1,
	}
	// 返回数据
	ctx.JSONP(200, map[string]interface{}{
		"state": state,
		"msg": msg,
		"paging": paging,
		"test_data": testData,
		"content": res,
	})
}

// 某用户
func ThatGMUser(ctx *gin.Context)  {
	// 预定义参数
	var state int
	var msg string

	// 处理请求参数
	_userId := Kit.Input(ctx, "user_id")
	userId := Common.StringToInt(_userId)

	// 查询数据库
	userModel := Gen3.ThatUserKeys{}
	data, err := userModel.ThatGMUser(userId)

	if err != nil {
		state = 0
		msg = "查询无数据"
	}else {
		state = 1
		msg = "查询完成"
	}

	// 返回一些测试数据
	testData := map[string]interface{}{
		"user_id": _userId,
	}

	// 返回特殊格式意义的数据
	ctx.JSON(200, gin.H{
		"state":     state,
		"msg":       msg,
		"test_data": testData,
		"content":   data,
	})
}

// 新增用户信息
func AddGMUser(ctx *gin.Context)  {
	// 预定义参数
	var state int
	var msg string

	// 处理请求参数
	_userClassId := Kit.Input(ctx, "user_class_id")
	userClassId := Common.StringToInt(_userClassId)
	_nickname := Kit.Input(ctx, "nickname")
	createTime := Common.GetTimeDate("YmdHis")

	if userClassId == 0 {
		ctx.JSONP(200, map[string]interface{}{
			"state": 0,
			"msg": "user_class_id不正确",
		})
		return
	}

	if len(_nickname) == 0 {
		ctx.JSONP(200, map[string]interface{}{
			"state": 0,
			"msg": "nickname不正确",
		})
		return
	}

	// 处理模型数据
	userModel := Gen3.AddUserKeys{}
	if err := ctx.ShouldBind(&userModel); err != nil {
		log.Println(err.Error())
		ctx.JSONP(200, map[string]interface{}{
			"state": 0,
			"msg": err.Error(),
		})
		return
	}

	// 操作数据
	userId, err := userModel.AddUser(userClassId, _nickname, createTime)

	if err != nil {
		state = 0
		msg = "新增失败"
	}else {
		state = 1
		msg = "新增成功"
	}

	// 返回一些测试数据
	testData := map[string]interface{}{

	}

	// 返回特殊格式意义的数据
	ctx.JSONP(200, map[string]interface{}{
		"state":     state,
		"msg":       msg,
		"test_data": testData,
		"content":   userId,
	})
}


// 更新用户信息
func UpdateGMUser(ctx *gin.Context)  {
	// 预定义参数
	var state int
	var msg string

	// 处理请求参数
	// _userId := ctx.PostForm("user_id") // Post方法获得参数
	_userId := Kit.Input(ctx, "user_id")
	userId := Common.StringToInt(_userId)
	_userClassId := Kit.Input(ctx, "user_class_id")
	userClassId := Common.StringToInt(_userClassId)
	_nickname := Kit.Input(ctx, "nickname") // GET方法获得参数
	updateTime := Common.GetTimeDate("YmdHis")

	if userClassId == 0 {
		ctx.JSON(200, gin.H{
			"state": 0,
			"msg": "user_class_id不正确",
		})
		return
	}

	if len(_nickname) == 0 {
		ctx.JSON(200, gin.H{
			"state": 0,
			"msg": "nickname不正确",
		})
		return
	}

	userModel := Gen3.UpdateUserKeys{}
	if err := ctx.ShouldBind(&userModel); err != nil {
		ctx.JSON(200, gin.H{
			"state": 0,
			"msg": err.Error(),
		})
		return
	}

	// 操作数据
	res, err := userModel.UpdateUser(userId, userClassId, _nickname, updateTime)

	if res == 0 || err != nil {
		// log.Println(err.Error())
		state = 0
		msg = "更新失败或用户原数据不存在"
	}else {
		state = 1
		msg = "更新成功"
	}

	// 返回一些测试数据
	testData := map[string]interface{}{

	}

	// 返回特殊格式意义的数据
	ctx.JSON(200, gin.H{
		"state":     state,
		"msg":       msg,
		"test_data": testData,
		"content":   res,
	})

}


// 删除用户
// 不是真正删除
func DelGMUser(ctx *gin.Context)  {
	// 预定义参数
	var state int
	var msg string

	// 处理请求参数
	// _userId := ctx.PostForm("user_id") // Post方法获得参数
	_userId := Kit.Input(ctx, "user_id") // GET方法获得参数
	userId := Common.StringToInt(_userId)
	updateTime := Common.GetTimeDate("YmdHis")

	userModel := Gen3.DelUserKeys{}
	if err := ctx.ShouldBind(&userModel); err != nil {
		ctx.JSON(200, gin.H{
			"state": 0,
			"msg": err.Error(),
		})
		return
	}

	// 操作数据
	res, err := userModel.DelUser(userId, updateTime)

	if res == 0 || err != nil {
		// log.Println(err.Error())
		state = 0
		msg = "用户数据不存在"
	}else {
		state = 1
		msg = "已删除"
	}

	// 返回特殊格式意义的数据
	ctx.JSON(200, gin.H{
		"state":     state,
		"msg":       msg,
		"content":   res,
	})
}

// 彻底删除用户
func ClearGMUser(ctx *gin.Context)  {
	// 预定义参数
	var state int
	var msg string

	// 处理请求参数
	_userId := Kit.Input(ctx, "user_id") // GET方法获得参数
	userId := Common.StringToInt(_userId)

	userModel := Gen3.ClearUserKeys{}
	if err := ctx.ShouldBind(&userModel); err != nil {
		ctx.JSON(200, gin.H{
			"state": 0,
			"msg": err.Error(),
		})
		return
	}

	// 操作数据
	res, err := userModel.ClearUser(int64(userId))

	if res == 0 || err != nil {
		// log.Println(err.Error())
		state = 0
		msg = "用户数据不存在"
	}else {
		state = 1
		msg = "已彻底删除"
	}

	// 返回特殊格式意义的数据
	ctx.JSON(200, gin.H{
		"state":     state,
		"msg":       msg,
		"content":   res,
	})
}

model:

package Gen3

import (
	"ginlaravel/app/Common"
	"ginlaravel/app/Kit"
)

// 查用户列表
type ListUserKeys struct { // 参数名需大写
	UserId int64 `json:"user_id"`
	Nickname string `json:"nickname"`
	UserClassId int64 `json:"user_class_id"`
	CreateTime string `json:"create_time"`
	UpdateTime string `json:"update_time"`
}
func (model *ListUserKeys) ListUser(_limit int, _offset int, _userClassId int64, _nickname string) (res []ListUserKeys, total int64, err error) {

	// 多查询条件,仅限"="查询
	WhereMap := map[string]interface{}{}
	// 多排除查询条件
	NotMap := map[string]interface{}{
		"state": []int64{2},
	}

	// 数据列表
	list := Kit.DB.Table("gl_user").Not(NotMap).Where(WhereMap)
	// 数据总数
	count := Kit.DB.Table("gl_user").Not(NotMap).Where(WhereMap)

	// 加入非"="多条件查询
	if len(_nickname) != 0 {
		list = list.Where("nickname LIKE ?", "%" + _nickname + "%")
		count = count.Where("nickname LIKE ?", "%" + _nickname + "%")
	}
	if _userClassId != 0 {
		list = list.Where("user_class_id = ?", _userClassId)
		count = count.Where("user_class_id = ?", _userClassId)
	}

	// 完成其他条件
	list.Order("nickname asc").Limit(_limit).Offset(_offset).Scan(&res)
	count.Order("nickname asc").Count(&total)

	// 遍历struct数据
	for i := 0; i < len(res); i++ {
		theCreateTime := res[i].CreateTime
		newCreateTime := Common.DateToDate(theCreateTime)
		res[i].CreateTime = newCreateTime

	}

	return
}

// 某用户
type ThatUserKeys struct { // 数据库表的字段(输出结果)
	UserId int64 `json:"user_id"`
	Nickname string `json:"nickname"`
	UserClassId int64 `json:"user_class_id"`
	CreateTime string `json:"create_time"`
	UpdateTime string `json:"update_time"`
}
func (model *ThatUserKeys) ThatGMUser(userId int64) (res ThatUserKeys, err error)  {

	// 多查询条件,仅限"="查询
	WhereMap := map[string]interface{}{}
	WhereMap["user_id"] = userId
	// 多排除查询条件
	NotMap := map[string]interface{}{
		"state": []int64{2},
	}

	// 操作数据库
	Kit.DB.Table("gl_user").Not(NotMap).Where(WhereMap).First(&res)

	createTime := res.CreateTime
	createTime = Common.DateToDate(createTime)
	res.CreateTime = createTime

	return
}

// 新增
type AddUserKeys struct {
	ID int64 // 要返回的主键值
	UserClassId int64 `json:"user_class_id"`
	Nickname    string `json:"nickname"`
	CreateTime  string `json:"create_time"`

}
func (model *AddUserKeys)AddUser(userClassId int64, nickname string, createTime string) (_id int64, err error)  {

	// 新数据
	data := AddUserKeys{
		UserClassId: userClassId,
		Nickname: nickname,
		CreateTime: createTime,
	}

	err = Kit.DB.Table("gl_user").Select("user_class_id", "nickname", "create_time").Create(&data).Error

	_id = data.ID

	return
}

// 更新
type UpdateUserKeys struct {}
func (model *UpdateUserKeys)UpdateUser(userId int64, userClassId int64, nickname string, updateTime string) (res int64, err error) {

	// 多查询条件,仅限"="查询
	WhereMap := map[string]interface{}{}
	WhereMap["user_id"] = userId
	// 多排除查询条件
	NotMap := map[string]interface{}{
		"state": []int64{2}, // state <> [2, 3, 4]
	}

	// 新数据
	data := map[string]interface{}{
		"user_class_id": userClassId,
		"nickname": nickname,
		"update_time": updateTime,
	}

	res = Kit.DB.Table("gl_user").Not(NotMap).Where(WhereMap).Updates(data).RowsAffected

	return
}

// 删除用户
// 不是真正删除,仅不可见状态
type DelUserKeys struct {}
func (model *DelUserKeys)DelUser(userId int64, updateTime string) (res int64, err error) {

	// 多查询条件,仅限"="查询
	WhereMap := map[string]interface{}{}
	WhereMap["user_id"] = userId
	// 多排除查询条件
	NotMap := map[string]interface{}{
		"state": []int64{2}, // state <> [2]
	}

	// 新数据
	data := map[string]interface{}{
		"state": 2,
		"update_time": updateTime,
	}

	res = Kit.DB.Table("gl_user").Not(NotMap).Where(WhereMap).Updates(data).RowsAffected

	return
}

// 彻底删除用户,按条件删除
type ClearUserKeys struct {}
func (model *ClearUserKeys)ClearUser(userId int64,) (res int64, err error) {

	// 多查询条件,仅限"="查询
	WhereMap := map[string]interface{}{}
	//WhereMap["state"] = 1
	WhereMap["user_id"] = userId

	// 新数据
	data := ClearUserKeys{}

	res = Kit.DB.Table("gl_user").Where(WhereMap).Delete(data).RowsAffected

	return
}

-

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是gorm示例: 首先,我们需要定义一个结构体来映射我们的数据表: ```go type User struct { ID uint `gorm:"primary_key"` Name string `gorm:"type:varchar(20);not null"` Age uint8 `gorm:"not null"` Email string `gorm:"type:varchar(100);unique_index"` Password string `gorm:"type:varchar(255);not null"` } ``` 接下来,我们需要创建一个数据库连接并进行初始化: ```go import ( "gorm.io/driver/mysql" "gorm.io/gorm" ) dsn := "user:password@tcp(127.0.0.1:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic(err) } // 自动迁移数据表,如果数据表不存在则会自动创建 err = db.AutoMigrate(&User{}) if err != nil { panic(err) } ``` 创建成功后,我们可以进行查操作了: 1. 新数据 ```go user := &User{ Name: "Tom", Age: 18, Email: "tom@example.com", Password: "123456", } // 创建记录 result := db.Create(user) if result.Error != nil { panic(result.Error) } ``` 2. 查询数据 ```go var users []User // 查找所有记录 result := db.Find(&users) if result.Error != nil { panic(result.Error) } // 根据条件查找记录 result = db.Where("age > ?", 18).Find(&users) if result.Error != nil { panic(result.Error) } ``` 3. 更新数据 ```go // 根据主键更新记录 result := db.Model(&User{}).Where("id = ?", 1).Update("age", 20) if result.Error != nil { panic(result.Error) } ``` 4. 除数据 ```go // 根据主键除记录 result := db.Delete(&User{}, 1) if result.Error != nil { panic(result.Error) } ``` 以上就是gorm示例,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值