接上文,前边我们了解了关于基本代码生成以及schema 迁移的学习,下边我们看看基本的数据操作
参考代码: https://github.com/rongfengliang/ent-demo

环境准备

  • mysql 数据库

    使用docker-compose 运行

 
version: "3"
services:
  mysql:
    image: mysql:5.7.16
    ports:
      - 3306:3306
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: dalongrong
      MYSQL_DATABASE: gogs
      MYSQL_USER: gogs
      MYSQL_PASSWORD: dalongrong
      TZ: Asia/Shanghai
  • go mod 项目
go mod github.com/rongfengliang/ent-demo
  • 项目约定
    为了方便测试,使用多main 入口,同时使用makefile 进行管理
    项目结构
 
├── Makefile
├── README.md
├── build
│ ├── create
│ ├── migration
│ └── query
├── cmd
│ ├── create
│ │ └── main.go
│ ├── migration
│ │ └── main.go
│ └── query
│ └── main.go
├── docker-compose.yaml
├── ent
│ ├── client.go
│ ├── config.go
│ ├── context.go
│ ├── ent.go
│ ├── example_test.go
│ ├── migrate
│ │ ├── migrate.go
│ │ └── schema.go
│ ├── predicate
│ │ └── predicate.go
│ ├── schema
│ │ └── user.go
│ ├── tx.go
│ ├── user
│ │ ├── user.go
│ │ └── where.go
│ ├── user.go
│ ├── user_create.go
│ ├── user_delete.go
│ ├── user_query.go
│ └── user_update.go
├── go.mod
└── go.sum

说明
cmd 目录为操作,ent 为代码生成
Makefile

 
.PHONY : clean
all: clean cli
clean: 
 rm -rf build/*
cli:
 go build -o build ./cmd/...

常见数据处理

  • schmma 处理
    这个不是必须,如果项目已经运行过 ,可以不用运行 ,首次运行的话需要添加
 
go run cmd/migration/main.go 
  • 添加数据操作
    cmd/create/main.go
 
package main
import (
 "context"
 "fmt"
 "log"
 _ "github.com/go-sql-driver/mysql"
 "github.com/rongfengliang/ent-demo/ent"
)
func main() {
 client, err := ent.Open("mysql", "root:dalongrong@tcp(127.0.0.1)/gogs")
 if err != nil {
  log.Fatalf("failed opening connection to sqlite: %v", err)
 }
 defer client.Close()
 ctx := context.Background()
 createUser(ctx, client)
}
func createUser(ctx context.Context, client *ent.Client) (*ent.User, error) {
 u, err := client.User.
  Create().
  SetAge(30).
  SetName("a8m").
  Save(ctx)
 if err != nil {
  return nil, fmt.Errorf("failed creating user: %v", err)
 }
 log.Println("user was created: ", u)
 return u, nil
}

说明:
从上边可以看出,使用很简单

  • 运行效果
 
go run cmd/create/main.go
2019/10/14 13:53:20 user was created: User(id=5, age=30, name=a8m)
➜ first git:(master) ✗ 

数据查询处理

  • 查询代码
    cmd/query/main.go
 
package main
import (
 "context"
 "fmt"
 "log"
 _ "github.com/go-sql-driver/mysql"
 "github.com/rongfengliang/ent-demo/ent"
 "github.com/rongfengliang/ent-demo/ent/user"
)
func main() {
 client, err := ent.Open("mysql", "root:dalongrong@tcp(127.0.0.1)/gogs")
 if err != nil {
  log.Fatalf("failed opening connection to sqlite: %v", err)
 }
 defer client.Close()
 ctx := context.Background()
 queryUser(ctx, client)
}
func queryUser(ctx context.Context, client *ent.Client) (*ent.User, error) {
 u, err := client.User.
  Query().
  Where(user.ID(1)).
  // `Only` fails if no user found,
  // or more than 1 user returned.
  Only(ctx)
 if err != nil {
  return nil, fmt.Errorf("failed querying user: %v", err)
 }
 log.Println("user returned: ", u)
 return u, nil
}
  • 运行效果
go run cmd/query/main.go
2019/10/14 13:54:49 user returned: User(id=1, age=30, name=a8m)

说明

以上是一个简单的insert 以及查询处理,后边会介绍下关于图查询的处理,实际上ent 还包含了数据校验的处理

参考资料

https://entgo.io/docs/getting-started/
https://github.com/rongfengliang/ent-demo

ent 基本使用 二 简单create && query的更多相关文章

  1. 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)

    程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现) 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现) 程序员必知的8大排序(三)-------冒 ...

  2. Html学习笔记(二) 简单标签

    标签的重点 标签的用途 标签在浏览器中的默认样式 <body>标签: 在网页上显示的内容 <p>标签: 添加段落 <hx>标签: 添加标题 标签一共有6个,h1.h ...

  3. java web学习总结(二十二) -------------------简单模拟SpringMVC

    在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...

  4. JQuery(二)——简单动画效果

    上一篇博客总结了JQuery的一些基本知识,这篇博客重点从JQuery能够制造各种各样的网页效果方面来进行总结.总结一些常见的常用的基本效果的必备方法.从隐藏显示,淡入淡出,滑动,动画等几个方面来简单 ...

  5. LINQ to Sql系列二 简单查询和联接查询

    这一篇文章主要总结LINQ to sql的简单查询(单表查询)和联接查询(多表查询) 单表查询 需求是我们要输出TClass表中的结果.使用了from-in-select语句,代码如下: public ...

  6. C#设计模式之二简单工厂模式(过渡模式)

    一.引言 之所以写这个系列,是了为了自己更好的理解设计模式,也为新手提供一些帮助,我都是用最简单的.最生活化的实例来说明.在上一篇文章中讲解了单例模式,今天就给大家讲一个比较简单的模式--简单工厂模式 ...

  7. grpc使用记录(二)简单同步服务实例

    目录 1.编写proto文件,定义服务 2.编译proto文件,生成代码 3.编写服务端代码 server.cpp 代码 编译 4.编写客户端代码 client.cpp代码 5.简单测试一下 已经折腾 ...

  8. Salesforce LWC学习(二十二) 简单知识总结篇二

    本篇参看: https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.reactivity_fi ...

  9. Databend 源码阅读系列(二):Query server 启动,Session 管理及请求处理

    query 启动入口 Databend-query server 的启动入口在 databend/src/binaries/query/main.rs 下,在初始化配置之后,它会创建一个 Global ...

随机推荐

  1. Java 8——Lambda表达式

    本篇文章不介绍Lambda的前世今生,这里只对Lambda表达的应用做详细了解.以及与内部类的差异点. Lambda表达式 Lambda表达式是Java SE 8版本中引入的新的语法糖.将功能看做方法 ...

  2. Entity Framework 学习系列(2) - MySql Database First 开发方式

    目录 写在前面 环境 下载MySQL连接工具 创建Databse First 1.创建控制台 2.创建数据库 3.安装 MySQL.Data 和MySQL.Data.Entity 3.在项目中添加数据 ...

  3. 使用Supervisord软件管理go服务进程

    一.介绍Supervisord软件1.什么是Supervisord?Supervisord是一个非常优秀的进程管理工具,使用Python开发.它可以在类UNIX系统的方式让用户来准确地监视和控制后台一 ...

  4. tomcat8 url包含|等特殊字符报错400的问题

    这个问题纠缠了我很久了,终于在今天早上解决了,感谢自己的不放弃和不断尝试的决心,我坚信,我可以找到解决方式!! 项目用的spring .spring mvc.hibernate框架,关于统一错误页面在 ...

  5. windows下vmware和Hyper-v共存方法

    问题描述:环境:windows server 2012 r2系统下安装Hyper-v后,再安装Vmware 在Vmware中创建虚拟机,安装虚拟机系统的时候,vmware提示:VMware Works ...

  6. IDEA新建一个Spring Boot项目

    Maven构建项目模板 maven构建的是maven风格的纯净模板,要转变成spring boot项目需要自己添加依赖等配置. mvn archetype:generate: Maven插件原型是一个 ...

  7. 【转载】C#中ArrayList集合类使用RemoveAt方法移除指定索引的元素

    ArrayList集合是C#中的一个非泛型的集合类,是弱数据类型的集合类,可以使用ArrayList集合变量来存储集合元素信息,任何数据类型的变量都可加入到同一个ArrayList集合中,在Array ...

  8. PHP获取当前脚本的绝对路径方法

    一.dirname(__FILE__) 比如:a.php所在路径为/var/www/web/a.php dirname(__FILE__)返回的则是/var/www/web/ 二.__DIR__ a. ...

  9. ObjC: 源文件的组织

    转自:http://marshal.easymorse.com/tech/objc-%e6%ba%90%e6%96%87%e4%bb%b6%e7%9a%84%e7%bb%84%e7%bb%87 最简单 ...

  10. Cheat Engine 人造指针

    打开游戏 查看内存区域 查看游戏当前使用的内存区域 下面这一段是游戏当前使用的内存区域,选择一片可以读写的内存区域 跳转到这片内存 查看是否有空余内存可以使用 使用空闲内存 我们选择0075DFD0开 ...