xorm解决翻页问题

package main

import (
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"time"
	"xorm.io/xorm"
)

func main()  {
	var (
		userName string = "root"
		password string = "root"
		ipAddress string = "127.0.0.1"
		port int = 3306
		dbName string = "go_test"
		charset string = "utf8mb4"
	)
	dataSourceName := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s",userName,password,ipAddress,port,dbName,charset)

	//engine xorm核心引擎 连接数据库
	engine, err := xorm.NewEngine("mysql", dataSourceName)
	if err != nil{
		fmt.Println("数据库连接失败!",err)
	}

	//建立结构体 把结构同步到数据库里面
	type User struct {
		Id int64
		Name string
		Age int
		Passwd string `xorm:"varchar(200)"`
		Created time.Time `xorm:"created"`	//创建的时候自动同步创建
		Updated time.Time `xorm:"updated"`  //更新的时候自动同步更新
	}

	//engine.Sync
	err = engine.Sync(new(User))
	if err != nil {
		fmt.Println("表结构同步失败!")
	}

//	Query查询 会返回结果集
	//返回值是byte
	results,err := engine.Query("select * from user")
	fmt.Println(results)
	//返回值是string
	results2,err := engine.QueryString("select * from user")
	fmt.Println(results2)
	//返回值是interface
	results3,err := engine.QueryInterface("select * from user")
	fmt.Println(results3)

	//Get 获取某一条数据 数据直接保存到user的结构体中
	user := User{}
	engine.Get(&user)
	fmt.Println(user)

	//指定条件来查询用户 Name: "lf" 是约束条件
	user1 :=  User{Name: "lf"}
	engine.Where("passwd=?",1234).Desc("id").Get(&user1)
	fmt.Println(user1)

	//获取指定字段值 此时只打印name = 3
	var name string
	engine.Table(&user).Where("id = ?", 4).Cols("name").Get(&name)
	fmt.Println(name)

	var users []User
	//limit start 可以设置分页 查询多个使用find
	engine.Where("passwd=1234").And("age=22").Limit(10,0).Find(&users)
	fmt.Println(users)

	//Count 获取记录条数
	user = User{Passwd: "1234"}
	count,err := engine.Count(&user)
	fmt.Println(count)

	//Iterate 和 Rows 根据条件遍历数据
	engine.Iterate(&User{Passwd: "1234"}, func(idx int, bean interface{}) error {
		users := bean.(*User)
		fmt.Println(users)
		return nil
	})

	fmt.Println("==================")

	rows,err := engine.Rows(&User{Passwd: "1234"})
	defer rows.Close()
	userBean := new(User) //scan需要一个指针 通过new一个结构体来实现
	for rows.Next(){ //bool类型
		rows.Scan(userBean) //保存到user里面
		fmt.Println(userBean)
	}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值