1. PostgreSQL的安装与使用
1.1 PostgreSQL安装
PostgreSQL的安装比较简单,之前没有使用过的小伙伴们请移步 PostgreSQL安装与使用教程
1.2 建库建表
创建数据库:
CREATE DATABASE test WITH OWNER = postgres;
创建student表:
CREATE TABLE IF NOT EXISTS public.student
(
id bigint NOT NULL DEFAULT nextval('t_student_id_seq'::regclass),
name text COLLATE pg_catalog."default" NOT NULL,
age integer NOT NULL,
CONSTRAINT t_student_pkey PRIMARY KEY (id)
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS public.t_student
OWNER to postgres;
注:这里可以省略表的创建,因为GORM会自动创建一个表名为实体同名复数形式的表
2. Go编写web server
2.1 添加相关依赖
gin 依赖安装:
go get -u github.com/gin-gonic/gin
GORM 库安装:
go get -u github.com/jinzhu/gorm
2.2 实体类
编写一个实体类student.go与数据的表对应
package entity
type Student struct {
Id int `gorm:"primary_key" json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
2.3 数据库连接
通过GORM连接postgreSQL,进行数据库的CURD操作
建立连接:
db, err := gorm.Open("postgres", "host=101.35.54.34 port=5432 user=postgres dbname=test password=root sslmode=disable")
注:如果不添加 sslmode=disable,会产生如下error:
pq: SSL is not enabled on the server
新增数据:
func AddStudent(student *entity.Student) {
db := ConnectDB()
db.Create(student)
defer db.Close()
}
查询数据:
func GetAll() (students []entity.Student) {
db := ConnectDB()
// 查询所有
db.Find(&students)
defer db.Close()
return students
}
完成dao.go 代码如下:
package dao
import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
"gorm_demo/entity"
"log"
)
func ConnectDB() (db *gorm.DB) {
db, err := gorm.Open("postgres", "host=127.0.0.1 port=5432 user=postgres dbname=test password=root sslmode=disable")
if err != nil {
log.Println("connect postgreSQL fail")
panic(err)
}
db.AutoMigrate(&entity.Student{})
return db
}
func GetAll() (students []entity.Student) {
db := ConnectDB()
// 查询所有
db.Find(&students)
defer db.Close()
return students
}
func AddStudent(student *entity.Student) {
db := ConnectDB()
db.Create(student)
defer db.Close()
}
2.3 定义Restful API
通过gin定义api, app.go完成代码如下:
package app
import (
"gorm_demo/dao"
"gorm_demo/entity"
"net/http"
)
import "github.com/gin-gonic/gin"
func App() {
engine := gin.Default()
api := engine.Group("/v1/test")
{
// 查询所有
api.GET("/", func(context *gin.Context) {
// 进行查询
students := dao.GetAll()
context.JSON(http.StatusOK, gin.H{
"data": students,
})
})
// 插入数据
api.POST("/add", func(context *gin.Context) {
student := entity.Student{Name: "阿盲", Age: 26}
dao.AddStudent(&student)
context.JSON(http.StatusOK, gin.H{
"msg": "success",
})
})
}
// 监听 9090端口
engine.Run(":9090")
}
2.4 程序入口
最后是我们程序入口main.go,直接调用APP()方法
package main
import "gorm_demo/app"
func main() {
app.App()
}
启动程序,监听9090端口
3. 接口测试
3.1 插入数据
GET http://localhost:9090/v1/test
使用Postman发起请求,由于具体的数据是在代码中写死插入,所以没有进行穿参,返回的结果与代码中的返回一致
3.2 查询数据
通过查询接口验证插入数据是否成功
POST http://localhost:9090/v1/test/add
查询出的与之前插入的数据一致,所以接口测试成功!