数据操作和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