xorm -Alias,Asc,Desc方法实例

  • Alias(string)给Table设定一个别名

    package main
    
    import (
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/go-xorm/xorm"
    	"log"
    	"time"
    )
    
    var engine *xorm.Engine
    
    type User struct {
    	Name string `xorm:"varchar(25) 'name'"`
    	Id   int    `xorm:"pk 'id' autoincr"`
    	CreatedAt time.Time `xorm:"created"`
    }
    
    
    func main() {
    	var err error
    	engine, err = xorm.NewEngine("mysql", "root:123456@/test")
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	err = engine.CreateTables(User{})
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    //插入数据部分
    	u := make([]User,3)
    	u[0].Name="u0"
    	u[1].Name="u1"
    
    	_, err = engine.Insert(u)
    	if err!=nil {
    		log.Fatal(err)
    		return
    	}
    
    	uu :=new(User)
    
    	//查询结果为空
    	has,err := engine.Alias("alias") .Where("alias.name = ?","u").Get(uu)
    	if err!=nil{
    		log.Fatal(err)
    		return
    	}
    	fmt.Println("要查询的name是u的数据是否在数据库里:",has)
    	if has {
    		fmt.Println("uid:",uu.Id," uname:" ,uu.Name," utime:",uu.CreatedAt)
    	}
    
    	// 一个查询条件
    	has,err = engine.Alias("alias") .Where("alias.name = ?","u0").Get(uu)
    	if err!=nil{
    		log.Fatal(err)
    		return
    	}
    	fmt.Println("name是u0的数据是否在数据库里",has)
    	if has {
    		fmt.Println("    name是u0的数据在数据库里,而且他的uid:",uu.Id," uname:" ,uu.Name," utime:",uu.CreatedAt)
    	}
    
    	//and条件查询
    	has,err = engine.Alias("alias") .Where("alias.name = ?","u0").And("alias.id =?","1").Get(uu)
    	if err!=nil{
    		log.Fatal(err)
    		return
    	}
    	fmt.Println("name为u0,id为1的数据是否在数据库里",has)
    	if has {
    		fmt.Println("     name为u0,id为1的数据在数据库里,而且他的uid:",uu.Id," uname:" ,uu.Name," utime:",uu.CreatedAt)
    	}
    
    
    	//or条件查询
    	has,err = engine.Alias("alias") .Where("alias.name = ?","u0").Or("alias.name =?","u").Get(uu)
    	if err!=nil{
    		log.Fatal(err)
    		return
    	}
    	fmt.Println("name为u0或者为u的数据在数据库里",has)
    	if has {
    		fmt.Println("     name为u0或者为u的数据在数据库里,而且他的uid:",uu.Id," uname:" ,uu.Name," utime:",uu.CreatedAt)
    	}
    	/*
    	    输出:
    			要查询的name是u的数据是否在数据库里: false
    			name是u0的数据是否在数据库里 true
    				name是u0的数据在数据库里,而且他的uid: 6  uname: u0  utime: 2019-05-26 14:17:51 +0800 CST
    			name为u0,id为1的数据是否在数据库里 false
    			name为u0或者为u的数据在数据库里 true
    				 name为u0或者为u的数据在数据库里,而且他的uid: 6  uname: u0  utime: 2019-05-26 14:17:51 +0800 CST
    
    	*/
    
    }
    
  • Asc(…string)指定字段名正序排序/Desc(…string)指定字段名逆序排序

    package main
    
    import (
    	"fmt"
    	_ "github.com/go-sql-driver/mysql"
    	"github.com/go-xorm/xorm"
    	"log"
    	"time"
    )
    
    var engine *xorm.Engine
    
    type User struct {
    	Name      string    `xorm:"varchar(25) 'name'"`
    	Id        int       `xorm:"pk 'id' autoincr"`
    	CreatedAt time.Time `xorm:"created"`
    }
    
    func main() {
    	var err error
    	engine, err = xorm.NewEngine("mysql", "root:123456@/test")
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	err = engine.CreateTables(User{})
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    /*	u := make([]User, 5)
    	u[0].Name = "abcd"
    	u[1].Name = "acbd"
    	u[2].Name = "dbac"
    	u[3].Name = "cbda"
    	u[4].Name = "bdca"
    
    	_, err = engine.Insert(u)
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    */
    	re := make([]User, 0)
    
    	fmt.Println("升序之前:")
    	err = engine.Find(&re)
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    	for i, r := range re {
    		fmt.Println("    index:", i, " rName:", r.Name)
    	}
    
    
    	re1 := make([]User, 0)
    	fmt.Println("====================升序之后:")
    	err = engine.Asc("name").Find(&re1)
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	for i, r := range re1 {
    		fmt.Println("    index:", i, " rName:", r.Name)
    	}
    
    	fmt.Println("======================降序之后:")
    	re2 := make([]User, 0)
    	err = engine.Desc("name").Find(&re2)
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	for i, r := range re2 {
    		fmt.Println("    index:", i, " rName:", r.Name)
    	}
    
    
    
    	fmt.Println("======================ORDERBY:")
    	re3 := make([]User, 0)
    	err = engine.OrderBy("name").Find(&re3)
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	for i, r := range re3 {
    		fmt.Println("    index:", i, " rName:", r.Name)
    	}
    
    
    
    	fmt.Println("======================DESC:")
    	re4 := make([]User, 0)
    	err = engine.Desc("name").Find(&re4)
    	if err != nil {
    		log.Fatal(err)
    		return
    	}
    
    	for i, r := range re4 {
    		fmt.Println("    index:", i, " rName:", r.Name)
    	}
    }
    
    /*
    输出:
    升序之前:
    index: 0  rName: abcd
    index: 1  rName: acbd
    index: 2  rName: dbac
    index: 3  rName: cbda
    index: 4  rName: bdca
    ====================升序之后:
    index: 0  rName: abcd
    index: 1  rName: acbd
    index: 2  rName: bdca
    index: 3  rName: cbda
    index: 4  rName: dbac
    ======================降序之后:
    index: 0  rName: dbac
    index: 1  rName: cbda
    index: 2  rName: bdca
    index: 3  rName: acbd
    index: 4  rName: abcd
    ======================ORDERBY:
    index: 0  rName: abcd
    index: 1  rName: acbd
    index: 2  rName: bdca
    index: 3  rName: cbda
    index: 4  rName: dbac
    ======================DESC:
    index: 0  rName: dbac
    index: 1  rName: cbda
    index: 2  rName: bdca
    index: 3  rName: acbd
    index: 4  rName: abcd
    */
    
原文地址:https://www.cnblogs.com/jiangxiangxiang/p/10932692.html