Xorm 使用
创建引擎
创建引擎
driverName, dataSourceName和database/sql接口相同
第一种方法
1 | import ( |
第二种方法
1 | import ( |
创建Engine组(操作集群)
1 | dataSourceNameSlice := []string{masterDataSourceName, slave1DataSourceName, slave2DataSourceName} |
所有使用 engine
都可以简单的用 engineGroup
来替换。
同步结构体到数据库表
- 定义一个和表同步的结构体,并且自动同步结构体到数据库
1 | type User struct { |
CURD操作
Insert 操作
Insert
插入一条或者多条记录
1 | affected, err := engine.Insert(&user) |
Delete操作
Delete
删除记录,需要注意,删除必须至少有一个条件,否则会报错。要清空数据库可以用EmptyTable
1 | affected, err := engine.Where(...).Delete(&user) |
update 更新操作
Update
更新数据,除非使用Cols,AllCols函数指明,默认只更新非空和非0的字段
1 | affected, err := engine.ID(1).Update(&user) |
query操作
Query
最原始的也支持SQL语句查询,返回的结果类型为 []map[string]byte。QueryString
返回 []map[string]string,QueryInterface
返回[]map[string]interface{}
.
1 | results, err := engine.Query("select * from user") |
Get 操作
Get
查询单条记录
1 | has, err := engine.Get(&user) |
Find操作(查询多条记录)
Find
查询多条记录,当然可以使用Join和extends来组合使用
1 | var users []User |
记录Exist 判断
Exist
检测记录是否存在
1 | has, err := testEngine.Exist(new(RecordExist)) |
执行原生sql语句
Exec
执行一个SQL语句
1 | affected, err := engine.Exec("update user set age = ? where name = ?", age, name) |
数据库遍历
Iterate
和Rows
根据条件遍历数据库,可以有两种方式: Iterate and Rows
1 | err := engine.Iterate(&User{Name:name}, func(idx int, bean interface{}) error { |
统计操作
Count
获取记录条数
1 | counts, err := engine.Count(&user) |
Sum
求和函数
1 | agesFloat64, err := engine.Sum(&user, "age") |
条件编辑器
- 条件编辑器
1 | err := engine.Where(builder.NotIn("a", 1, 2).And(builder.In("b", "c", "d", "e"))).Find(&users) |
事务操作
- 在一个Go程中多次操作数据库,但没有事务
1 | session := engine.NewSession() |
- 在一个Go程中有事务
1 | session := engine.NewSession() |
- 事物的简写方法
1 | res, err := engine.Transaction(func(session *xorm.Session) (interface{}, error) { |
上下文缓存
- 上下文缓存,如果启用,那么针对单个对象的查询将会被缓存到系统中,可以被下一个查询使用。
1 | sess := engine.NewSession() |