您现在的位置是:首页 >技术杂谈 >Go的ORM框架XORM实现增删改查网站首页技术杂谈
Go的ORM框架XORM实现增删改查
简介Go的ORM框架XORM实现增删改查
XORM
XORM 是一个简单而强大的 Go 语言 ORM 框架。官网XORM
更多细节请移步官网,本篇文章主要阐述快速入门,快速实现增删改查的(curd的操作来熟悉xorm。
xorm优势:
- 支持struct和数据库表的灵活映射,并自动同步
- 支持事务
- 支持原始sql和orm的混合执行
- 联级语句支持
- 支持缓存
- 支持构造器自动生成映射的结构体xorm.io/revere
- 支出sql语句构造器内置 SQL Builder
安装xorm工具包
go get xorm.io/xorm
安装数据库驱动
go get -u github.com/go-sql-driver/mysql
//其他数据库驱动
//sqlite
github.com/mattn/go-sqlite3
//oracle
github.com/godror/godror
创建datasource使用驱动程序
driverName := "mysql"
dataSource := "root:root@/account?charset=utf8"
db, err := xorm.NewEngine(driverName, dataSource)
type User struct {
Id int `xorm:"id"`
User string `xorm:"user"`
Password string `xorm:"password"`
Role string `xorm:"role"`
}
//调用struct与数据库表映射
syncErr := db.Sync(new(User))
if syncErr != nil {
fmt.Println("数据表映射失败",syncErr)
}
通过db.Sync(new(User))
方法生成数据库表。
CURD
数据项添加
type User struct {
Id int
User string
Password string
Role string
}
driverName := "mysql"
dataSource := "root:root@/account?charset=utf8"
db, err := xorm.NewEngine(driverName, dataSource)
if err != nil {
fmt.Println("数据库连接失败", err)
}
user1 := User{
0,
"test2",
"admin",
"admin",
}
db.Insert(&user1)
# db.Insert(&user1)
INSERT INTO `structName` (...成员变量名) values(...成员变量值)
xorm在插入时会自动将结构体和成员变量首字母转为小写,因此无需做任何配置能直接使用结构体,(gorm转小写时会加s,需要配置修改,这是框架的不同点)。也可以通过tag标签
xorm
在转换时修改为自定义的表的字段。type User struct { Id int `xorm:"id"` User string `xorm:"user"` Password string `xorm:"password"` Role string `xorm:"role"` }
另外该方法也支持批量插入,将参数依次填入即可func (*xorm.Engine).Insert(beans ...interface{}) (int64, error)
,批量插入转化为为多条sql。
甚至还支持结构体数据,切片等。
元素添加
除了前一节的整个数据项的添加,xorm也支持元素添加,选择性的插入表的部分字段。
//元素插入
db.Table("user").Insert(map[string]interface{}{
"user": "test", //map类型的key为数据字段,value为值
"password": "123",
"role": "admin",
})
// INSERT INTO user (user, password, role) values ("test","123","admin")
//元素的批量插入
db().Table("user").Insert(map[string]interface{}{
{
"user": "test", //map类型的key为数据字段,value为值
"password": "123",
"role": "admin",
},
{
"user": "test1", //map类型的key为数据字段,value为值
"password": "123",
"role": "admin",
},
})
删除
db.ID(1).Delete(&user)
//DELETE FROM user Where id = ?
db.Where(...).Delete(&user)
// DELETE FROM user Where (...表达式语句)
更新
//更新数据项,user是一个初始化的结构体
db.ID(1).Update(&user)
// UPDATE user SET ... Where id = ?
//更新指定元素
db.Update(&user, &User{Name:name})
// UPDATE user SET ... Where name = ?
方法都是有返回值的,注意错误处理。
查询
var users []User
err := engine.Where("name = ?", name).And("age > 10").Limit(10, 0).Find(&users)
// SELECT * FROM user WHERE name = ? AND age > 10 limit 10 offset 0
查询一般样式多变,建议使用Exec
方法执行一个SQL语句。
data, err := engine.Exec("update user set age = ? where name = ?", age, name)
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。