使用 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记录版本(即乐观锁)

xorm 工具

xorm 是一组数据库操作命令的工具,包含如下命令:

  • reverse 反转一个数据库结构,生成代码
  • shell 通用的数据库操作客户端,可对数据库结构和数据操作
  • dump Dump数据库中所有结构和数据到标准输出
  • source 从标注输入中执行SQL文件
  • driver 列出所有支持的数据库驱动

那我们该如何使用 reverse 命令根据数据表结构生成 go 代码呢?

go get github.com/go-xorm/cmd/xorm
go get github.com/go-xorm/xorm

到GOPATH\src\github.com\go-xorm\cmd\xorm 目录下,执行

go build

这时在此目录了下生成xorm.exe文件

接下来开始执行

./xorm reverse mysql root:password@test?charset=utf8 templates/goxorm

接下来在当前目录models中生成以下文件:

Golang xorm工具,根据数据库自动生成 go 代码的更多相关文章

  1. 使用xorm工具,根据数据库自动生成 go 代码

    使用xorm工具,根据数据库自动生成 go 代码 引入 使用 golang 操作数据库的同学都会遇到一个问题 -- 根据数据表结构创建对应的 struct 模型.因为 golang 的使用首字母控制可 ...

  2. 懒人小工具:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法

    之前写了篇文章,懒人小工具:[自动生成Model,Insert,Select,Delete以及导出Excel的方法](http://www.jianshu.com/p/d5b11589174a),但是 ...

  3. 使用mybatis-generator工具自动生成mybatis代码

    使用mybatis-generator工具自动生成mybatis代码 步骤如下: 1.引入maven  依赖,在项目pom.xml文件中添加 <plugin> <groupId> ...

  4. Intellij IDEA 根据数据库自动生成pojo和hbm

    新建一个项目,每次写hibernate部分,就觉得pojo和hbm.xml部分很蛋疼.今天搜索了半天,终于知道如何根据数据库自动生成了. Intellij IDEA14创建maven时并不能勾选各种支 ...

  5. (jdbc)取得数据库自动生成的主键方法

    一些类,在前面的博客中有,就不重复了 public class Test2 { TestDAO t=new TestDAO(); /*前提是数据表的主键是自动增加的, *取得数据库自动生成的主键 * ...

  6. 使用T4为数据库自动生成实体类

    T4 (Text Template Transformation Toolkit) 是一个基于模板的代码生成器.使用T4你可以通过写一些ASP.NET-like模板,来生成C#, T-SQL, XML ...

  7. javaweb学习总结(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  8. javaweb(三十七)——获得MySQL数据库自动生成的主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

  9. javaweb基础(37)_mysql数据库自动生成主键

    测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...

随机推荐

  1. [Openwrt 项目开发笔记]:USB挂载& U盘启动(三)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一篇中,我结合Netgear Wndr370 ...

  2. web api 多版本控制重要的两个类

    1.版本路径替换 public class ReplaceVersionWithExactValueInPath : IDocumentFilter     {         public void ...

  3. EasyUI 让dialog中的treegrid的列头固定

    先上效果: 最主要是在treegrid要加上"fit:true "如果不加那么就会用diglog的滚动条,导致treegrid的头就没办法固定. Code<div id=&q ...

  4. oracle只导出触发器

    只要触发器,其他都不要 方法1:plsql develop调用exp:tools->export object—>trigger 方法2:select dbms_metadata.get_ ...

  5. C# 一些代码小结--使用文件记录日志

    C# 一些代码小结--使用文件记录日志 public class FaceLog { public static void AppendInfoLog(string errMsg) { try { s ...

  6. Mongoose也是个大坑

    http://blog.csdn.net/qq_31280709/article/details/53900290 折腾了两个小时,MLGB居然是因为mongoose查询集合的时候自动加s后缀!!!

  7. AOP面向切面的基石——动态代理(一)

    其实动态代理在Java里不是什么新技术了,早在java 1.2之后便通过 java.lang.reflect.InvocationHandler 加入了动态代理机制. 下面例子中,LancerEvol ...

  8. Spring 开发第一步

    经过今天上午的学习发现spring上手开发一个"hello world"真的非常简单. 开发环境搭建: 1.去spring官网下载spring-framework-3.2.11.R ...

  9. C语言 IPv6 十六进制 转 十进制

    #include <stdio.h> #include <string.h> #include <math.h> //ipv4地址转换 int ipv4_to_i( ...

  10. poj3070 Fibonacci(矩阵快速幂)

    矩阵快速幂基本应用. 对于矩阵乘法与递推式之间的关系: 如:在斐波那契数列之中 f[i] = 1*f[i-1]+1*f[i-2]  f[i-1] = 1*f[i-1] + 0*f[i-2].即 所以, ...