您现在的位置是:首页 >技术杂谈 >Go的ORM框架XORM实现增删改查网站首页技术杂谈

Go的ORM框架XORM实现增删改查

_小许_ 2023-06-02 12:00:03
简介Go的ORM框架XORM实现增删改查

XORM

XORM 是一个简单而强大的 Go 语言 ORM 框架。官网XORM

更多细节请移步官网,本篇文章主要阐述快速入门,快速实现增删改查的(curd的操作来熟悉xorm。

xorm优势:

  1. 支持struct和数据库表的灵活映射,并自动同步
  2. 支持事务
  3. 支持原始sql和orm的混合执行
  4. 联级语句支持
  5. 支持缓存
  6. 支持构造器自动生成映射的结构体xorm.io/revere
  7. 支出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)

更多请移步官网xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。