golang xorm框架的使用

1、创建engine

engine, err := xorm.NewEngine(driverName, dataSourceName)

上述代码创建了一个数据库引擎,可以在一个程序中创建多个engine。

2、查询方法:

2.1、支持sql查询:

  1、查询一个string类型的sql,返回[]map[string][]byte类型的切片(查询)

results, err := engine.Query("select * from user")

  2、执行一个string的sql,返回结果影响行数(增删改)

affected, err := engine.Exec("update user set .... where ...")

2.2、ORM方法:

  主要有七个方法和其他辅助的方法来操作数据库。

  1、插入一个或者多个数据:

affected, err := engine.Insert(&struct)
// INSERT INTO struct () values ()
affected, err := engine.Insert(&struct1, &struct2)
// INSERT INTO struct1 () values ()
// INSERT INTO struct2 () values ()
affected, err := engine.Insert(&sliceOfStruct)
// INSERT INTO struct () values (),(),()
affected, err := engine.Insert(&struct1, &sliceOfStruct2)
// INSERT INTO struct1 () values ()
// INSERT INTO struct2 () values (),(),()

  2、从数据库里面查询一条记录:

has, err := engine.Get(&user)
// SELECT * FROM user LIMIT 1

  3、从数据库中查询多条记录:

sliceOfStructs := new(Struct)
err := engine.Find(sliceOfStructs)
// SELECT * FROM user

  4、查询多条记录,然后每条记录进行处理,有两个方法,一个是iterator,另一个是raw:

err := engine.Iterate(...)
// SELECT * FROM user

raws, err := engine.Raws(...)
// SELECT * FROM user
bean := new(Struct)
for raws.Next() {
    err = raws.Scan(bean)
}

  5、更新一条或者多条记录:

affected, err := engine.Update(&user)
// UPDATE user SET ...

  6:删除一条或者多条记录,必须存在删除条件

affected, err := engine.Where(...).Delete(&user)
// DELETE FROM user Where ...

  7、查询记录条数:

counts, err := engine.Count(&user)
// SELECT count(*) AS total FROM user

2.3:条件:

  1、Id、In:

engine.Id(1).Get(&user) // for single primary key
// SELECT * FROM user WHERE id = 1
engine.Id(core.PK{1, 2}).Get(&user) // for composite primary keys
// SELECT * FROM user WHERE id1 = 1 AND id2 = 2
engine.In("id", 1, 2, 3).Find(&users)
// SELECT * FROM user WHERE id IN (1, 2, 3)
engine.In("id", []int{1, 2, 3})
// SELECT * FROM user WHERE id IN (1, 2, 3)

  2、 Where, And, Or

engine.Where().And().Or().Find()
// SELECT * FROM user WHERE (.. AND ..) OR ...

  3、OrderBy, Asc, Desc

engine.Asc().Desc().Find()
// SELECT * FROM user ORDER BY .. ASC, .. DESC
engine.OrderBy().Find()
// SELECT * FROM user ORDER BY ..

  4、 Limit, Top

engine.Limit().Find()
// SELECT * FROM user LIMIT .. OFFSET ..
engine.Top(5).Find()
// SELECT TOP 5 * FROM user // for mssql
// SELECT * FROM user LIMIT .. OFFSET 0 //for other databases

  5、Sql, 查询原生SQL

engine.Sql("select * from user").Find()

  6、Cols, Omit, Distinct

engine.Cols("col1, col2").Find()
// SELECT col1, col2 FROM user
engine.Cols("col1", "col2").Where().Update(user)
// UPDATE user set col1 = ?, col2 = ? Where ...
engine.Omit("col1").Find()
// SELECT col2, col3 FROM user
engine.Omit("col1").Insert()
// INSERT INTO table (non-col1) VALUES ()
engine.Distinct("col1").Find()
// SELECT DISTINCT col1 FROM user

  7、Join, GroupBy, Having

engine.GroupBy("name").Having("name=‘xlw‘").Find()
//SELECT * FROM user GROUP BY name HAVING name=‘xlw‘
engine.Join("LEFT", "userdetail", "user.id=userdetail.id").Find()
//SELECT * FROM user LEFT JOIN userdetail ON user.id=userdetail.id
时间: 2024-12-29 10:28:43

golang xorm框架的使用的相关文章

Golang 微框架 Gin 简介

框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个. 曾经我以为Python世界里的框架已经够多了,后来发现相比golang简直小巫见大巫.golang提供的net/http库已经很好了,对于http的协议的实现非常好,基于此再造框架,也不会是难事,因此生态中出现了很多框架.既然构造框架的门槛变低了,

【One by one系列】一步步学习Golang web框架Gin

一步步学习Golang web框架Gin 建立项目 go mod 管理依赖 cd $gopath\src\github.com\carfield go mod init 就可以看到在src\github.com\carfield 生成了go.mod文件 module github.com/carfield go 1.13 下载gin包 go get -u github.com/gin-gonic/gin ps:由于众所周知的原因,大概率是下不动,所以请修改代理 修改代理 go env -w GO

golang orm 框架之 gorm

最近在想给这个小站增加点赞和评论功能,第三方系统又有各种限制,就想自己弄个后端,实现类似的功能,对于个人来说,数据量不是很大,单机的 mysql 足够存下所有数据,mysql 作为底层存储是个不错的选择 之前在公司是直接用的 github.com/go-sql-driver/mysql 访问数据库都是直接用写 sql,取出结果然后自己拼成对象,使用上面不是很方便,可读性也不好.想起之前研究 php laravel 框架的时候,直接把数据库层屏蔽了,用户看到的只有对象,使用非常方便,java 里面

golang revel框架cmd命令安装被墙超时问题

Get https://code.google.com/p/go/source/checkout?repo=net: dial tcp 74.125.31.113:443: connection timed out Get https://code.google.com/p/go/source/checkout?repo=net: dial tcp 74.125.31.110:443: connection timed out 解决 大陆苦逼程序员的websocket组件 下载timeout的情

golang xorm应用

github.com/go-xorm/xorm  xorm库 http://www.xorm.io/docs/ 手册 xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便.xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单SQL需求. 在xorm里面,可以同时存在多个Orm引擎,一个Orm引擎称为Engine,一个Engine一般只对应一个数据库.Engine通过调用xorm.NewEngine生成,如: v

golang gin框架 使用swagger生成api文档

github地址:https://github.com/swaggo/gin-swagger 1.下载swag $ go get -u github.com/swaggo/swag/cmd/swag 2.在main.go所在目录执行 $ swag init 生成docs/doc.go以及docs/swagger.json,docs/swagger.yaml 3.下载gin-swagger $ go get -u github.com/swaggo/gin-swagger $ go get -u

golang gin框架中实现大文件的流式上传

一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理. 以下的代码实现了大文件流式上传. 还非常不完美,但是可以作为参考: upload.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>up

golang rbac框架

在 https://github.com/mikespook/gorbac/tree/v1.0 github上新的版本是开发板,得用这里的老版

golang web框架 beego 学习 (三) beego获取参数

直接上常用的例子吧: A:     获取URL中的参数 router func init() { beego.Router("/task/?:id/?:name", &controllers.TaskController{}) } controller func (c *TaskController) Get() { id1 := c.GetString(":id") name1 := c.GetString(":name") id2 :