使用xorm工具,根据数据库自动生成 go 代码
使用xorm工具,根据数据库自动生成 go 代码
引入
使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型。因为 golang 的使用首字母控制可见范围,我们经常要设计 struct 字段名和数据库字段名的对应关系。久而久之,这是一个非常繁琐的过程。事情变得繁琐了,我们都会想,有没有好的办法自动生成 model 呢?今天,记录一种自动生成代码的方法 —— xorm 工具。
关于 xorm
xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。我在项目中经常使用,它的特性如下:
- 支持Struct和数据库表之间的灵活映射,并支持自动同步表结构
- 事务支持
- 支持原始SQL语句和ORM操作的混合执行
- 使用连写来简化调用
- 支持使用Id, In, Where, Limit, Join, Having, Table, Sql, Cols等函数和结构体等方式作为条件
- 支持级联加载Struct
- 支持LRU缓存(支持memory, memcache, leveldb, redis缓存Store) 和 Redis缓存
- 支持反转,即根据数据库自动生成xorm的结构体
- 支持事件
- 支持created, updated, deleted和version记录版本(即乐观锁)
想了解更多请移步:http://www.xorm.io/
xorm 工具
xorm 是一组数据库操作命令的工具,包含如下命令:
- reverse 反转一个数据库结构,生成代码
- shell 通用的数据库操作客户端,可对数据库结构和数据操作
- dump Dump数据库中所有结构和数据到标准输出
- source 从标注输入中执行SQL文件
- driver 列出所有支持的数据库驱动
那我们该如何使用 reverse 命令根据数据表结构生成 go 代码呢?
首先我们要下载该工具 :
go get github.com/go-xorm/cmd/xorm
同时需要安装对应的 driver :
go get github.com/go-sql-driver/mysql //MyMysql
go get github.com/ziutek/mymysql/godrv //MyMysql
go get github.com/lib/pq //Postgres
go get github.com/mattn/go-sqlite3 //SQLite
还需要下载 xorm :
go get github.com/go-xorm/xorm
编译 cmd/xorm
会生成 xorm 工具, 假如环境变量。
这时候,执行 xorm help reverse
能获取帮助信息如下:
usage: xorm reverse [-s] driverName datasourceName tmplPath [generatedPath] [tableFilterReg]
according database's tables and columns to generate codes for Go, C++ and etc.
-s Generated one go file for every table
driverName Database driver name, now supported four: mysql mymysql sqlite3 postgres
datasourceName Database connection uri, for detail infomation please visit driver's project page
tmplPath Template dir for generated. the default templates dir has provide 1 template
generatedPath This parameter is optional, if blank, the default value is model, then will
generated all codes in model dir
tableFilterReg Table name filter regexp
可以知道,执行参数 -s 表示为每张表创建一个单独文件。接下来的参数依次是:驱动,数据源,模板目录(在源码的 /cmd/xorm/templates/goxorm
可根据需求定制),生成目录,表格过滤条件。
接下来我们以 Mysql 为例介绍使用方法。
xorm reverse mysql name:password@(ip:port)/xxx?charset=utf8 /cmd/xorm/templates/goxorm
这里输出目录参数省略,会在当前目录建立一个 model
目录,该目录下就是自动生成的 go 代码,, 驼峰命名方式。具体内容如下:
package model
type TestModel struct {
Id int `json:"id" xorm:"not null pk autoincr INT(11)"`
VpsName string `json:"vps_name" xorm:"VARCHAR(30)"`
VpsIp string `json:"vps_ip" xorm:"CHAR(15)"`
VpsPrivateIp string `json:"vps_private_ip" xorm:"CHAR(50)"`
VpsCpu int `json:"vps_cpu" xorm:"INT(11)"`
VpsMem int `json:"vps_mem" xorm:"INT(11)"`
VpsDisk int `json:"vps_disk" xorm:"INT(11)"`
VpsStatus string `json:"vps_status" xorm:"VARCHAR(255)"`
LastHeartTime int `json:"last_heart_time" xorm:"INT(11)"`
CreateTime int `json:"create_time" xorm:"INT(11)"` LastTime int `json:"last_time" xorm:"INT(11)"`
}
到这里,就生成了我们想要的 model , 免去了手写的繁琐过程。
总结
照例总结一波,引用看到过一句话:
如果一个工具能让我节省 1s 的时间,我愿意花一天的时间去找或者开发这个工具!
使用xorm工具,根据数据库自动生成 go 代码的更多相关文章
- Golang xorm工具,根据数据库自动生成 go 代码
使用 golang 操作数据库的同学都会遇到一个问题 —— 根据数据表结构创建对应的 struct 模型.因为 golang 的使用首字母控制可见范围,我们经常要设计 struct 字段名和数据库字段 ...
- 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法
之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ...
- 使用mybatis-generator工具自动生成mybatis代码
使用mybatis-generator工具自动生成mybatis代码 步骤如下: 1.引入maven 依赖,在项目pom.xml文件中添加 <plugin> <groupId> ...
- Intellij IDEA 根据数据库自动生成pojo和hbm
新建一个项目,每次写hibernate部分,就觉得pojo和hbm.xml部分很蛋疼.今天搜索了半天,终于知道如何根据数据库自动生成了. Intellij IDEA14创建maven时并不能勾选各种支 ...
- (jdbc)取得数据库自动生成的主键方法
一些类,在前面的博客中有,就不重复了 public class Test2 { TestDAO t=new TestDAO(); /*前提是数据表的主键是自动增加的, *取得数据库自动生成的主键 * ...
- 使用T4为数据库自动生成实体类
T4 (Text Template Transformation Toolkit) 是一个基于模板的代码生成器.使用T4你可以通过写一些ASP.NET-like模板,来生成C#, T-SQL, XML ...
- javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- javaweb(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- javaweb基础(37)_mysql数据库自动生成主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
随机推荐
- Python面向对象编程(四)
1.多态 多态的概念虽然现在才说,但是我们一直在用.多态就是多种形态的意思,动物都猫,狗,猪等等,这些都是动物的多种形态. 反映在Python中,多态就意味着就算不知道变量所引用的对象类型是什么,也能 ...
- RxSwift 系列(二) -- Subject
前言 Subject是一个代理,它既是Observer,也是Observable.因为它是一个Observer,它可以订阅一个或多个Observable;因为它是一个Observable,它又可以被其 ...
- (转)java中/r与/n还有/r/n的区别
场景:在学习spring实战,以及工作中进行写文件时候,经常遇到java中的换行问题,发现有的书上的介绍和实际使用并不一致.现在才算是搞清楚! 通过文本对比,断言应该返回正确的结果!但是事与愿违,最终 ...
- (转)Spring boot——logback.xml 配置详解(四)<filter>
文章转载自:http://aub.iteye.com/blog/1101260,在此对作者的辛苦表示感谢! 1 filter的使用 <filter>: Logback的过滤器基于三值逻辑( ...
- Apache FtpServer 实现文件的上传和下载
1 下载需要的jar包 Ftp服务器实现文件的上传和下载,主要依赖jar包为: 2 搭建ftp服务器 参考Windows 上搭建Apache FtpServer,搭建ftp服务器 3 主要代码 在ec ...
- ML(2)--感知机
案例银行办信用卡--获得感知机 我们到银行办信用卡时,银行并不是直接就给你办卡的,而是会根据你的一些个人信息.消费信息.个人信誉等指标综合考虑后,才会决定是否给你办卡(不像现在银行办信用卡有点随意). ...
- Android保存图片到本地相册
好久没有写东西了.备份下知识吧.免得忘记了 . 首先贴一段代码 -- 这个是先生成一个本地的路径,将图片保存到这个文件中,然后扫描下sd卡.让系统相册重新加载下 .缺点就是只能保存到DCIM的文 件 ...
- Spring核心--IOC
先说说Spring框架 Spring框架 Spring框架的作用 Spring 的核心(IOC功能) SpringAOP功能 原有的业务流程:请求->servlet-->service-- ...
- NYOJ--水池数目
//NYOJ--水池数目 #include<iostream> #include<cstring> }; using namespace std; void dfs(int,i ...
- .NET Core 2.0 正式发布信息汇总
万众瞩目的.NET Core 2.0终于发布了,原定于9.19的dotnetconf大会的发布时间大大提前了1个月,.NET Core 2.0/.NET Standard 2.0的正式发布是.NET ...