本文介绍golangorm库xorm的使用和项目结构。xorm官方介绍:xorm是一个简单而强大的Go语言ORM库。它可以使数据库操作变得非常容易。xorm的目标不是让你完全不学习SQL。我们认为SQL不会被ORM取代,但是ORM会解决大部分简单的SQL需求。xorm支持两种风格的混合。xorm还提供了一个工具,通过reverse命令,根据数据库的表结构生成对应的struct,省去了手动组织代码的工作,非常方便。官方地址:https://xorm.io/Installation浏览xorm的github地址,我们需要下载2个包,https://github.com/go-xorm1,xorm驱动包,我们使用xorm核心包2,cmd该工具包用于使用反向命令生成数据表的相应结构。通过goget命令分别下载两个包。go-xorm包会在.com文件夹下生成数据结构struct。本地数据库test有2张数据表,doctor_tb和user_tb,数据结构如下:现在我们生成这2张数据表的结构模型。1、在任意项目下新建文件夹xorm_models,文件名不指定,用于存放生成的代码文件。2.将cmd工具包中的template目录复制到xorm_models中,文件目录github.com\go-xorm\cmd\xorm\templates\goxorm中config是生成的配置信息,struct.go.tpl是数据模板,允许自定义,可以根据自己的项目需求修改模板。一般不需要修改。3、打开cmd命令行窗口,进入xorm_models目录,执行反向命令:xormreverse[数据库类型][数据库连接字符串][模板目录]xormreversemysqlroot:112233@tcp(127.0.0.1:3305)/test?charset=utf8templates/goxorm4,xorm_models/models目录下会自动生成数据结构代码。我们可以看到与表名doctor_tb.go和user_tb.gopackagemodelsimport("time")typeDoctorTbstruct{Idint`xorm:"notnullpkautoincrINT(11)"`Namestring`xorm:"default''comment同名的两个数据结构文件('Name')VARCHAR(50)"`Ageint`xorm:"default0comment('age')INT(11)"`Sexint`xorm:"default0comment('gender')INT(11)"`Addtime.Time`xorm:"DATETIME"`}使用xormxorm支持链式写入引擎.Where("age>?",40).Or("namelike?","Lin%").OrderBy("Iddesc").Find(&docList2)也支持直接执行sql语句engine.SQL("select*fromdoctor_tbwhereage>?,40).Find(&docList4)附上一个增删改查交易的demo例子。代码中有注释,通俗易懂。xorm的包装很友好。只要熟悉sql语句,即使不看文档也能流畅地使用各种关键字。packagemainimport("fmt"_"github.com/go-sql-driver/mysql""github.com/go-xorm/xorm""goShare/xorm_models/models""time")funcmain(){varengine*xorm.Engine//连接数据库引擎,err:=xorm.NewEngine("mysql","root:112233@tcp(127.0.0.1:3305)/test?charset=utf8")iferr!=nil{fmt.Println(err)return}//连接测试iferr:=engine.Ping();err!=nil{fmt.Println(err)return}deferengine.Close()//延迟关闭数据库fmt.Println("数据库连接成功")//查询单个数据vardocmodels.DoctorTbb,_:=engine.Where("name=?","钟南山").Get(&doc)ifb{fmt.Println(doc)}else{fmt.Println("Datadoesnotexist")}//查询单条数据方法2会根据结构体doc2:=models.DoctorTb{Name:"钟南山"}b,_=engine.Get(&doc2)fmt.Println(doc2)//新数据doc3:=models.DoctorTb{0,"王医生",48,1,time.Now()}i3,_:=engine.InsertOne(doc3)fmt.Println("新结果:",i3)//查询列表docList:=make([]models.DoctorTb,0)engine.Where("age>?ornamelike?",40,"Lin%").Find(&docList)fmt.Println("docList:",docList)//查询列表方法2docList2:=make([]models.DoctorTb,0)engine.Where("age>?",40).Or("namelike?","Lin%").OrderBy("Iddesc").Find(&docList2)fmt.Println("docList2:",docList2)//查询分页docList3:=make([]models.DoctorTb,0)page:=0//页面索引pageSize:=2//每页数据限制:=pageSizestart:=page*pageSizetotalCount,err:=engine.Where("age>?ornamelike?",40,"Lin%").Limit(limit,start).FindAndCount(&docList3)fmt.Println("Totalrecords:",totalCount,"docList3:",docList3)//直接用语句查询docList4:=make([]models.DoctorTb,0)engine.SQL("select*fromdoctor_tbwhereage>?",40).Find(&docList4)fmt.Println("docList4:",docList4)//删除docDel:=models.DoctorTb{Name:"王医生"}iDel,_:=engine.Delete(&docDel)fmt.Println("Deleteresult:",iDel)//删除方法2engine.Exec("deletefromdoctor_tbwhereId=?",3)//更新数据doc5:=models.DoctorTb{Name:"钟医生"}//更新数据ID为2的记录名称为“钟医生”iUpdate,_:=engine.Id(2).Update(&doc5)fmt.Println("Updateresult:",iUpdate)//指定表nametoqueryTable()user:=models.UserTb{Id:2}b,_=engine.Table("user_tb").Get(&user)fmt.Println(user)//transactionsession:=engine.NewSession()defersession.Close()err=session.Begin()_,err=session.Exec("deletefromdoctor_tbwhereId=?",6)iferr!=nil{session.Rollback()return}_,err=session.Exec("deletefromuser_tbwhereId=?",10)iferr!=nil{session.Rollback()return}err=session.Commit()iferr!=nil{return}fmt.Println("事务执行成功")}总结使用过程:1、下载xorm包和cmd工具包2、将cmd工具包中的模板代码文件夹复制到生成目录下3、使用reverse生成数据结构代码,省心4、实例引擎xorm.NewEngine()5.愉快调用demo提供了单条数据的增删改查等常用内容,c我们开发业务中常用的检查列表、检查页面、交易等。如果文章对你有用,请点个赞。
