zoukankan      html  css  js  c++  java
  • 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
    }
    
  • 相关阅读:
    Python_反射
    Python_面向对象_类2
    Python_面向对象_类1
    Python_logging模块
    Python_子进程管理subprocess模块
    Python_python内置加密模块
    Python_configparser模块
    Python_xml
    Python_shelve模块
    Python_shutil模块
  • 原文地址:https://www.cnblogs.com/mqhpy/p/13553886.html
Copyright © 2011-2022 走看看