本文介绍了 golang orm 库 xorm 的使用和项目结构。
xorm 官方介绍:xorm 是一个简单而强大的 go 语言 orm 库。通过它可以使数据库操作非常简便。xorm 的目标并不是让你完全不去学习 sql,我们认为 sql 并不会为 orm 所替代,但是 orm 将可以解决绝大部分的简单 sql 需求。xorm 支持两种风格的混用。 xorm 还提供了工具,通过 reverse 命令根据数据库的表结构生成对应的 struct,省去了人工组织代码的工作,十分方便。官方地址:https://xorm.io/
安装 浏览 xorm 的 github 地址,我们要下载 2 个包,https://github.com/go-xorm
1、xorm 驱动包,我们使用 xorm 的核心包 2、cmd 工具包,用于使用 reverse 命令生成数据表对应的 struct
通过 go get 命令分别下载 2 个包go get github.com/go-xorm/xormgo get github.com/go-xorm/cmd/xorm下载完成后 github.com 文件夹下会出现 go-xorm 包
生成数据结构 struct 本地数据库 test 有 2 张数据表,doctor_tb 和 user_tb, 数据结构如下:
我们现在就来生成这 2 张数据表的结构模型。
1、在任意项目下新建一个文件夹 xorm_models,文件名没有规定,为了存放生成的代码文件。 2、拷贝 cmd 工具包中的摸板目录到 xorm_models 下,在文件目录github.comgo-xormcmdxorm emplatesgoxorm下
config 是生成的配置信息,struct.go.tpl 是数据摸板,允许自定义,可以根据自己的项目需求,修改摸板。一般不需要修改。
3、打开 cmd 命令行窗口,进入 xorm_models 目录下,执行 reverse 命令:xorm reverse [数据库类型] [数据库连接串] [模板目录] xorm reverse mysql root:112233@tcp(127.0.0.1:3305)/test?charset=utf8 templates/goxorm
4、数据结构代码会自动生成在 xorm_models/models 目录下。
我们能看到生成了和表名同名的 2 个数据结构文件 doctor_tb.go 和 user_tb.go
package modelsimport ( time)type doctortb struct { id int `xorm:not null pk autoincr int(11)` name string `xorm:default '' comment('姓名') varchar(50)` age int `xorm:default 0 comment('年龄') int(11)` sex int `xorm:default 0 comment('性别') int(11)` addtime time.time `xorm:datetime`} 使用 xorm xorm 支持链式的写法engine.where(age > ?, 40).or(name like ?, 林%).orderby(id desc).find(&doclist2)也支持直接执行 sql 语句engine.sql(select * from doctor_tb where age > ?, 40).find(&doclist4)
附上增删改查事务的 demo 例子,代码里都有注释,很容易看懂。xorm 的封装比较友好,只要熟悉 sql 语句,即便不看文档,也能顺利的使用各种关键字。
package mainimport ( fmt _ github.com/go-sql-driver/mysql github.com/go-xorm/xorm goshare/xorm_models/models time)func main() { var engine *xorm.engine //连接数据库 engine, err := xorm.newengine(mysql, root:112233@tcp(127.0.0.1:3305)/test?charset=utf8) if err != nil { fmt.println(err) return } //连接测试 if err := engine.ping(); err != nil { fmt.println(err) return } defer engine.close() //延迟关闭数据库 fmt.println(数据库链接成功) //查询单条数据 var doc models.doctortb b, _ := engine.where(name = ?, 钟南山).get(&doc) if b { fmt.println(doc) } else { fmt.println(数据不存在) } //查询单条数据方式 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 > ? or name like ?, 40, 林%).find(&doclist) fmt.println(doclist:, doclist) //查询列表方式 2 doclist2 := make([]models.doctortb, 0) engine.where(age > ?, 40).or(name like ?, 林%).orderby(id desc).find(&doclist2) fmt.println(doclist2:, doclist2) //查询分页 doclist3 := make([]models.doctortb, 0) page := 0 //页索引 pagesize := 2 //每页数据 limit := pagesize start := page * pagesize totalcount, err := engine.where(age > ? or name like ?, 40, 林%).limit(limit, start).findandcount(&doclist3) fmt.println(总记录数:, totalcount, doclist3:, doclist3) //直接用语句查询 doclist4 := make([]models.doctortb, 0) engine.sql(select * from doctor_tb where age > ?, 40).find(&doclist4) fmt.println(doclist4:, doclist4) //删除 docdel := models.doctortb{name: 王医生} idel, _ := engine.delete(&docdel) fmt.println(删除结果:, idel) //删除方式 2 engine.exec(delete from doctor_tb where id = ?, 3) //更新数据 doc5 := models.doctortb{name: 钟医生} //更新数据 id 为 2 的记录名字更改为“钟医生” iupdate, _ := engine.id(2).update(&doc5) fmt.println(更新结果:, iupdate) //指定表名查询。table() user := models.usertb{id: 2} b, _ = engine.table(user_tb).get(&user) fmt.println(user) //事务 session := engine.newsession() defer session.close() err = session.begin() _, err = session.exec(delete from doctor_tb where id = ?, 6) if err != nil { session.rollback() return } _, err = session.exec(delete from user_tb where id = ?, 10) if err != nil { session.rollback() return } err = session.commit() if err != nil { return } fmt.println(事务执行成功)} 总结 归纳下使用流程 1、下载 xorm 包和 cmd 工具包 2、复制 cmd 工具包里的模板代码文件夹至生成目录底下 3、使用 reverse 生成数据结构代码,省去苦力活 4、实例引擎xorm.newengine()5、痛快的调用
demo 里提供了我们开发业务上常用的增,删,改,查单条数据,查列表,查分页,事务等内容。如果文章对你有用,请点个赞。
转自:segmentfault.com/a/1190000022023758
2019中国国际智能产业博览会将在重庆举行
一总投资约55亿元的COF项目奋力推进建设
电动执行器的结构原理和常见故障分析
Leader打造专业级运动空调:运动时空调放心吹
这款造型奇特,与众不同的哈弗M6将于本月正式上市
golang orm库xorm的使用和项目结构
食品药品检测仪器的检测项目有哪些
英伟达官黄仁勋有望成为半导体行业最具话语权的人
科学家研制出在人体内运送药物的微型机器人
在太阳穴上测量体温的红外传感智能温度计
超六类网线高性能网速的“守护者”
高纵横比MEMS制造技术的4种方法
人工智能领域的发展迎来新一波高潮,人工智能与实体经济快速融合势在必行
深度:智能汽车-嵌入式系统的软件架构设计!
关于透雾技术的分析的介绍
美国证券交易委员会SEC将在2020年对数字资产进行检查
VSS/虚拟演播室系统,如何构建iSCSI磁盘阵列
常见的激光雷达SLAM算法有哪些?
ADI推出战术级10自由度MEMS IMU-ADIS16488
3D打印机OEM厂商WAS推出全新生产型FDM系统