GORM Gen

基于 GORM 的安全 ORM
授权协议 MIT
开发语言 Google Go
所属分类 程序开发、 ORM/持久层框架
软件类型 开源软件
地区 国产
投 递 者 南宫才英
操作系统 未知
开源组织
适用人群 未知
 软件概览

GORM Gen 是基于 GORM 的更安全的 ORM ,对开发人员更友好。

概述

  • CRUD 或 DIY 查询方法代码生成
  • 自动从数据库迁移到代码
  • 事务、嵌套事务、保存点、回滚到保存点
  • 与 GORM 完全兼容
  • 对开发人员友好
  • 拥有多种生成模式

安装

安装 Gen 包先要安装 Go ,并设置 Go 工作区。

1.首先需要安装 Go( 版本 1.14+),然后使用下面的 Go 命令安装 Gen 。

go get -u gorm.io/gen

然后在代码中导入

import "gorm.io/gen"

快速开始

注意:本文档中的所有用例都是在 WithContext  模式下生成的。如果你在 WithContext   模式下生成代码,请在调用任何查询方法之前删除  WithContext(ctx),可以使代码更加简洁。

# assume the following code in generate.go file
$ cat generate.go
package main

import "gorm.io/gen"

// generate code
func main() {
    // specify the output directory (default: "./query")
    // ### if you want to query without context constrain, set mode gen.WithoutContext ###
    g := gen.NewGenerator(gen.Config{
        OutPath: "../dal/query",
        /* Mode: gen.WithoutContext|gen.WithDefaultQuery*/
        //if you want the nullable field generation property to be pointer type, set FieldNullable true
        /* FieldNullable: true,*/
        //if you want to generate index tags from database, set FieldWithIndexTag true
        /* FieldWithIndexTag: true,*/
        //if you want to generate type tags from database, set FieldWithTypeTag true
        /* FieldWithTypeTag: true,*/
        //if you need unit tests for query code, set WithUnitTest true
        /* WithUnitTest: true, */
    })
  
    // reuse the database connection in Project or create a connection here
    // if you want to use GenerateModel/GenerateModelAs, UseDB is necessray or it will panic
    // db, _ := gorm.Open(mysql.Open("root:@(127.0.0.1:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local"))
    g.UseDB(db)
  
    // apply basic crud api on structs or table models which is specified by table name with function
    // GenerateModel/GenerateModelAs. And generator will generate table models' code when calling Excute.
    g.ApplyBasic(model.User{}, g.GenerateModel("company"), g.GenerateModelAs("people", "Person", gen.FieldIgnore("address")))
    
    // apply diy interfaces on structs or table models
    g.ApplyInterface(func(method model.Method) {}, model.User{}, g.GenerateModel("company"))

    // execute the action of code generation
    g.Execute()
}

生成模式:

  • gen.WithoutContext 生成无 WithContext 约束的代码
  • gen.WithDefaultQuery  生成带有默认全局变量 Q 的单例代码

项目目录

以下是最佳实践模板:

demo
├── cmd
│   └── generate
│       └── generate.go # execute it will generate codes
├── dal
│   ├── dal.go # create connections with database server here
│   ├── model
│   │   ├── method.go # DIY method interfaces
│   │   └── model.go  # store struct which corresponding to the database table
│   └── query  # generated code's directory
|       ├── user.gen.go # generated code for user
│       └── gen.go # generated code
├── biz
│   └── query.go # call function in dal/gorm_generated.go and query databases
├── config
│   └── config.go # DSN for database server
├── generate.sh # a shell to execute cmd/generate
├── go.mod
├── go.sum
└── main.go

API 示例

// 生成一个模型结构映射到数据库
g.GenerateModel("people")

// 生成一个结构体并指定结构体的名称。
g.GenerateModelAs("people", "People")

// 添加忽略字段的选项
g.GenerateModel("people", gen.FieldIgnore("address"), gen.FieldType("id", "int64"))

字段生成选项

FieldNew          // 创建新字段
FieldIgnore       // 忽略字段
FieldIgnoreReg    // 忽略字段(匹配正则表达式)
FieldRename       // 重命名结构体中的字段
FieldType         // 指定字段类型
FieldTypeReg      // 指定字段类型(匹配正则表达式)
FieldTag          // 指定 gorm和 json 标签
FieldJSONTag      // 指定 json 标签
FieldGORMTag      // 指定 gorm 标签
FieldNewTag       // 附加新标签
FieldTrimPrefix   // 修剪列前缀
FieldTrimSuffix   // 修剪列后缀
FieldAddPrefix    // 添加前缀到结构成员的名称
FieldAddSuffix    // 为结构成员的名称添加后缀
FieldRelate       // 指定与其他表的关系
FieldRelateModel  // 指定与现有型的关系
  • gorm的gen是一个代码生成工具,可以根据数据库表结构自动生成对应的Go语言结构体和数据库操作代码。它可以大大减少手写代码的工作量,提高开发效率。 使用gorm的gen,需要先安装gen工具: go get github.com/infobloxopen/gen 然后,在项目根目录创建一个gen.yml配置文件,配置数据库连接信息和需要生成的表结构等信息,例如: schema: driver:

  • GORM GEN: 是安全&友好的go orm 框架,基于gorm,支持多种数据库,mysql、sqlserver、postgres以及clickhouse等,通过代码生成的方式,生成安全&友好的orm代码,同时也支持类似java mybatis的 动态sql代码生成。更多详细介绍和教程请移步gorm.io/gen,本文主要介绍如何给生成的model添加自定义方法和自定义表名。 1. 自定义方法

  • GORM/GEN GORM/GEN是一个 GORM 的增强工具,在 GORM 的基础上只做增强不做改变,为简化开发、提高效率而生。初期版本迭代较快,可以直接访问这里查看最新教程GORM/GEN 。 1. 安装 1.下载 go get -u gorm.io/gen 2.导包 import "gorm.io/gen" 2. 代码生成 package main import "gorm.io/ge

  • GEN 自动生成 GORM 模型结构体文件及使用示例 背景 GEN 是一个基于 GORM 的安全 ORM 框架, 由字节跳动无恒实验室与 GORM 作者联合研发,主要功能说白了就是帮助生成数据表对应的模型文件和更安全方便地执行SQL。 直接使用 GORM 与 GEN 工具的对比: 直接使用GORM 使用GEN 需手动创建与数据表各列一一对应的结构体 指定表名后自动读取并生成对应结构体 需手动实现具

  • gorm地址 1. 入门示例 在 GOPATH 下,创建目录 project → gormlearn → gormtest 文件夹。 在 gormlearn 下,执行 go work init。 在 gormtest 下,执行 go mod init test.com/gormtest。 在 gormlearn 下,执行 go work use ./gormtest。 在 gormtest 下,

  • 前置条件 首先安装oci8和oracle数据库客户端,之后配置好环境变量LD_LIBRARY_PATH 获取Gorm-Oracle驱动 go get github.com/CengSin/oracle 在文件加载的时候初始化数据库连接 package main import ( "GoModuleDemo/oracle/oci8/model" "encoding/json" "fmt"

  • GORM 的介绍与安装 简介 GORM 是 Go 语言中一款性能很好的 ORM 库,对开发人员也相对比较友好,能够显著提升开发效率。 GORM 有很多特性,常用的核心特性如下: 功能全。使用 ORM 操作数据库的接口,GORM 都有,可以满足开发中对数据库调用的各类需求。 支持钩子方法。这些钩子方法可以应用在 Create、Save、Update、Delete、Find 方法中。 支持 Auto

  • 引入 在处理MySQL库的时候,使用了"database/sql",这是一个比较原生的方式, 有没有更加方便的方式使用MySQL数据库了,目前开源界也有很多封装好的orm操作框架,帮我们简省一些重复的操作,提高代码可读性。 gorm 安装 在cmd中输入go get -u github.com/jinzhu/gorm 定义表 相比用SQL定义表,使用gorm就简单很多,它通过结构体来定义。 不过需

  • https://github.com/smallnest/gen 介绍 gen工具从给定的数据库生成golang结构,以便在.go文件中使用。它支持gorm标签并实现一些可用的方法。它还可以为这些结构生成RESTful api。 通过从数据库中读取有关列结构的详细信息,gen生成具有所需列名,数据类型和注释的go兼容结构类型。 生成的数据类型包括对可空列sql.NullX类型或guregu nul

  • package main import ( "github.com/ying32/govcl/vcl" "github.com/ying32/govcl/vcl/types" "io/ioutil" "os" "os/exec" "path/filepath" "strings" "text/template" ) const ( JavaEntityTplPath = "template/jav

  • // Copyright 2020 - 2021 The xgen Authors. All rights reserved. Use of this // source code is governed by a BSD-style license that can be found in the // LICENSE file. // // Package xgen written in pu

  • 文档API连接:https://grails-plugins.github.io/gorm-logical-delete/snapshot/index.html

 相关资料
  • 参见文档“10. Web”部分

  • 本文向大家介绍ASP.NET中基于soaphead的webservice安全机制,包括了ASP.NET中基于soaphead的webservice安全机制的使用技巧和注意事项,需要的朋友参考一下 使用soaphead方法可以在webservice的请求中增加头部信息,当有人调用我们的webservice时,可以通过查询这个请求的头部信息并验证来防止该软件以外的程序调用webservice 一、服务

  • 我有两个RESTendpoint: 我想只为提供登录,并直接访问。 当我在中使用以下模式时 我只在中得到登录提示,而在中没有得到,这是预期的。 但是当我使用下面的模式时,我得到了和的登录提示,这对我来说是非常意外的。 我已经知道我做错了什么,所以我想知道为什么我不能只登录和直接访问。 更新 @Nully这有一定的意义,但却打破了我对其他情况的理解。假设我使用这个模式: 只允许user=“java

  • 由于PHP语言在建立基于数据库驱动的动态网站所表现的高度灵活性,它已成为最流行的网站开发工具之一。它同时还可以与其它开源软件如MySql数据库和Apache服务器完美结合。但是,随着越来越多的网站使用PHP开发,它们也成为了恶意攻击者的目标,因此,开发者必须要做到应对攻击的准备。

  • 在 JAX-RS 应用程序中,必须根据已登录用户分配到的角色来筛选我的某些资源。我正在尝试使用安全注释(和)来实现此目的。 现在,每个人(匿名和登录用户)都可以并检索(每个id),但对于角色中的用户,我希望看到输出(此处序列化为JSON): 其他用户(无论是匿名用户还是非角色的其他用户)应该只看到: 我知道Jersey有实体过滤(以及基于安全角色进行过滤的实现)。 不幸的是,Liberty(基于A

  • 在Firestore中,我有一个拥有所有者的项目集合。 所有者可以是用户,应该允许用户读取其文档。 使用可以执行以下操作: 但是对于引用字段,在涉及安全规则时似乎没有任何文档。 我尝试了以下安全规则: 并如下所示进行查询: 但我仍然缺少或权限不足。

  •   随着近些年网络安全事情的频繁发生,使得用户对网络通信安全的意识越来越强。国内外的网络服务提供商都逐渐提供全站的安全通信服务,如国内的淘宝、百度先后宣布已经完成了全站部署https。微信现有的安全通信协议是基于用户登录的时候派发的SessionKey对应用数据进行加密的,该协议在工程实现上,已经过多次迭代优化,但是仍然有一些缺点: 原有的加密通信协议是存在于业务层的。加密保护的是请求包包体部分,

  • 下面简单脚本并行产生随机数 在使用单个线程时,上述脚本是确定性 然而,当使用多个线程时,它是部分随机,且包含线程之间的相关性(这可能是一个相当大的问题 我明白为什么我的代码不是线程安全的,但我不明白如何使它是线程安全的。是否可以不考虑线程的数量而具有确定性的输出? 目标是使产生与相同的输出(即线程数不会影响对象)。如果这不可能,则目标是产生与相同的输出。