012-Go ORM框架之Gorm测试
1:参考:https://github.com/jinzhu/gorm
2:数据库脚本(pg)
--
create table posts(
id serial primary key,
content text,
author varchar(100),
create_time timestamptz
); create table comments(
id serial primary key,
content text,
author varchar(100),
post_id int references posts(id),
create_time timestamptz
);
3:posts.go
package posts import(
"fmt"
"github.com/jinzhu/gorm"
_"github.com/lib/pq"
"time"
) type Comment struct{
ID int
Content string `sql:"not null"`
Author string `sql:"not null"`
PostId int `sql:"post_id"`
CreateTime time.Time `sql:"create_time"`
} type Post struct{
ID int
Content string `sql:"not null"`
Author string `sql:"not null"`
CreateTime time.Time `sql:"create_time"`
Comments []Comment
} const(
host = "192.168.72.128"
port = 5432
user = "test"
password = "test"
dbname = "testdb"
) var Db *gorm.DB func init(){
var err error psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+
"password=%s dbname=%s sslmode=disable",host, port, user, password, dbname) Db, err = gorm.Open("postgres", psqlInfo)
if err != nil{
panic(err)
} Db.AutoMigrate(&Post{}, &Comment{})
} func (post *Post) CreatePost() error{
return Db.Create(post).Error
} func (comment *Comment) CreateComment(post *Post) error{
return Db.Model(post).Association("Comments").Append(comment).Error
} func (post *Post) GetComments() (comments []Comment, err error){
Db.Where("author=$1", "王五").First(post)
err = Db.Model(&post).Related(&comments).Error
return
}
4:main.go
package main import(
"fmt"
"time"
"Chapter02/posts"
) func main(){
post := posts.Post{
Content:"Hello go!",
Author:"王五",
CreateTime: time.Now(),
} fmt.Println(post) err := post.CreatePost()
if err!=nil{
panic(err)
}
fmt.Println(post) comment := posts.Comment{
Content:"不错哟",
Author:"小二",
CreateTime: time.Now(),
}
err = comment.CreateComment(&post)
if err != nil{
panic(err)
} post = posts.Post{}
comments, err := post.GetComments()
if err != nil{
panic(err)
}
for _,p := range comments{
fmt.Printf("%s-%s\n", p.Author,p.Content)
}
}
012-Go ORM框架之Gorm测试的更多相关文章
- Go ORM框架 - GORM 踩坑指南
今天聊聊目前业界使用比较多的 ORM 框架:GORM.GORM 相关的文档原作者已经写得非常的详细,具体可以看这里,这一篇主要做一些 GORM 使用过程中关键功能的介绍,GORM 约定的一些配置信息说 ...
- ORM框架示例及查询测试,上首页修改版(11种框架)
继上次ORM之殇,我们需要什么样的ORM框架? 整理了11个ORM框架测试示例,通过示例代码和结果,能很容易了解各种框架的特性,优缺点,排名不分先后 EF PDF XCODE CRL NHiberna ...
- Golang 入门系列(十二)ORM框架gorm
之前在已经介绍了用的github.com/go-sql-driver/mysql 访问数据库,不太了解的可以看看之前的文章 https://www.cnblogs.com/zhangweizhong/ ...
- c# 国内外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver数据常规插入测试性能对比
c# 国内外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver数据常规插入测试性能对比对比 在6.22 号发布了 c# sqlsugar,his ...
- 轻量级ORM框架初探-Dapper与PetaPoco的基本使用
一.EntityFramework EF是传统的ORM框架,也是一个比较重量级的ORM框架.这里仍然使用EF的原因在于为了突出轻量级ORM框架的性能,所谓有对比才有更优的选择. 1.1 准备一张数据库 ...
- Android ORM 框架之 greenDAO 使用心得
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM ...
- 自己动手写ORM框架
提起ORM框架,大家都很熟悉,网上流行的ORM框架有很多,其中出名的有一些,不出名的更是数不胜数. 下面是自己实现的一个简单的ORM框架,实现了常用的增删查改功能,供大家研究ORM实现原理. 功能描述 ...
- 高性能ORM 框架之 MySqlSugar
mysql 3.X API地址: http://www.cnblogs.com/sunkaixuan/p/5987308.html MySqlSugar 1.5 API 一.介简 SqlSugar ...
- PetaPoco - 轻量级高性能的ORM框架(支持.NET Core)
我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db. 而且市面上的orm框架有很多,有重量级的Entity Framework,有 ...
随机推荐
- NSString 拼接字符串
NSString* string; // 结果字符串 NSString* string1, string2; //已存在的字符串,需要将string1和string2连接起来 //方法1. strin ...
- 解决xib布局方式支持ios6,ios7
xcode5 中的界面布局 根据sdk 分成ios7.0 and Later 和 ios6.1 and Earlier 两种,那如何xib同时支持 ios6 和ios7 的界面呢 方法如下: 在xco ...
- C#编程(六十七)----------LINQ提供程序
原文链接:http://blog.csdn.net/shanyongxu/article/details/47257511 LINQ提供程序 .NET3.5包含了几个LINQ提供程序. LINQ提供程 ...
- Swift - UITableView状态切换效果
Swift - UITableView状态切换效果 效果 源码 https://github.com/YouXianMing/Swift-Animations // // TableViewTapAn ...
- mysql 内存表
show variables like 'max_%'; max_heap_table_size 16777216 max_tmp_tables 32 show variables l ...
- 《C#本质论(第4版)》
<C#本质论(第4版)> 基本信息 作者: (美)Mark Michaelis Eric Lippert 译者: 周靖 出版社:人民邮电出版社 ISBN:9787115336750 ...
- gradle新建工程,多项目依赖,聚合工程
感谢gradle完全的文档.开始完全没想过新建项目会弄我一天时间,都说gradle构建项目简单,我现在回复他们呵呵. gradle是个非常复杂的工具,从他的完整包80M和72章官方文档就可以看出一二. ...
- Calendar获取当天的初始时间,当月的初始时间,当年的初始时间
如下:
- Android studio 编译失败Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts.b
Android studio 编译失败 Error:Could not read entry ':app:processDebugManifest' from cache taskArtifacts. ...
- jvm垃圾回收原理(转)
原文链接:jvm垃圾回收原理 在jvm中堆空间划分为三个代:年轻代(Young Generation).年老代(Old Generation)和永久代(Permanent Generation).年轻 ...