1.查询

在这里插入图片描述

    1).简单查询
在这里插入图片描述
    2).尝试从数据库读取,不存在的话就创建一个

func selectSql () {
	o := orm.NewOrm()
	o.Using("default")
	user := models.User{Username: "新建用户"}
	// 三个返回参数依次为:是否新创建的,对象 Id 值,错误
	if created, _, err := o.ReadOrCreate(&user, "Username"); err == nil {
		if created {
			fmt.Println("新建user:%+v",user)
		} else {
			fmt.Println("查询user:%+v",user)
		}
	}

}

在这里插入图片描述

2.新增

    1).单个新增

func insertSql () {
	o := orm.NewOrm()
	o.Using("default")
	user := models.User{Username: "新增用户",Password:"4455556"}
	id, err := o.Insert(&user)
	if err == nil {
		fmt.Println(id)
		fmt.Println("新建user:%+v",user)
	}
}

在这里插入图片描述
    2).批量新增

func insertSql () {
	o := orm.NewOrm()
	o.Using("default")
	user := []models.User{
		{Username: "批量新增用户1",Password:"4455556"},
		{Username: "批量新增用户2",Password:"4455556"},
	}
	//第一个参数 为并列插入的数量,第二个为对象的slice
	id, err := o.InsertMulti(2,&user)
	if err == nil {
		fmt.Println(id)
		fmt.Println("新建user:%+v",user)
	}
}

在这里插入图片描述

3.修改

func updateSql () {
	o := orm.NewOrm()
	o.Using("default")
	user := models.User{Id:16}
	user.Password="12345"
	// 只更新这些字段
	// o.Update(&user, "Field1", "Field2", ...)
	if num, err := o.Update(&user); err == nil {
		fmt.Println(num)
	}
}

在这里插入图片描述

4.删除

func deleteSql () {
	o := orm.NewOrm()
	o.Using("default")
	user := models.User{Id:16}
	if num, err := o.Delete(&user); err == nil {
		fmt.Println(num)
	}
}

在这里插入图片描述

5.高级操作(以 QuerySeter 来操作数据库)

    1).部分示例

o := orm.NewOrm()
	//default可以省略
	o.Using("default")
	// 可以直接使用对象作为表名
    qs := o.QueryTable(new(models.User)) // 返回 QuerySeter
    //或者利用表查询t_user是表名
    //  qs :=o.QueryTable("t_user")
	//expr
	qs.Filter("id", 1) // WHERE id = 1
	qs.Filter("id_lt", 12)       // WHERE id <12
	qs.Filter("id_gte", 12)       // WHERE id >=12
	qs.Filter("id_in", 12,14)    // WHERE id in (12,14)

	//iexact
	qs.Filter("username__iexact", "大旺") // WHERE username LIKE '大旺'

	//contains 大小写敏感
	qs.Filter("username__contains", "大旺") // WHERE username LIKE BINARY  '%大旺%'
	//icontains 大小写不敏感
	qs.Filter("username__icontains", "大旺") // WHERE username LIKE '%大旺%'

	// isnull
	qs.Filter("username__isnull", true) // WHERE username is NUll

	//limit 10
	qs.Limit(10)
	//no limit
	qs.Limit(-1)
	// LIMIT 10 OFFSET 20 注意跟 SQL 反过来的
	qs.Limit(10, 20)
	//group by usernmae,age
	qs.GroupBy("username", "age")
	//order by id asc age desc
	qs.OrderBy("id", "-age")

    2).按条件查询批量更新

func selectSql() {
	o := orm.NewOrm()
	//default可以省略
	o.Using("default")
	num, err := o.QueryTable(new(models.User)).Filter("username", "大旺").Update(orm.Params{
		"username": "大兴",
	})
	fmt.Printf("Affected Num: %s, %s", num, err)
}

在这里插入图片描述
    3).用于一次 prepare 多次 insert 插入,以提高批量插入的速度

func insertSql() {
	o := orm.NewOrm()
	//default可以省略
	o.Using("default")
	insert, _ := o.QueryTable(new(models.User)).PrepareInsert()

	users := []models.User{
		{Username: "test1", Password: "123456"},
		{Username: "test2", Password: "123456"},
	}

	for _, user := range users {
		_, err := insert.Insert(&user)
		if err != nil {
			println(err)
		}
	}
	//关闭 statement
	insert.Close()
}

在这里插入图片描述
    4).根据条件查询所有和单个

o := orm.NewOrm()
	//default可以省略
	o.Using("default")

	//查询所有
	users := []models.User{}
	num, err := o.QueryTable(new(models.User)).Filter("username", "大兴").All(&users)
	fmt.Printf("Num err: %s, %s \n", num, err)
	fmt.Printf("user %+v \n", users)

	//查询单个
	user := models.User{}
	o.QueryTable(new(models.User)).Filter("username", "大兴").One(&user)
	fmt.Printf("user %+v \n", user)

在这里插入图片描述

6.原生sql查询

	o := orm.NewOrm()
	//default可以省略
	o.Using("default")

    user:=new(models.User)
	err := o.Raw("SELECT * FROM t_user WHERE username = ?", "大兴").QueryRow(&user)
	if err == nil {
		fmt.Printf("user:%+v \n",user)
	}

在这里插入图片描述

o := orm.NewOrm()
	//default可以省略
	o.Using("default")

    users:=new([]models.User)
	_,err := o.Raw("SELECT * FROM t_user WHERE username = ?", "大兴").QueryRows(users)
	if err == nil {
		fmt.Printf("user:%+v \n",users)
	}

在这里插入图片描述