zoukankan      html  css  js  c++  java
  • 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
    ", p.Author,p.Content)
    	}
    }
    

      

  • 相关阅读:
    python os一些相关操作
    查看linux系统占用的端口号
    asp.net 2.0
    winform oracle
    winform sql server 增删查改
    CPTW移仓程序Procedure
    创建一个类,实现只会实例化一次。
    javascript静态页面传值的三种方法,让你一次爽个够!
    点击链接或按钮使框架页面整体跳出到指定的页面
    javascript动态添加控件
  • 原文地址:https://www.cnblogs.com/yshyee/p/9147675.html
Copyright © 2011-2022 走看看