Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper
数据库操作的情况下,我们期望在Golang中创建一个结构体(Struct)与数据库(DB)中的一个表(Table)建立一个映射关系(Mapper),之后我们就通过操作这个Struct来操作DB中对应的Table,无须Hard-Coded sql string,无须手动维护字段映射关系。
"database/sql"只提供了最基础的操作接口,对数据库中一张表的增删改查等操作,必须手动编写sql string,
通常都是一个写死的字符串(Hard-Code),并且需要手动维护sql中字段与Golang中的变量的映射关系,这扩展性很差,且非常容易出错。
sqlmapper 就是这样一个极简的工具库(简单到只有一个go文件)。
原文地址:https://github.com/arthas29/sqlmapper
例如,DB中有一张表,结构如下:
CREATE TABLE `test_table` (
`field_key` varchar(64) NOT NULL DEFAULT '',
`field_one` varchar(64) DEFAULT NULL,
`field_two` tinyint(1) DEFAULT NULL,
`field_thr` int(12) DEFAULT NULL,
`field_fou` float DEFAULT NULL,
PRIMARY KEY (`field_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在Golang中,创建对应的Struct,如下:
// struct in golang such as:
type DemoRow struct {
FieldKey string `sql:"field_key"`
FieldOne string `sql:"field_one"`
FieldTwo bool `sql:"field_two"`
FieldThr int64 `sql:"field_thr"`
FieldFou float64 `sql:"field_fou"`
}
然后,我们就可以通过这个Struct执行 SELECT/INSERT/UPDATE/DELETE 操作,无须硬编码的冗长的sql string;
示例 (更多示例参见 fields_map_test.go):
// select single row
// Query by primary key (field[0])
func QueryByKey(ctx context.Context, tx *sql.Tx, db *sql.DB, fieldKey string) (
*DemoRow, error) { var row DemoRow
row.FieldKey = fieldKey
fm, err := NewFieldsMap(table, &row)
if err != nil {
return nil, err
} objptr, err := fm.SQLSelectByPriKey(ctx, tx, db)
if err != nil {
return nil, err
} return objptr.(*DemoRow), nil
}
Golang中Struct与DB中表字段通过反射自动映射 - sqlmapper的更多相关文章
- [转] golang中struct、json、map互相转化
一.Json和struct互换 (1)Json转struct例子: type People struct { Name string `json:"name_title"` Age ...
- golang中值类型的嵌入式字段和指针类型的嵌入式字段
总结: 1. 值类型的嵌入式字段,该类型拥有值类型的方法集,没有值指针类型的方法集 2. 指针类型的嵌入式字段,该类型拥有值指针类型的方法集,没有值类型的方法集,并且,该类型的指针类型也有值指针类型的 ...
- Go_14:GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
- GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
- golang自定义struct字段标签
原文链接: https://sosedoff.com/2016/07/16/golang-struct-tags.html struct是golang中最常使用的变量类型之一,几乎每个地方都有使用,从 ...
- golang中接口interface和struct结构类的分析
再golang中,我们要充分理解interface和struct这两种数据类型.为此,我们需要优先理解type的作用. type是golang语言中定义数据类型的唯一关键字.对于type中的匿名成员和 ...
- golang 中 map 转 struct
golang 中 map 转 struct package main import ( "fmt" "github.com/goinggo/mapstructure&qu ...
- golang 中的struct理解
golang实验代码 package main import("fmt") type Stu struct{ name string age int } func (stu *St ...
- Golang 中操作 Mongo Update 的方法
Golang 和 MongoDB 中的 ISODate 时间交互问题 2018年02月27日 11:28:43 独一无二的小个性 阅读数:357 标签: GolangMongoDB时间交互时间转换 更 ...
随机推荐
- springmvc与freemarker的整合
官方简介:FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用户的,而是一个Java ...
- 浅谈RMQ
RMQ是一类求区间极值的问题 有一种 \(O\left(nlogn\right)\) 的解法,用倍增实现 倍增算法 变量的定义 \(A_i\) : 原数组 \(f_{i,j}\) : 以 \(i\) ...
- C#基础知识(一)自己总结的。。。
一.变量的声明 访问修饰符 数据类型 变量名: 访问修饰符:public ,private,protected 变量的访问修饰符默认为private eg: Public Int a: a=10 ...
- 冲刺NO.10
Alpha冲刺第十天 站立式会议 项目进展 项目核心功能逐步构建完成,测试工作也已开始.主要对部分功能组合进行测试以测试系统可用性. 问题困难 项目的主要困难在这个时间点主要存在于测试工作中,测试工作 ...
- 201621123031 《Java程序设计》第6周学习总结
作业06-接口.内部类 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多 ...
- C++智能指针(auro_ptr...)
写的很好,忍不住转了: 博文原址:http://blog.csdn.net/xt_xiaotian/article/details/5714477 一.简介 由于 C++ 语言没有自动内存回收机制,程 ...
- java关于for循环。
众所周知,JAVA中for循环的基本格式为: for(初始化表达式:布尔表达式:循环后更新表达式){循环体} 举个例子来说可以写成 (1)for (int x=1;x<10;x++){ Syst ...
- 安装CentOS7,连接mysql提示密码错误
1.grep 'temporary password' /var/log/mysqld.log 如果上面命令没有查看到密码 2.修改my.cnf文件.在mysqld下加入skip-grant-tabl ...
- Win10下, TortoiseGit安装及配合Gitee使用完整版
Windows10下, TortoiseGit的安装及使用, 并配合Gitee码云使用! 1) 安装TortoiseGit 官网, 32位, 64位, 自选 https://tortoisegit.o ...
- Python内置函数(24)——set
英文文档: class set([iterable]) Return a new set object, optionally with elements taken from iterable. s ...