XORM高級操作


XORM高級操作

package main

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


func main() {
	engine, err := xorm.NewEngine("mysql", "root:123@/test6?charset=utf8") // dbname是taoge
	if err != nil {
		fmt.Println(err)
		return
	}
	if err := engine.Ping();err !=nil{
		fmt.Println(err,"數據庫連接失敗!")
		return
	}
	defer engine.Close()
	fmt.Println("數據庫連接成功!")
	//建立表字段,映射數據庫
	engine.SetMapper(core.GonicMapper{})
	engine.Sync2(new(PersonTable))

    //判斷PersonTable表是否為空
    personEmpty,err := engine.IsTableEmpty(new(PersonTable))
	if err !=nil{
		panic(err.Error())
	}
	if personEmpty{
		fmt.Println("人員表為空!")
	}else{
		fmt.Println("人員表不為空!")
	}
    
    //映射CityTable表,並且判斷是否存在
    engine.Sync2(new(CityTable))
	cityExist,err := engine.IsTableExist(new(CityTable))
	if err != nil{
		panic(err.Error())
	}
	if cityExist{
		fmt.Println("城市表存在")
	}else {
		fmt.Println("城市表不存在")
	}
    //方法一:查找數據值
    var pers1 PersonTable
	rasult1,err:=engine.Where("preson_age = ? and preson_sex = ?", 18,0).Get(&pers1)
	fmt.Println(pres1.PersonSex)
	fmt.Println(pres1.PersonAge)
	fmt.Println(pres1.PersonName)
	fmt.Println(rasult1)
    //方法二:查找數據值,獲取的是多個值
    var Pers2 []PersonTable
	engine.Where("Person_age=? and Person_sex=? ",18,0).Find(&Pers2)
	fmt.Println(Pers2)
    //方法三:通過and方法查出並值
    var Pers []PersonTable
	engine.Where("Person_age = ?",18).And("Person_sex=?",0).And("Person_name=?","海燕").Find(&Pers3)
	fmt.Println(pres3)
    //方法四:使用or查詢或值
    var Pers4 []PersonTable
	engine.Where("Person_sex =?",0).Or("Person_name=?","海燕").Or("Person_age=?",19).Find(&Pers4)
	fmt.Println(Pers4)
    //方法五:使用原始sql語句進行查詢,like為模糊查詢,%前面的為以匹配首,若%放最前面表示配位尾,若首尾%中間為某值則是匹配之間有某值的value
    var Pers5 []PersonTable
	err = engine.SQL("select * from Person_table where Person_name like '海燕%'").Find(&Pers5)
	fmt.Println(Pers5)
    
    //方法六:排序,"Person_age"為正排序,"Person_age desc"為逆排序
    var Pers6 []PersonTable
	engine.OrderBy("Person_age desc").Find(&Pers6)
	fmt.Println(Pers6)
    
    //方法七:按照"Person_name","Person_age"字段查找只顯示這兩個字段,其他字段都是以0代替
    var Pers7 []PersonTable
	engine.Cols("Person_name","Person_age").Find(&Pers7)
	fmt.Println(Pers7)
    
    //方法八:第一步判斷是否已經有值,沒有值則插入值,可根據自己的具體邏輯修改
    var Pers7  PersonTable
	b,_:=engine.Where("Person_name = ?","海燕").Get(&Pers8)
	if b{
		fmt.Println("數據已經存在",Pers8)
	}else {
		fmt.Println("數據不存在")
		doc1:=PersonTable{0,"海燕",18,0}
		i1,_ :=engine.InsertOne(doc1)
		fmt.Println("新增結果",i1)
	}
   
    //方法九:插入值Insert
	personInsert1 :=PresonTable{
		PresonName: "hello world",
		PresonAge:  8,
		PresonSex:  1,
	}
	personInsert2 := PresonTable{
		PresonName: "bullk",
		PresonAge:  12,
		PresonSex:  0,
	}
	rowNum,err := engine.Insert(&personInsert1,&personInsert2)
	fmt.Println(rowNum)//rowNum代表插入的條數
    
    //方法十:刪除值
	rowNum1,err := engine.Delete(&personInsert2)//與插入一樣可以放入多個對象
	fmt.Println(rowNum1)//rowNum代表刪除的條數
    
    //方法十一:更新操作
	personInsert3 :=PresonTable{
		PresonName: "hello world 海燕",
		PresonAge:  8,
		PresonSex:  1,
	}
	rowNum2,err := engine.ID(9).Update(&personInsert3)//Update后可以放多個值
	fmt.Println(rowNum2)//rowNum2代表修改的個數
    //方法十二:統計功能
    count,err := engine.Count(new(PresonTable))
	fmt.Println("表中共有",count)
    //方法十三:開啟事務
	session := engine.NewSession()
	session.Begin()
	//使用for循環做批量操作
	for i:=0;i<len(personArray);i++{
		_,err = session.Insert(personArray[i])
		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 `xrom:"int default 0"`
	PersonSex int `xrom:"notnull"`

}

type CityTable struct {
	CityName string
	CityLongitude float32
	CityLatitude float32
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM