小工具      在线工具  汉语词典  css  js  c++  java

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

# xorm,golang,数据库,sql 额外说明

收录于:152天前

XORM

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

欲了解更多详情,请访问官方网站。本文主要讲解如何快速上手,快速实现增删改查(curd操作)以熟悉xorm.

xorm的优点:

  1. 支持结构体和数据库表的灵活映射和自动同步
  2. 支持事务
  3. 支持原始sql和orm混合执行
  4. 级联语句支持
  5. 支持缓存
  6. xorm.io/revere 内置 SQL 生成器

安装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

使用驱动程序创建数据源

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 库。它可以使数据库操作变得非常简单。

. . .

相关推荐

额外说明

找不到接口 java.util.List 的主要或单个公共构造函数

我的爆错原因是途中ids忘记标注注解@PathVariable了,因为要传入一系列的整数的列表对象到路径/emps/deleteEmps/{ids}中,所以我这里就是加上注解@PathVariable就OK了。

额外说明

【算法很美打卡第4天】弦乐篇(下)

文章目录 压缩字符串 代码 判断两字符串的字符集是否相同 代码 旋转词 代码 反转单词 代码 回文串验证 代码 去掉字符串中连接出现的k次的0 代码 压缩字符串 代码 package 每日算法学习打卡.算法打卡.八月份; public class te

额外说明

UE5——问题——查找所有文件

可选是否查找文件或者文件夹. FString FilePath = FString("D:/Test/"); TArray<FString> StrArray; FString FindPa = FilePath / TEXT("*");

额外说明

ch0_汇编介绍

学习参考: https://helijian.blog.csdn.net/article/details/60885095 参考贺利坚老师的汇编课程 1. 汇编作用 1.1 汇编是所有语言的老祖宗 1.2 不可替代的使用场景 汇编语言仍在发挥不可替代的作

额外说明

could not find a distribution template for Deepin/n/a

更多文章请点击 文章目录 1.异常详情 2. 背景 3. 原因 4. 解决办法 5. 结果 6. 总结 1.异常详情 baldwin@baldwin:~$ sudo add-apt-repository \ > "deb [arch=amd64]

额外说明

matlab数据类型 —— 逻辑型

matlab系列文章:- 目录 - 文章目录 〇、概述 一、逻辑型 二、逻辑型创建 1. 直接赋值 2. 根据表达式创建 3. 使用 logical 函数转换 三、逻辑型矩阵 1. 创建逻辑型矩阵 2. 转化逻辑型矩阵 〇、概述 逻辑型:也就是其它语言中

额外说明

安卓案例:利用单选按钮实现底部导航栏

文章目录 一、运行效果 二、涉及知识点 三、实现步骤 (一)创建安卓应用 (二)准备图片素材 (三)创建背景选择器 1、创建背景选择器 - welcome_selector.xml 2、创建背景选择器 - datepicker_selector.xml

额外说明

说透Applet的数字签名之2——数字签名

文章目录 Java安全的沙箱机制 Applet运行授权实例(Policy) 沙箱阻止Applet获取系统信息 appletviewer 运行方式使用Policy文件对Applet进行授权 浏览器中运行带有获取系统信息的Applet Applet数字签名步

额外说明

《天天数学》连载46:二月十五日

格言作者:海伦·凯勒(Helen Keller,1880年6月27日—1968年6月1日),美国现代女作家、教育家、社会活动家。1880年6月27日,在亚拉巴马州塔斯喀姆比亚市常春藤巷出生。1882年2月,因突发的疾病猩红热丧失了视觉和听觉。1887年3

额外说明

前端面试的话术集锦第 5 篇:高频考点( 类型转换 & 深浅拷贝 & 模块化机制等)

这是记录前端面试的话术集锦第五篇博文——高频考点(类型转换 & 深浅拷贝 & 模块化机制等),我会不断更新该博文。❗❗❗ 1. typeof类型判断: typeof是否能正确判断类型? instanceof能正确判断对象的原理是什么 typeof对于原始

ads via 小工具