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

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

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

收录于:18天前

XORM

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

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

xorm的优点:

  1. 支持结构体和数据库表的灵活映射和自动同步
  2. 支持事务
  3. 支持原始sql和orm混合执行
  4. 级联语句支持
  5. 支持缓存
  6. 支持构造器自动生成映射的结构体xorm.io/revere
  7. 支出sql语句构造器内置 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 库。它可以使数据库操作变得非常简单。

. . .

相关推荐

额外说明

SpringCloud深度学习-Spring Cloud Stream

一、前言 这几天对Springcloud 2.x的配置文章做了大致的收尾工作,在看springcloud官方文档意外发现了一项遗漏的技能点,自己测试试验了下,感觉还是不错的技术,特此做一项学习笔记总结。 二、现状 企业中使用到消息中间件有很多种类,目前流

额外说明

pandas根据索引删除数据框列

如何根据索引删除dataframe的多个列呢? 核心代码逻辑:  # 要删除的列,注意索引是从0开始的 x = [0, 2, 8, 9, 10, 11, 12] df.drop(df.columns[x], axis=1, inp

额外说明

使用exe4j将java项目打成exe执行程序

最近用Java写了一个小工具,想将它达成exe执行文件,到时候直接放某个目录下,一执行就能跑啦。   用到的工具: 1、写好的项目:可以是java项目,也可以是java web项目 2、能够打jar的工具:我用的MyEclipse开发,他们有自带的工具,

额外说明

linux 第一阶段 需要记!

GNU:1983年(理查德•马修•斯托曼)创立GNU计划。一套完全自由的操作系统,这个操作系统是GNU计划的主要目标(发展出一套完整的开放源代码操作系统来取代Unix). Linux的基本思想有两点: 第一,一切都是文件 第二,每个软件都有确定的用途 L

额外说明

MySQL之逻辑备份与恢复

逻辑备份简介: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。 本质:导出的是SQL语句文件 优点:不论是什么存储引擎,都可以用mysqldump备成SQL语句 缺点:速度较慢,导入时可能会出现格式不兼容的突发情况,无

额外说明

浮动和清除浮动(详细讲述)

目录 为什么需要浮动? 什么是浮动? 浮动特性(重难点) (1)浮动元素会脱离标准流(脱标) (2)浮动的元素会一行内显示并且元素顶部对齐 (3)浮动的元素会具有行内块元素的特性 浮动元素经常和标准流父级搭配使用 清除浮动的四种方法 1:额外标签法 2:

额外说明

深入理解BIO、NIO、AIO以及应用场景

补充概念: 同步与异步 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 异步: 异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机

额外说明

1024凑数篇之程序员职业生涯问答

学校每年都有大职规课要采访职业生涯人物,一批人都在发愁采访谁,就在今天(10月23号)下午,一个学妹联系我说想做一个简单的采访,正好明天是1024,于是就记录下来发一篇凑数的博客,希望可以得到1024勋章。 注:在下学识浅薄,对于该行业了解甚少,以下纯属

额外说明

django2中表单的使用

前一章节介绍了django中的表单,本章节继续介绍表单,但是本章节是基于数据模型来使用的表单,因为我们也称之为模型表单 一、使用模型表单的主要步骤 1、定义数据模型 from django.db import models from django.cor

额外说明

一、Gin开篇

一、Gin开篇 1.1、web应用程序 package main import ( "fmt" "net" ) func main() { listener, err := net.Listen("tcp", "127.0.0.1:8888")

ads via 小工具