golang实战使用gin+xorm搭建go语言web框架restgo详解6.1 模型M和Orm

熟悉javassm框架的应该清楚,和数据库操作相关的有entitydao、以及service,entity将数据库表结构和java对象关联起来,dao专门用来处理对数据库的基本操作,service层封装了具体的业务逻辑。他们结构清晰,作用明确。我们借鉴java框架,可以将entitydaoservice封装到一层,这一层,我们称之为模型层。

另一方面,对于数据库处理方面,我们希望用一个对象或者结构体完成对某一个表的操作,我们不愿意关注表的具体名字或者表内字段命名等细节;我们也不愿意去拼接很多sql语句,我们更不愿意将数据库操作返回的数组和字段进行mapper映射,我们希望这一切,用一个框架可以自动处理好。ORM框架正是我们需要的,模型层和ORM切切相关。

目前我们golang里面的ORM框架有很多,xormgorm,以及beegoorm,本文以xorm为例集成ORM框架。

6.1 使用xorm

本文对XORM入门信息不做详细阐述,详细知识请查阅xorm文档

https://www.kancloud.cn/kancloud/xorm-manual-zh-cn/56013

#go get github.com/go-xorm/xorm

典型的xorm使用方式如下

import (
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
)

var engine *xorm.Engine

func main() {
   var err error
   engine, err = xorm.NewEngine("mysql", "root:123@/test?charset=utf8")
}

为了支持多数据库引擎,我们需要对配置文件进行配置

#默认数据资源配置,数据库驱动类型为mysql,详情可以参开xorm
restgo.datasource.default.driveName=mysql
#连接串
restgo.datasource.default.dataSourceName=root:root@/restgo?charset=utf8
#连接池中idle态链接最大个个数
restgo.datasource.default.maxIdle=10
#连接池最大打开连接数
restgo.datasource.default.maxOpen=5
#是否显示sql语句
restgo.datasource.default.showSql=true

#支持配置多个数据库
restgo.datasource.ds1.driveName=mysql
#连接串
restgo.datasource.ds1.dataSourceName=root:root@/restgo2?charset=utf8
#连接池中idle态链接最大个个数
restgo.datasource.ds1.maxIdle=10
#连接池最大打开连接数
restgo.datasource.ds1.maxOpen=5
#是否显示sql语句
restgo.datasource.ds1.showSql=true

在使用数据源ds1,我们通过如下方式调用

func (service *UserService)FindOne(userId int64)(entity.User){
   var user entity.User
   orm := restgo.OrmEngin("ds1")
   orm.Id(userId).Get(&user)
   return  user
}

当我们使用默认数据源时,我们通过如下方式调用

func (service *UserService)FindOne(userId int64)(entity.User){
   var user entity.User
   orm := restgo.OrmEngin()
   orm.Id(userId).Get(&user)
   return  user
}

6.2 实体entity

在entity目录下新建User.go 文件

package entity

import "time"

type User struct {
   ID int64 `xorm:"pk autoincr 'id'" json:"id"`
   CreateAt time.Time `xorm:"created" json:"create_at"  time_format:"2006-01-02 15:04:05"`
   Stat int `json:"stat"`
   UserName string `xorm:"varchar(40)" json:"user_name"`
   Passwd string `xorm:"varchar(40)" json:"-"`
   NickName string `xorm:"varchar(40)" json:"nick_name"`
   Avatar string `xorm:"varchar(180)" json:"avatar"`
}

具体细节请查阅xorm文档

https://www.kancloud.cn/kancloud/xorm-manual-zh-cn/56013

6.3 实现service

service目录中创建UserService.go文件其中内容如下所示

package service

import (
   "restgo/entity"
   "restgo/restgo"
)

type UserService struct {}
//根据userId 获取用户编号
func (service *UserService)FindOne(userId int64)(entity.User){
   var user entity.User
   orm := restgo.OrmEngin("ds1")
   orm.Id(userId).Get(&user)
   return  user
}

上述定义了根据ID获取用户信息的服务

本文源代码源代码获取地址 https://github.com/winlion/restgo

待提供源代码清单

10.1 restgo后台管理框架

https://github.com/winlion/restgo-admin

10.天天任务清单小程序

https://github.com/winlion/dailytask

10.工业大数据采集

10.restgo cms 

10.restgo 千人大群


golang实战使用gin+xorm搭建go语言web框架restgo详解1.1 go语言的困境

golang实战使用gin+xorm搭建go语言web框架restgo详解1.2 我要做什么

golang实战使用gin+xorm搭建go语言web框架restgo详解2 框架基本架构

golang实战使用gin+xorm搭建go语言web框架restgo详解3 系统常用配置参数

golang实战使用gin+xorm搭建go语言web框架restgo详解4 路由配置

golang实战使用gin+xorm搭建go语言web框架restgo详解5 控制器C

golang实战使用gin+xorm搭建go语言web框架restgo详解5.2 跳转和重定向

golang实战使用gin+xorm搭建go语言web框架restgo详解5.3 资源控制器

golang实战使用gin+xorm搭建go语言web框架restgo详解5.4 控制器参数绑定

golang实战使用gin+xorm搭建go语言web框架restgo详解5.5 控制器模型绑定

golang实战使用gin+xorm 搭建 go语言web框架restgo搭建详解5.6 控制器参数校验

Golang go语言整合gin+xorm 搭建 web框架restgo搭建详解5.7 控制器数据响应

golang实战使用gin+xorm搭建go语言web框架restgo详解5.9 控制器controller编程

golang实战使用gin+xorm搭建go语言web框架restgo详解6.1 模型M和Orm

golang实战使用gin+xorm搭建go语言web框架restgo详解6.4 推荐编程方式

golang实战使用gin+xorm搭建go语言web框架restgo详解7 视图层V

golang实战使用gin+xorm搭建go语言web框架restgo详解8 关于模板

golang实战使用gin+xorm搭建go语言web框架restgo详解9 session、日志、鉴权


作者简介:胡文林,持续创业者,长期从事技术开源工作。微信号jiepool-winlion



猜你喜欢

转载自blog.csdn.net/keytounix/article/details/79336630