关于 Beego 框架,这里不再赘述。beego官方网站

一、什么是orm,为什么要用orm?

orm (Object-relational mapping),中文翻译为对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

在程序开发中,数据库保存的表,字段与程序中的实体类之间是没有关联的,在实现持久化时就比较不方便。因为利用go语言直接操作数据库需要编写SQL语句, 而SQL语句都是字符串, 所以没有提示, 所以容易出错。 以前,在企业开发中一般情况下都是在图形化界面工具中先写好SQL语句, 测试没有问题之后再拷贝到代码当中。针对解决这个问题, 如果使用ORM来操作数据库, 就可以摆脱SQL语句
话不多说,上代码:

二、项目展示

beego自动生成的包这里不再赘述。

首先要在main.go调用sysinit包的init函数,其中的initDB.go如下:

/*
* @Author: Hifun
* @Date: 2020/1/14 15:44*/
package sysinitimport ("github.com/astaxie/beego""github.com/astaxie/beego/logs""github.com/astaxie/beego/orm"  // 引入orm的包_ "github.com/go-sql-driver/mysql"   // 引入MySQL包
)func initDB() {// 连接名称 别名dbAlias := beego.AppConfig.String("db_alias")// 数据库名称dbName := beego.AppConfig.String("db_name")// 数据库连接用户名dbUser := beego.AppConfig.String("db_user")// 数据库连接密码dbPwd := beego.AppConfig.String("db_pwd")// 数据库IP(域名)dbHost := beego.AppConfig.String("db_host")// 数据库端口dbPort := beego.AppConfig.String("db_port")// 编码格式dbCharset := beego.AppConfig.String("db_charset")// 注册数据库orm.RegisterDataBase(dbAlias, "mysql", dbUser+":"+dbPwd+"@tcp("+dbHost+":"+dbPort+")/"+dbName+"?"+dbCharset, 30)// 如果是开发模式, 则显示命令信息isDev := (beego.AppConfig.String("runmode") == "dev")// 非强制模式下自动建表err := orm.RunSyncdb("default", false, isDev)if err != nil {logs.Informational("[orm] Create table err : ", err)}if isDev {orm.Debug = isDev}
}

有关定义都在 app.conf 中做了配置。

  • ORM 必须注册一个别名为 default 的数据库,作为默认使用。
    // 注册数据库  dbAlias = "default"orm.RegisterDataBase(dbAlias, "mysql", dbUser+":"+dbPwd+"@tcp("+dbHost+":"+dbPort+")/"+dbName+"?"+dbCharset, 30)
  • 通过配置 func RunSyncdb(name string, force bool, verbose bool) error
    实现beego中orm自动建表 更新表结构
  • 第二个参数 是否强制更新 当为 true的时候,会执行drop table后再建表 ,(每次启动项目会将原先的表和数据都删除);当为false的时候,只会更新 不会删除表数据 ,类似于update
    // 非强制模式下自动建表err := orm.RunSyncdb("default", false, isDev)

!在这里还要调用models包中的init函数,来注册model !

_ "testbeegopro/models"

引用的包前加下划线是只调用该包的init函数

    /*
* @Author: Hifun
* @Date: 2020/1/14 15:38*/
package modelsimport ("github.com/astaxie/beego/orm"
)func init() {// 注册modelsorm.RegisterModel(new(MenuModel))
}
  • 在这里注册model

model 的结构体定义

type MenuModel struct {Id     int Mid    int `orm:"pk;auto"` // 自增的值Parent intName   string `orm:"size(45)"`Seq    int    // 排序Format string `orm:"size(2048);default({})"` // json数组
}

以上,就可以在执行beego run的命令之后,连接数据库并且自动创建表了。此外还可以进行CRUD 操作:下面举一个简单的例子说明:

o := orm.NewOrm()
user := new(User)
user.Name = "Hifun"
fmt.Println(o.Insert(user))
user.Name = "Your"
fmt.Println(o.Update(user))
fmt.Println(o.Read(user))
fmt.Println(o.Delete(user))

操作起来比较方便,省去了sql语句的使用。大大的提高了开发效率。

后话

  • 其实,在开发过程中,我们一般都有一些约定俗成的缩写方式,比如 o 一般就用来代表orm,还有 c 一般用来表示 controller,m 一般用来表示 models。使用这样的缩写不仅能节省开发时间,还能在团队开发中更友好的让其他伙伴理解和认同。在Go语言中,我们一般使用驼峰命名法,方法的命名,我们一般认为小写字母开头的是 private方法,大写字母开头的则是 public 方法。
  • Go语言有着天然的处理高并发的优势,同样也有很多成熟的框架可以直接使用,支持传统的MVC开发模式,还有像orm这样强大&简洁的数据库操作功能。部署也很方便,不需要将环境部署到使用的地方。
  • 好了,这篇文章就说这么多。编程的魅力很大,让我们一起go!go!go!

——来自一个程序员小学生

Beego使用orm自动创建表结构(结构化目录--亲团队开发)相关推荐

  1. Hibernate3.x,hibernate3.x,Hibernate3.x整合Spring3.x不能实现自动创建表结构的解决办法:...

    一:今天遇到一个诡异的问题,就是关于hibernate3.x实现表结构自动创建,一般我们在用Struts2,Hibernate3.x,Spring3.x搭建框架,尤其在开发阶段都希望在启动Web容器时 ...

  2. Java自动切表_java_Mybatis自动创建表和更新表结构,最近有小伙伴问我mybatis有没有 - phpStudy...

    Mybatis自动创建表和更新表结构 最近有小伙伴问我mybatis有没有自动创建表结构的功能,因为他们之前一直使用hibernate用习惯了,理所当然的认为,在实体类上配置下注解或者写写映射文件,系 ...

  3. A.CTable开源框架Mybatis增强自动创建表/更新表结构/实现类似hibernate共通的增删改查-mybatis-enhance-actable

    mybatis-enhance-actable-1.3.1.RELEASE 项目已更新既支持传统Spring项目也支持Springboot项目,同时支持tk.mybatis能够支持更强大的CUDR(为 ...

  4. Hibernate 自动创建表

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1. 在 hibernate.cfg.xml 添加这句话,可以自动生成数据表 : <prope ...

  5. Hibernate自动创建表

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 一.通过Hibernate的ShemaExport来创建 1)实体类 package com.xiaomo. ...

  6. Hibrenate实现根据实体类自动创建表或添加字段

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 实现: 在配置hibernate的配置文件中将hbm2ddl.auto设置为update,如:Xml代码&l ...

  7. Hibernate连接mysql数据库并自动创建表

    天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...

  8. elastic-job没有自动创建表JOB_EXECUTION_LOG,JOB_STATUS_TRACE_LOG

    集成elastic-job没有自动创建表. 描述:集成elastic-job,但是并没有创建JOB_EXECUTION_LOG,JOB_STATUS_TRACE_LOG这两张表. 下面这篇文章是我遇到 ...

  9. C# ReportViewer 自动生成报告(自动创建 表 和文本框 )

    引言 在做一些应用程序时难免会涉及到报表的查看和office文件的导出,这里主要介绍 VS2010下 ReportViewer控件报表的使用.关于ReportViewer控件的一般性用途可查阅的资料已 ...

最新文章

  1. ABAP:DYNP_VALUES_READ读取屏幕字段值
  2. 2021年东港二中高考成绩查询,辽宁省东港二中2021届英语高考模拟试卷1(新课改原创2020版,供2021年课改省份考生使用)...
  3. SQL语句、PL/SQL语句、SQL*PLUS语句结束符号
  4. Ubuntu 16.04安装idea
  5. 标准RTSP 消息的错误代码
  6. highcharts 显示平均值数值_拼多多评价多久能显示,有什么出评价技巧吗?
  7. Nat Mach Intell | 江瑞课题组提出首个针对单细胞染色质开放性数据的细胞类型辨识神经网络模型EpiAnno...
  8. boot spring 解析csv_spring-boot-starter-thymeleaf 避坑指南
  9. C# 如何修改Form不能修改窗体大小
  10. powershell 发邮件
  11. python中布尔变量的值为_python 布尔操作实现代码 python是如何定义并使用变量的...
  12. [SCOI2016]背单词
  13. 【超图+CESIUM】【基础API使用示例】28、超图|CESIUM -【坐标转换】经纬度转世界坐标
  14. Java从入门到精通章节练习题——第三章
  15. HTML5/CSS3动画应用
  16. “数据类型不一致: 应为 NUMBER, 但却获得 BINARY”解决方法
  17. python和java可以一起学吗_python可以和java一起学吗
  18. 电子邮箱是什么,电子邮箱注册值得入手的邮箱都在这!
  19. 高等工程数学--求解非齐次线性微分方程组
  20. html和java开发哪个难,html5和java哪个难

热门文章

  1. 视频中的文字如何去除?
  2. 7-30 jmu-JavaPython-统计一段文字中的单词个数并按单词的字母顺序排序后输出 (25 分)
  3. (数据中心)-传统数据中心机房与微模块机房建设的比较
  4. 为什么电脑只有C盘,没有A/B盘?答案竟如此随意……
  5. 【Centos8】Centos8+使用MegaCLI查看硬件RAID情况
  6. SU插件情报局 | SDT_Enscape助手详解
  7. 软骨鱼新增SSL证书销售功能,一键开通证书官网,自购省钱,外销赚钱
  8. Chrome-headless用法_Sinno_Song_新浪博客
  9. 宣布放弃独家版权,音乐市场就没有“版权顽疾”了吗?
  10. 天翼云HBlock打造分布式混合云存储方案