xorm代码
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/go-xorm/core""github.com/go-xorm/xorm""time"
)//xorm基本操作和高級操作
func main() {//1. 創建數據庫引擎對象//engine,err := xorm.NewEngine("mysql","%s:%s@(%s:%s)/%s?charset=utf8", username, password, host, port, database)//engine,err := xorm.NewEngine("mysql","root:1234@(localhost:3306)/test?charset=utf8")engine, err := xorm.NewEngine("mysql", "root:6746@/test?charset=utf8")if err != nil {panic(err.Error())}//2.設置映射規則engine.SetMapper(core.SnakeMapper{})//3、同步數據庫表格(建表)err = engine.Sync2(new(PersonTable))if err != nil {fmt.Println("error in create table person_table",err)}//4.判斷person表格是否存在personExist, err := engine.IsTableExist(new(PersonTable))if err != nil {panic(err.Error())}if personExist {fmt.Println("人員表存在")} else {fmt.Println("人員表不存在")}//5.判斷person表格是否為空personEmpty, err := engine.IsTableEmpty(new(PersonTable))if err != nil {panic(err.Error())}if personEmpty {fmt.Println(" 人員表是空的,無數據 ")} else {fmt.Println(" 人員表不為空,有數據 ")}//二、條件查詢//1.ID查詢var person PersonTable// select * from person_table where id = 1engine.Id(1).Get(&person) //返回兩個值,布爾類型的結果和err(沒有錯誤是nil)fmt.Println("person.PersonName: ", person.PersonName)//2.where多條件查詢var person1 PersonTable// select * from person_table where person_age = 26 and person_sex = 2//Get只會返回一條數據,如下,查詢到age為26的就不查了engine.Where(" person_age = ? and person_sex = ?", 26, 2).Get(&person1) //?占位//Find返回所有符合條件的結果var person2 []PersonTable//可以使用And拆開寫26和2,看下面engine.Where(" person_age = ? and person_sex = ?", 26, 2).Find(&person2) //?占位fmt.Println("person1.PersonName: ",person1.PersonName)//3.And條件查詢var persons []PersonTable//select * from person_table where person_age = 26 and person_sex = 2err = engine.Where(" person_age = ? ", 26).And("person_sex = ? ", 2).Find(&persons)if err != nil {panic(err.Error())}fmt.Println("persons: ",persons)var persontest []PersonTable//select * from person_table where person_name = "yang" and person_age > 10err = engine.Table("person_table").Where("person_name = ?","yang").And("person_age > 10").Find(&persontest)fmt.Println("persontest: ",persontest)//4、Or條件查詢var personArr []PersonTable//select * from person_table where person_age = 26 or person_sex = 1err = engine.Where(" person_age = ? ", 26).Or("person_sex = ? ", 1).Find(&personArr)if err != nil {panic(err.Error())}fmt.Println("personArr: ",personArr)fmt.Println("----------------------------------------")//5、原生SQL語句查詢支持 like語法var personsNative []PersonTableerr = engine.SQL(" select * from person_table where person_name like 't%' ").Find(&personsNative)if err != nil {panic(err.Error())}fmt.Println("personNative: ",personsNative)fmt.Println()//6、排序條件查詢var personsOrderBy []PersonTable//select * from person_table orderby person_age 升序排列//engine.OrderBy(" person_age ").Find(&personsOrderBy)engine.OrderBy(" person_age desc ").Find(&personsOrderBy)fmt.Println("personOrderBy: ",personsOrderBy)fmt.Println("------------------------------------------")//7、查詢特定字段var personsCols []PersonTableengine.Cols("person_name", "person_age").Find(&personsCols)for i, col := range personsCols {fmt.Printf("%d ---> %v \n",i,col)}fmt.Println("=========================================")//8、查詢多行結果,并遍歷輸出//Query(返回數據類型為[]map[string][]byte)、//QueryString(返回數據類型為[]map[string]string)、//QueryInterface(返回數據類型為[]map[string]interface{})results,err := engine.QueryString("select * from person_table")for k,v := range results {fmt.Println(k)for m,n := range v {fmt.Println(m,"-->",n)}fmt.Println("----------------")}//三、增加記錄操作personInsert := PersonTable{//字段 //值PersonName: "Hello",PersonAge: 18,PersonSex: 1,}rowNum, err := engine.Insert(&personInsert)fmt.Println("rowNum: ",rowNum) //rowNum:受影響的記錄條數,插入了幾條數據,就返回幾//四、刪除操作var person4 PersonTablerowNum2, err := engine.Delete(&personInsert)fmt.Println("rowNum2: ",rowNum2) //rowNum2:受影響的記錄條數affected, err := engine.ID(2).Delete(&person4) // 刪除id為2的一行fmt.Println(affected)//五、更新操作rowNum3, err := engine.Id(7).Update(&personInsert) //修改成personInsert對象對應的數據fmt.Println("rowNum3: ",rowNum3) //rowNum3:受影響的記錄條數mm,err := engine.Exec("update person4 set name = ? where id = ?","yang",2) //執行更新sql語句fmt.Println(mm)//六、統計功能countcount, err := engine.Count(new(PersonTable)) //一個表中有多少條數據,分頁中使用fmt.Println("PersonTable表總記錄條數:", count)//七、事務操作(用于批量執行,不能只執行了一部分,而一部分沒有被執行,這種情況使用回滾)// mysql 中,數據引擎為innodb 事務才有效,myisam引擎是不支持事務的personsArray := []PersonTable{ //初始化結構體切片PersonTable{PersonName: "Jack",PersonAge: 28,PersonSex: 1,},PersonTable{PersonName: "Mali",PersonAge: 28,PersonSex: 1,},PersonTable{PersonName: "Ruby",PersonAge: 28,PersonSex: 1,},}//創建事務session := engine.NewSession()//defer session.Close() // 寫成這樣更合適//事務開始: add Begin() before any actionsession.Begin()//for循環插入數據for i := 0; i < len(personsArray); i++ {_, err = session.Insert(personsArray[i])if err != nil { //處理錯誤//事務回滾session.Rollback()session.Close()}}// 更新數據person3 := PersonTable{PersonName:"yang"}_,err = session.Where("id = ?",2).Update(&person3)if err != nil {session.Rollback()session.Close()}//執行sql語句的刪除操作_,err = session.Exec("delete form test where name = ?",person3.PersonName)if err != nil {session.Rollback()session.Close()}//事務提交err = session.Commit()session.Close()if err != nil {panic(err.Error())}
}//人員結構表
type PersonTable struct {Id int64 `xorm:"pk autoincr"` //主鍵自增PersonName string `xorm:"varchar(24)"` //可變字符PersonAge int `xorm:"int default 0"` //默認值PersonSex int `xorm:"notnull"` //不能為空City CityTable `xorm:"-"` //不映射該字段
}type CityTable struct {CityName stringCityLongitude float32CityLatitude float32
}
//創建事務的2 種方法
//--------------------------------------------------------------- type User struct {Id int64Name stringAge intSalt stringPasswd string `xorm:"varchar(200)"`Created time.Time `xorm:"created"`Updated time.Time `xorm:"updated"` } //創建事務的2 種方法 //一種,新建session,并使用session方法實現,在main函數中調用如下方法: func myTransaction(engine *xorm.Engine) error{session := engine.NewSession()defer session.Close()if err := session.Begin(); err != nil {// if returned then will rollback automaticallyreturn err}user := User{Name: "xiaoxiao", Salt: "dev", Age: 18, Passwd: "111"}if _, err := session.Insert(&user); err != nil {return err}if _, err := session.Exec("update user set name = ? where id = ?", 70, "8"); err != nil {return err}return session.Commit() }//第二種,重寫Transaction方法,在main函數中添加如下代碼 func main2() {engine, err := xorm.NewEngine("mysql", "%s:%s@(%s:%s)/%s?charset=utf8")res, err := engine.Transaction(func(session *xorm.Session) (interface{}, error) {user := User{Name: "xiaoxiao", Salt: "dev", Age: 18, Passwd: "111"}if _, err := session.Insert(&user); err != nil {return nil, err}if _, err := session.Exec("update user set name = ? where id = ?", 70, "id"); err != nil {return nil, err}return nil, nil})if err != nil{fmt.Println(err)}fmt.Println(res) }結果:
人員表存在人員表不為空,有數據 person.PersonName: person1.PersonName: persons: [] persontest: [] personArr: [{3 Mali 28 1 { 0 0}} {4 Ruby 28 1 { 0 0}} {6 Jack 28 1 { 0 0}} {7 Hello 18 1 { 0 0}} {8 Ruby 28 1 { 0 0}} {10 Jack 28 1 { 0 0}} {11 Mali 28 1 { 0 0}} {12 Ruby 28 1 { 0 0}} {14 Jack 28 1 { 0 0}} {15 Mali 28 1 { 0 0}} {16 Ruby 28 1 { 0 0}} {18 Jack 28 1 { 0 0}} {19 Mali 28 1 { 0 0}} {20 Ruby 28 1 { 0 0}} {22 Jack 28 1 { 0 0}} {23 Mali 28 1 { 0 0}} {24 Ruby 28 1 { 0 0}} {26 Jack 28 1 { 0 0}} {27 Mali 28 1 { 0 0}} {28 Ruby 28 1 { 0 0}} {30 Jack 28 1 { 0 0}} {31 Mali 28 1 { 0 0}} {32 Ruby 28 1 { 0 0}} {34 Jack 28 1 { 0 0}} {35 Mali 28 1 { 0 0}} {36 Ruby 28 1 { 0 0}} {38 Jack 28 1 { 0 0}} {39 Mali 28 1 { 0 0}} {40 Ruby 28 1 { 0 0}} {42 Jack 28 1 { 0 0}} {43 Mali 28 1 { 0 0}} {44 Ruby 28 1 { 0 0}} {46 Jack 28 1 { 0 0}} {47 Mali 28 1 { 0 0}} {48 Ruby 28 1 { 0 0}} {50 Jack 28 1 { 0 0}} {51 Mali 28 1 { 0 0}} {52 Ruby 28 1 { 0 0}} {54 Jack 28 1 { 0 0}} {55 Mali 28 1 { 0 0}} {56 Ruby 28 1 { 0 0}} {58 Jack 28 1 { 0 0}} {59 Mali 28 1 { 0 0}} {60 Ruby 28 1 { 0 0}} {62 Jack 28 1 { 0 0}} {63 Mali 28 1 { 0 0}} {64 Ruby 28 1 { 0 0}} {66 Jack 28 1 { 0 0}} {67 Mali 28 1 { 0 0}} {68 Ruby 28 1 { 0 0}} {70 Jack 28 1 { 0 0}} {71 Mali 28 1 { 0 0}} {72 Ruby 28 1 { 0 0}} {74 Jack 28 1 { 0 0}} {75 Mali 28 1 { 0 0}} {76 Ruby 28 1 { 0 0}} {78 Jack 28 1 { 0 0}} {79 Mali 28 1 { 0 0}} {80 Ruby 28 1 { 0 0}} {82 Jack 28 1 { 0 0}} {83 Mali 28 1 { 0 0}} {84 Ruby 28 1 { 0 0}}] ---------------------------------------- personNative: []personOrderBy: [{3 Mali 28 1 { 0 0}} {4 Ruby 28 1 { 0 0}} {6 Jack 28 1 { 0 0}} {84 Ruby 28 1 { 0 0}} {8 Ruby 28 1 { 0 0}} {10 Jack 28 1 { 0 0}} {11 Mali 28 1 { 0 0}} {12 Ruby 28 1 { 0 0}} {14 Jack 28 1 { 0 0}} {15 Mali 28 1 { 0 0}} {16 Ruby 28 1 { 0 0}} {18 Jack 28 1 { 0 0}} {19 Mali 28 1 { 0 0}} {20 Ruby 28 1 { 0 0}} {22 Jack 28 1 { 0 0}} {23 Mali 28 1 { 0 0}} {24 Ruby 28 1 { 0 0}} {26 Jack 28 1 { 0 0}} {27 Mali 28 1 { 0 0}} {28 Ruby 28 1 { 0 0}} {30 Jack 28 1 { 0 0}} {31 Mali 28 1 { 0 0}} {32 Ruby 28 1 { 0 0}} {34 Jack 28 1 { 0 0}} {35 Mali 28 1 { 0 0}} {36 Ruby 28 1 { 0 0}} {38 Jack 28 1 { 0 0}} {39 Mali 28 1 { 0 0}} {40 Ruby 28 1 { 0 0}} {42 Jack 28 1 { 0 0}} {43 Mali 28 1 { 0 0}} {44 Ruby 28 1 { 0 0}} {46 Jack 28 1 { 0 0}} {47 Mali 28 1 { 0 0}} {48 Ruby 28 1 { 0 0}} {50 Jack 28 1 { 0 0}} {51 Mali 28 1 { 0 0}} {52 Ruby 28 1 { 0 0}} {54 Jack 28 1 { 0 0}} {55 Mali 28 1 { 0 0}} {56 Ruby 28 1 { 0 0}} {58 Jack 28 1 { 0 0}} {59 Mali 28 1 { 0 0}} {60 Ruby 28 1 { 0 0}} {62 Jack 28 1 { 0 0}} {63 Mali 28 1 { 0 0}} {64 Ruby 28 1 { 0 0}} {66 Jack 28 1 { 0 0}} {67 Mali 28 1 { 0 0}} {68 Ruby 28 1 { 0 0}} {70 Jack 28 1 { 0 0}} {71 Mali 28 1 { 0 0}} {72 Ruby 28 1 { 0 0}} {74 Jack 28 1 { 0 0}} {75 Mali 28 1 { 0 0}} {76 Ruby 28 1 { 0 0}} {78 Jack 28 1 { 0 0}} {79 Mali 28 1 { 0 0}} {80 Ruby 28 1 { 0 0}} {82 Jack 28 1 { 0 0}} {83 Mali 28 1 { 0 0}} {7 Hello 18 1 { 0 0}}] ------------------------------------------ 0 ---> {0 Mali 28 0 { 0 0}} 1 ---> {0 Ruby 28 0 { 0 0}} 2 ---> {0 Jack 28 0 { 0 0}} 3 ---> {0 Hello 18 0 { 0 0}} 4 ---> {0 Ruby 28 0 { 0 0}} 5 ---> {0 Jack 28 0 { 0 0}} 6 ---> {0 Mali 28 0 { 0 0}} 7 ---> {0 Ruby 28 0 { 0 0}} 8 ---> {0 Jack 28 0 { 0 0}} 9 ---> {0 Mali 28 0 { 0 0}} 10 ---> {0 Ruby 28 0 { 0 0}} 11 ---> {0 Jack 28 0 { 0 0}} 12 ---> {0 Mali 28 0 { 0 0}} 13 ---> {0 Ruby 28 0 { 0 0}} 14 ---> {0 Jack 28 0 { 0 0}} 15 ---> {0 Mali 28 0 { 0 0}} 16 ---> {0 Ruby 28 0 { 0 0}} 17 ---> {0 Jack 28 0 { 0 0}} 18 ---> {0 Mali 28 0 { 0 0}} 19 ---> {0 Ruby 28 0 { 0 0}} 20 ---> {0 Jack 28 0 { 0 0}} 21 ---> {0 Mali 28 0 { 0 0}} 22 ---> {0 Ruby 28 0 { 0 0}} 23 ---> {0 Jack 28 0 { 0 0}} 24 ---> {0 Mali 28 0 { 0 0}} 25 ---> {0 Ruby 28 0 { 0 0}} 26 ---> {0 Jack 28 0 { 0 0}} 27 ---> {0 Mali 28 0 { 0 0}} 28 ---> {0 Ruby 28 0 { 0 0}} 29 ---> {0 Jack 28 0 { 0 0}} 30 ---> {0 Mali 28 0 { 0 0}} 31 ---> {0 Ruby 28 0 { 0 0}} 32 ---> {0 Jack 28 0 { 0 0}} 33 ---> {0 Mali 28 0 { 0 0}} 34 ---> {0 Ruby 28 0 { 0 0}} 35 ---> {0 Jack 28 0 { 0 0}} 36 ---> {0 Mali 28 0 { 0 0}} 37 ---> {0 Ruby 28 0 { 0 0}} 38 ---> {0 Jack 28 0 { 0 0}} 39 ---> {0 Mali 28 0 { 0 0}} 40 ---> {0 Ruby 28 0 { 0 0}} 41 ---> {0 Jack 28 0 { 0 0}} 42 ---> {0 Mali 28 0 { 0 0}} 43 ---> {0 Ruby 28 0 { 0 0}} 44 ---> {0 Jack 28 0 { 0 0}} 45 ---> {0 Mali 28 0 { 0 0}} 46 ---> {0 Ruby 28 0 { 0 0}} 47 ---> {0 Jack 28 0 { 0 0}} 48 ---> {0 Mali 28 0 { 0 0}} 49 ---> {0 Ruby 28 0 { 0 0}} 50 ---> {0 Jack 28 0 { 0 0}} 51 ---> {0 Mali 28 0 { 0 0}} 52 ---> {0 Ruby 28 0 { 0 0}} 53 ---> {0 Jack 28 0 { 0 0}} 54 ---> {0 Mali 28 0 { 0 0}} 55 ---> {0 Ruby 28 0 { 0 0}} 56 ---> {0 Jack 28 0 { 0 0}} 57 ---> {0 Mali 28 0 { 0 0}} 58 ---> {0 Ruby 28 0 { 0 0}} 59 ---> {0 Jack 28 0 { 0 0}} 60 ---> {0 Mali 28 0 { 0 0}} 61 ---> {0 Ruby 28 0 { 0 0}} ========================================= 0 id --> 3 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 1 id --> 4 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 2 id --> 6 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 3 person_age --> 18 person_sex --> 1 id --> 7 person_name --> Hello ---------------- 4 id --> 8 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 5 person_name --> Jack person_age --> 28 person_sex --> 1 id --> 10 ---------------- 6 id --> 11 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 7 id --> 12 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 8 id --> 14 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 9 id --> 15 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 10 id --> 16 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 11 person_age --> 28 person_sex --> 1 id --> 18 person_name --> Jack ---------------- 12 id --> 19 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 13 id --> 20 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 14 person_sex --> 1 id --> 22 person_name --> Jack person_age --> 28 ---------------- 15 id --> 23 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 16 id --> 24 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 17 person_age --> 28 person_sex --> 1 id --> 26 person_name --> Jack ---------------- 18 id --> 27 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 19 person_sex --> 1 id --> 28 person_name --> Ruby person_age --> 28 ---------------- 20 id --> 30 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 21 id --> 31 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 22 id --> 32 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 23 id --> 34 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 24 id --> 35 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 25 id --> 36 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 26 id --> 38 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 27 person_age --> 28 person_sex --> 1 id --> 39 person_name --> Mali ---------------- 28 id --> 40 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 29 id --> 42 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 30 person_name --> Mali person_age --> 28 person_sex --> 1 id --> 43 ---------------- 31 id --> 44 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 32 id --> 46 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 33 id --> 47 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 34 person_name --> Ruby person_age --> 28 person_sex --> 1 id --> 48 ---------------- 35 id --> 50 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 36 id --> 51 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 37 person_age --> 28 person_sex --> 1 id --> 52 person_name --> Ruby ---------------- 38 id --> 54 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 39 id --> 55 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 40 id --> 56 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 41 id --> 58 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 42 id --> 59 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 43 id --> 60 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 44 id --> 62 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 45 id --> 63 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 46 id --> 64 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 47 id --> 66 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 48 id --> 67 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 49 id --> 68 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 50 person_age --> 28 person_sex --> 1 id --> 70 person_name --> Jack ---------------- 51 id --> 71 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 52 id --> 72 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 53 id --> 74 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 54 person_name --> Mali person_age --> 28 person_sex --> 1 id --> 75 ---------------- 55 id --> 76 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- 56 id --> 78 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 57 person_name --> Mali person_age --> 28 person_sex --> 1 id --> 79 ---------------- 58 person_name --> Ruby person_age --> 28 person_sex --> 1 id --> 80 ---------------- 59 id --> 82 person_name --> Jack person_age --> 28 person_sex --> 1 ---------------- 60 id --> 83 person_name --> Mali person_age --> 28 person_sex --> 1 ---------------- 61 id --> 84 person_name --> Ruby person_age --> 28 person_sex --> 1 ---------------- rowNum: 1 rowNum2: 1 0 rowNum3: 0 <nil> PersonTable表總記錄條數: 62總結
- 上一篇: vue官网使用指南
- 下一篇: xorm框架基础知识学习