go分页及多条件查询

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"net/http"
	"time"
)

// UserInfo -->和数据表关联
type UserInfo struct {
	ID       uint      `json:"id" form:"id"`
	Name     string    `json:"name" form:"name"`
	Sex      string    `json:"sex" form:"sex"`
	Hobby    string    `json:"hobby" form:"hobby"`
	Birthday time.Time `json:"birthday" form:"birthday"`
}

type UserInfoDto struct {
	ID       uint      `json:"id" form:"id"`
	Name     string    `json:"name" form:"name"`
	Sex      string    `json:"sex" form:"sex"`
	Hobby    string    `json:"hobby" form:"hobby"`
	Birthday time.Time `json:"birthday" form:"birthday"`
	PageNum  int       `json:"pageNum"`
	PageSize int       `json:"pageSize"`
}

var (
	db *gorm.DB
)

func InitMySQL() (err error) {
	dsn := "root:root@tcp(127.0.0.1:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local"
	db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
		//查看日志sql
		Logger: logger.Default.LogMode(logger.Info),
	})
	if err != nil {
		return err
	}
	return
}

func getUsers(c *gin.Context) {
	var users []UserInfo
	//users := make([]UserInfo, 0)
	var userDto UserInfoDto
	Db := db

	c.ShouldBindJSON(&userDto)

	pageNum := userDto.PageNum
	pageSize := userDto.PageSize

	Db=Db.Model(&UserInfo )

	if id := userDto.ID; id > 0 {
		Db = Db.Debug().Where("id = ?", id)
	}

	if len(userDto.Name) > 0 {
		Db = Db.Debug().Where("name = ?", userDto.Name)
	}

	if pageNum > 0 && pageSize > 0 {
		Db = Db.Debug().Limit(pageSize).Offset((pageNum - 1) * pageSize)
	}

	if err := Db.Debug().Find(&users).Error; err != nil {
		fmt.Println(err.Error())
	}

	c.JSON(http.StatusOK, gin.H{
		"data": users,
	})

}

func main() {
	err := InitMySQL()
	if err != nil {
		panic(err)
	}
	//创建表 自动迁移 把结构体和数据表进行对应
	db.AutoMigrate(&UserInfo{})
	ginServer := gin.Default()
	ginServer.POST("/page", getUsers)
	ginServer.Run(":8088")

	//var us []UserInfo

	//-----------------------------start------------------------------------------
	//创建表 及创建一条数据

	//var LOC, _ = time.LoadLocation("Asia/Shanghai") //要指定时区 否则会加8小时
	//var timeLayoutStr = "2006-01-02 15:04:05"
	//parse, err := time.ParseInLocation(timeLayoutStr, time.Now().Format(timeLayoutStr), LOC)
	//
	//fmt.Printf("shiji", parse)
	//userInfo := UserInfo{Name: "123", Sex: "男", Hobby: "跑步222", Birthday: parse}
	//log.Printf("12dddd", parse)
	//
	通过数据的指针来创建
	//result := db.Create(&userInfo)
	//
	//id := userInfo.ID // 返回插入数据的主键
	//fmt.Printf("id为:%v", id)
	//err = result.Error
	//row := result.RowsAffected // 返回插入记录的条数
	//fmt.Printf("插入的条数为:%v", row)

	//-----------------------------end------------------------------------------

	//------------------------------start-----------------------------------------

	//var u UserInfo
	//var us []UserInfo

	// IN     SELECT * FROM users WHERE name in ('陈江河','陈江河1');
	//db.Where("name IN (?)", []string{"陈江河", "陈江河1"}).Find(&us)
	//fmt.Printf("us:%v\n", us)
	//
	主键     SELECT * FROM users WHERE id IN (1,2,3);
	//var id1 = 1
	//var id2 = 2
	//db.Find(&us, []int{id1, id2, 3})
	//fmt.Printf("us:%v\n", us)

	 LIKE   SELECT * FROM users WHERE name LIKE '%jin%';
	//db.Where("name LIKE ?", "%陈%").Find(&us)
	//fmt.Printf("us:%v\n", us)
	//
	//var name = "一"
	//db.Where("name like ?", "%"+name+"%").Find(&us)
	//fmt.Printf("us:%v\n", us)

	// Time
	//startTime := "2023-03-06"
	//endTime := time.Now().Format("2006-01-02 15:04:05")
	//
	//db.Where("birthday > ?", startTime).Find(&us)
	//fmt.Printf("us----------:%v\n", us)
	 SELECT * FROM users WHERE updated_at > '2000-01-01 00:00:00';
	//
	 BETWEEN
	//db.Where("birthday BETWEEN ? AND ?", startTime, endTime).Find(&us)
	//fmt.Printf("us111111111:%v\n", us)
	// SELECT * FROM users WHERE created_at BETWEEN '2000-01-01 00:00:00' AND '2000-01-08 00:00:00';

	//-----------------------------end------------------------------------------

	//更新  将UserInfo中的hobby改为123
	//db.Model(&u).Update("Hobby", "123")
	//更新 多个字段
	//db.Model(&u).Updates(UserInfo{Name: "chenyiyi", Sex: "123"})
	//db.Model(&u).Updates(map[string]interface{}{"ID": 2, "Sex": "566"})

	//删除
	//db.Delete(&u)

	//time转string
	//var timeLayoutStr = "2006-01-02 15:04:05"
	//stringTime := time.Now().Format(timeLayoutStr)
	//fmt.Printf("时间为:%v,类型为:%t", stringTime, stringTime)
	//
	string类型时间转time
	//stringToTime, err := time.Parse(timeLayoutStr, "2023-03-08 14:03:02")
	//fmt.Printf("时间为:%v,类型为:%t", stringToTime, stringToTime)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用MyBatis提供的分页插件PageHelper进行分页查询,同时可以在Mapper.xml文件中使用动态SQL进行多条件查询和in查询。以下是一个例子: ``` <!-- Mapper.xml文件中的查询语句 --> <select id="findUsers" resultMap="userResultMap"> SELECT * FROM users <where> <if test="name != null and name != ''"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> <if test="ids != null and ids.size() > 0"> AND id IN <foreach collection="ids" item="id" open="(" separator="," close=")"> #{id} </foreach> </if> </where> </select> ``` 在Java代码中,使用PageHelper.startPage方法设置分页参数,并调用Mapper中的findUsers方法进行查询: ``` // 设置分页参数,第一页,每页2条数据 PageHelper.startPage(1, 2); // 构造查询条件 Map<String, Object> params = new HashMap<>(); params.put("name", "张三"); params.put("age", 20); List<Integer> ids = new ArrayList<>(); ids.add(1); ids.add(2); params.put("ids", ids); // 调用Mapper中的findUsers方法进行查询 List<User> users = userMapper.findUsers(params); // 获取分页信息 PageInfo<User> pageInfo = new PageInfo<>(users); System.out.println("总记录数:" + pageInfo.getTotal()); System.out.println("总页数:" + pageInfo.getPages()); System.out.println("当前页码:" + pageInfo.getPageNum()); System.out.println("每页记录数:" + pageInfo.getPageSize()); System.out.println("当前页的记录数:" + pageInfo.getSize()); System.out.println("当前页的第一条记录:" + pageInfo.getStartRow()); System.out.println("当前页的最后一条记录:" + pageInfo.getEndRow()); ``` 注意:在使用PageHelper进行分页查询时,需要在MyBatis的配置文件中配置分页插件: ``` <!-- MyBatis配置文件 --> <configuration> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"/> </plugins> </configuration> ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值