记录版本
安装
# 安装spring核心包
go get -u github.com/go-spring/spring-core@v1.1.0-rc2
# 安装web starter
# gin
go get -u github.com/go-spring/starter-gin@v1.1.0-rc2
# echo
go get -u github.com/go-spring/starter-echo@v1.1.0-rc2
# 安装gorm starter
go get -u github.com/go-spring/starter-gorm@v1.1.0-rc2
# 安装gorm
go get -u github.com/jinzhu/gorm
# 安装 redis starter
# go-redis
go get -u github.com/go-spring/starter-go-redis@v1.1.0-rc2
# redigo
go get -u github.com/go-spring-starter-redigo@v1.1.0-rc2
Web 应用集成starter-gorm
1.配置文件config/application.yml
# gorm starter mysql 默认配置项, 同spring.datasource
db:
url: root:password@tcp(host:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
2.main.go
// code
package main
import (
"github.com/go-spring/spring-core/gs"
"github.com/go-spring/spring-core/web"
_ "github.com/go-spring/starter-gin"
// 需要引入该模块自动装载默认的gorm, 若无需使用自动装载可自定义gorm bean
_ "github.com/go-spring/starter-gorm/mysql"
"github.com/jinzhu/gorm"
"log"
)
// 定义model
/**
建表sql
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1460907264817729538 DEFAULT CHARSET=utf8
数据sql
INSERT INTO `user` VALUES(1, "dragons", 24, "521274311@qq.com")
*/
type user struct {
// 主键ID
Id int64 `json:"id" gorm:"primary_key"`
Username string `json:"username"`
Age int `json:"age"`
Email string `json:"email"`
}
// TableName 获取表名方法, 默认复数表名, 这里表名与model名称相同需要实现Tabler接口
func (u *user) TableName() string {
return "user"
}
// 定义控制器
type gormController struct {
// 自动注入starter启动的*gorm.DB
db *gorm.DB `autowire:"?"`
}
// 定义查询所有用户的端点方法
func (c *gormController) selectUsers(ctx web.Context) {
var users []user
// 查询所有用户信息
c.db.Model(&user{}).Find(&users)
// 返回所有用户信息
ctx.JSON(&users)
}
func init() {
// 创建 gormController 控制器bean实例, 并在控制器实例创建后添加初始化方法
// 访问http://127.0.0.1:8080/users 将看到返回[{"id": 1, "username", "dragons", "age": 24, "email": "521274311@qq.com"}]
gs.Object(new(gormController)).Init(func(c *gormController) {
// 添加Web端点/users, 绑定gormController.selectUsers方法
gs.GetMapping("/users", c.selectUsers)
})
}
func main() {
log.Fatal(gs.Run())
}
Web 应用集成gorm多数据源
1.config/application.yml
# 这里自定义了一个配置项 dbs (可自行更改) 来配置多数据源, 其中name为bean名称, type为数据库类型(与gorm数据库类型名称一致)
dbs:
- name: gorm-db1
url: root:password@tcp(host:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
type: mysql
- name: gorm-db2
url: root:password@tcp(host:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
type: mysql
2.创建一个dbs.go文件用来单独注入*gorm.DB实例
package main
import (
"github.com/go-spring/spring-core/gs"
"github.com/jinzhu/gorm"
"github.com/labstack/gommon/log"
// 需要引入Mysql驱动
_ "github.com/jinzhu/gorm/dialects/mysql"
)
// 定义配置struct, 属性与配置文件相同
type DBConfig struct {
Name string `value:"${name}"`
Url string `value:"${url}"`
Type string `value:"${type}"`
}
func init() {
// 创建一个配置监听器, 当配置加载后将执行该方法
gs.OnProperty("dbs", func(config []DBConfig) {
// 遍历配置项
for _, dbConfig := range config {
db, err := CreateDB(dbConfig)
if err != nil {
log.Fatal(err)
}
// 将*gorm.DB注入Spring bean中
gs.Object(db).Destroy(CloseDB).Name(dbConfig.Name)
}
})
}
func CreateDB(config DBConfig) (*gorm.DB, error) {
return gorm.Open(config.Type, config.Url)
}
func CloseDB(db *gorm.DB) {
log.Info("close gorm mysql")
if err := db.Close(); err != nil {
log.Error(err)
}
}
3.main.go
package main
import (
"github.com/go-spring/spring-core/gs"
"github.com/go-spring/spring-core/web"
_ "github.com/go-spring/starter-gin"
"github.com/jinzhu/gorm"
"log"
)
// 定义model
/**
建表sql
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1460907264817729538 DEFAULT CHARSET=utf8
数据sql
INSERT INTO `user` VALUES(1, "dragons", 24, "521274311@qq.com")
*/
type user struct {
// 主键ID
Id int64 `json:"id" gorm:"primary_key"`
Username string `json:"username"`
Age int `json:"age"`
Email string `json:"email"`
}
// TableName 获取表名方法, 默认复数表名, 这里表名与model名称相同需要实现Tabler接口
func (u *user) TableName() string {
return "user"
}
// 定义控制器
type gormController struct {
// 注入指定bean名称为gorm-db1的实例
/*
v1.1.0移除getBean方法, 属性注入阶段后不保留研数据, 若需多项db切换则需要提前注入多项db的bean,自行实现切换逻, 示例如下:
type StructName struct {
db1 *gorm.DB `autowire:"gorm-db1"`
db2 *gorm.DB `autowire:"gorm-db2"`
}
*/
db *gorm.DB `autowire:"gorm-db1"`
}
// 定义查询所有用户的端点方法
func (c *gormController) selectUsers(ctx web.Context) {
var users []user
// 查询所有用户信息
c.db.Model(&user{}).Find(&users)
// 返回所有用户信息
ctx.JSON(&users)
}
func init() {
// 创建 gormController 控制器bean实例, 并在控制器实例创建后添加初始化方法
// 访问http://127.0.0.1:8080/users 将看到返回[{"id": 1, "username", "dragons", "age": 24, "email": "521274311@qq.com"}]
gs.Object(new(gormController)).Init(func(c *gormController) {
// 添加Web端点/users, 绑定gormController.selectUsers方法
gs.GetMapping("/users", c.selectUsers)
})
}
func main() {
log.Fatal(gs.Run())
}
Web 应用集成starter-go-redis/starter-redigo
1.config/application.yml
# redis starter 配置项
redis:
host: host
port: 6379
password: password
database: 0
2.main.go
package main
import (
"github.com/go-spring/spring-core/gs"
"github.com/go-spring/spring-core/redis"
"github.com/go-spring/spring-core/web"
_ "github.com/go-spring/starter-gin"
"log"
// 引入go-redis starter依赖
_ "github.com/go-spring/starter-go-redis"
// 引入redigo starter依赖
// _ "github.com/go-spring/starter-redigo"
)
// 定义 redisController 控制器
type redisController struct {
// 注入redis.Client bean, 注意redis为github.com/go-spring/spring-core/redis
redisClient redis.Client `autowire:"?"`
}
// redis get 方法
func (c *redisController) get(ctx web.Context) {
// 获取入参的key
key := ctx.QueryParam("key")
// redis get [key] 获取value
value, err := c.redisClient.Get(ctx.Context(), key)
if err != nil {
ctx.JSON(web.ERROR.Error(err))
} else {
ctx.JSON(web.SUCCESS.Data(value))
}
}
func init() {
gs.Object(new(redisController)).Init(func(c *redisController) {
gs.GetMapping("/redis/get", c.get)
})
}
func main() {
log.Fatal(gs.Run())
}