数据操作和Orm

未匹配的标注

生成Orm文件

gorm提供的操作太过原始,如果作为业务主力数据库组件,开发效率基本是不可接受的;所以还需再封装变得更加简便。使用laravel用了好多年,所以根据laravel的风格重新封装了一层数据库操作。

config/database.yaml 下配置可以使用的数据库后,执行命令

toolset make:orm

这个工具的命令都是不关联框架的,你可以使用再任意go项目里,你只要查看帮助 toolset make:orm -h 命令,根据需要传参即可。

生成好的文件位于 app/entity/your_name , 假设我有一个表,数据库配置名称为mysql

sql 表结构

CREATE TABLE `admin_menu` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `parent_id` int(11) NOT NULL DEFAULT 0 COMMENT '父级',
  `order` int(11) NOT NULL DEFAULT 0 COMMENT '排序',
  `name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '组件名称',
  `component` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '组件',
  `path` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地址',
  `redirect` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `meta` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`meta`)),
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=627 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

新增

mysql.NewOrmAdminMenu().Insert(&mysql.AdminMenu{
    Id:       0,
    ParentId: 0,
})
mysql.NewOrmAdminMenu().Create(&map[string]interface{}{
    "Id": 0,
})

删除

mysql.NewOrmAdminMenu().WhereId(1).Delete()

更新

mysql.NewOrmAdminMenu().WhereId(1).Update("parent_id", 0)
mysql.NewOrmAdminMenu().WhereId(1).Updates(&mysql.AdminMenu{
    ParentId: 0,
})

查询

一条查询,orm对所有字段都加了辅助Where{FieldName}

row := mysql.NewOrmAdminMenu().WhereId(1).First()

列表查询, orm还对索引 时间类型的字段,添加了更方便的查询条件

list := mysql.NewOrmAdminMenu().WhereIdGt(1).Limit(100).Get()
row := mysql.NewOrmAdminMenu().WhereCreatedAtBetween(database.Now(), database.Now().Add(time.Second * 30))).Get()

一条查询

row := mysql.NewOrmAdminMenu().WhereId(1).Get()

查询结果辅助

orm Get的查询结果是一个数组,但是这个数组除了直接循环,还可以更加友好的操作

row := mysql.NewOrmAdminMenu().Get()
idToData := row.GetIdMap()
ids := row.GetIdList()

连表

如果你是laravel 开发者,对于laravel的连表查询肯定很熟悉,因为太方便了。

orm生成连表需要一个额外的配置, 让工具知道如何生成代码

TODO

项目地址 通用工具

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~