model 指南
大约 4 分钟
前言
jzero 支持通过 desc/sql 文件夹下的 sql ddl 文件和远程数据源生成数据库代码到 internal/model 下.
为了在使用上更加方便, jzero 自动生成了 internal/model/model.go 文件, 用于注册所有生成的数据库代码.
当前支持 mysql 和 postgres 两种数据库类型, 其中:
- mysql: 同时支持 sql 文件和远程数据源两种方式生成代码
- postgres: 仅支持远程数据源生成代码
特性
- 支持多数据源生成代码
- 支持 redis/自定义缓存
- 动态适配多数据库类型(mysql/postgres/sqlite), 仅修改配置文件指定数据库 driver 即可动态切换不同的数据库, 无需修改任何代码
基于本地 sql ddl 文件生成代码
desc/sql
├── manage_email.sql
├── manage_menu.sql
├── manage_role.sql
├── manage_role_menu.sql
└── manage_user.sql
└── manage_user_role.sqlgen:
# mysql or postgres, 默认为 mysql
model-driver: mysql
# 是否生成带缓存的数据库代码
model-cache: true
# 缓存表, 默认为 *(所有)
model-cache-table:
- manage_user
# schema
model-schema: jzero-admin
# Ignore columns while creating or updating rows, 默认为 create_at,created_at,create_time,update_at,updated_at,update_time
model-ignore-columns: ["create_time", "update_time"]jzero gen生成的 internal/model/model.go 如下:
// Code generated by jzero. DO NOT EDIT.
package model
import (
"github.com/eddieowens/opts"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_email"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_menu"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_role"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_role_menu"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_user"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_user_role"
"github.com/jzero-io/jzero/core/stores/modelx"
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
type Model struct {
ManageEmail manage_email.ManageEmailModel
ManageMenu manage_menu.ManageMenuModel
ManageRole manage_role.ManageRoleModel
ManageRoleMenu manage_role_menu.ManageRoleMenuModel
ManageUser manage_user.ManageUserModel
ManageUserRole manage_user_role.ManageUserRoleModel
}
func NewModel(conn sqlx.SqlConn, op ...opts.Opt[modelx.ModelOpts]) Model {
return Model{
ManageEmail: manage_email.NewManageEmailModel(conn, op...),
ManageMenu: manage_menu.NewManageMenuModel(conn, op...),
ManageRole: manage_role.NewManageRoleModel(conn, op...),
ManageRoleMenu: manage_role_menu.NewManageRoleMenuModel(conn, op...),
ManageUser: manage_user.NewManageUserModel(conn, op...),
ManageUserRole: manage_user_role.NewManageUserRoleModel(conn, op...),
}
}jzero 支持多数据源, 通过在 sql 文件中指定 schema 即可
如新增 jzeroadmin_log.operate_log.sql 表
desc/sql
├── manage_email.sql
├── manage_menu.sql
├── manage_role.sql
├── manage_role_menu.sql
└── manage_user.sql
└── manage_user_role.sql
└── jzero-admin_log.operate_log.sqljzero gen生成的 internal/model/model.go 如下:
// Code generated by jzero. DO NOT EDIT.
package model
import (
"github.com/eddieowens/opts"
"github.com/jzero-io/jzero/core/stores/modelx"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/jzero-io/jzero-admin/server/internal/model/jzero-admin_log/operate_log"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_email"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_menu"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_role"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_role_menu"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_user"
"github.com/jzero-io/jzero-admin/server/internal/model/manage_user_role"
)
type JzeroAdminLogModel struct {
OperateLog operate_log.OperateLogModel
}
type Model struct {
ManageEmail manage_email.ManageEmailModel
ManageMenu manage_menu.ManageMenuModel
ManageRole manage_role.ManageRoleModel
ManageRoleMenu manage_role_menu.ManageRoleMenuModel
ManageUser manage_user.ManageUserModel
ManageUserRole manage_user_role.ManageUserRoleModel
}
func NewModel(conn sqlx.SqlConn, op ...opts.Opt[modelx.ModelOpts]) Model {
return Model{
ManageEmail: manage_email.NewManageEmailModel(conn, op...),
ManageMenu: manage_menu.NewManageMenuModel(conn, op...),
ManageRole: manage_role.NewManageRoleModel(conn, op...),
ManageRoleMenu: manage_role_menu.NewManageRoleMenuModel(conn, op...),
ManageUser: manage_user.NewManageUserModel(conn, op...),
ManageUserRole: manage_user_role.NewManageUserRoleModel(conn, op...),
}
}
func NewJzeroAdminLogModel(conn sqlx.SqlConn, op ...opts.Opt[modelx.ModelOpts]) JzeroAdminLogModel {
return JzeroAdminLogModel{
OperateLog: operate_log.NewOperateLogModel(conn, op...),
}
}基于远程数据源地址生成代码
mysql
gen:
model-driver: mysql
# 是否生成带缓存的数据库代码
model-cache: true
# 缓存表, 默认为 *(所有)
model-cache-table:
- manage_user
# 是否使用远程 mysql 数据源生成代码
model-datasource: true
# mysql 数据源配置
model-datasource-url: "root:123456@tcp(127.0.0.1:3306)/jzero-admin"
# Ignore columns while creating or updating rows, 默认为 create_at,created_at,create_time,update_at,updated_at,update_time
model-ignore-columns: ["create_time", "update_time"]
# 使用哪些 table, 默认为 *(所有)
model-datasource-table:
- manage_email
- manage_menu
- manage_role
- manage_role_menu
- manage_user
- manage_user_rolejzero gen生成的 internal/model/model.go 与 基于本地 sql ddl 文件 生成的代码一致
jzero 支持多数据源, 通过在 model-datasource-table 中指定 schema 即可
如新增 jzero-admin_log.operate_log 表
gen:
model-driver: mysql
# 是否生成带缓存的数据库代码
model-cache: true
# 缓存表, 默认为 *(所有)
model-cache-table:
- manage_user
# 是否使用远程 mysql 数据源生成代码
model-datasource: true
# mysql 数据源配置
model-datasource-url:
- "root:123456@tcp(127.0.0.1:3306)/jzero-admin"
- "root:123456@tcp(127.0.0.1:3306)/jzero-admin_log"
# Ignore columns while creating or updating rows, 默认为 create_at,created_at,create_time,update_at,updated_at,update_time
model-ignore-columns: ["create_time", "update_time"]
# 使用哪些 table, 默认为 *(所有)
model-datasource-table:
- manage_email
- manage_menu
- manage_role
- manage_role_menu
- manage_user
- manage_user_role
- jzero-admin_log.operate_logjzero gen生成的 internal/model/model.go 与 基于本地 sql ddl 文件 生成的代码一致
postgres
gen:
model-driver: pgx
# 是否生成带缓存的数据库代码
model-cache: true
# 缓存表, 默认为 *(所有)
model-cache-table:
- manage_user
# 是否使用远程 postgres 数据源生成代码
model-datasource: true
# postgres 数据源配置
model-datasource-url: "postgres://root:123456@127.0.0.1:5432/jzero-admin"
# Ignore columns while creating or updating rows, 默认为 create_at,created_at,create_time,update_at,updated_at,update_time
model-ignore-columns: ["create_time", "update_time"]
# 使用哪些 table, 默认为 *(所有)
model-datasource-table:
- manage_email
- manage_menu
- manage_role
- manage_role_menu
- manage_user
- manage_user_rolejzero gen生成的 internal/model/model.go 与 mysql driver 一致
jzero 支持多数据源, 通过在 model-datasource-table 中指定 schema 即可
如新增 jzeroadmin_log.operate_log 表
gen:
model-driver: postgres
# 是否生成带缓存的数据库代码
model-cache: true
# 缓存表, 默认为 *(所有)
model-cache-table:
- manage_user
# 是否使用远程 postgres 数据源生成代码
model-datasource: true
# postgres 数据源配置
model-datasource-url:
- "postgres://root:123456@127.0.0.1:5432/jzero-admin"
- "postgres://root:123456@127.0.0.1:5432/jzero-admin_log"
# Ignore columns while creating or updating rows, 默认为 create_at,created_at,create_time,update_at,updated_at,update_time
model-ignore-columns: ["create_time", "update_time"]
# 使用哪些 table, 默认为 *(所有)
model-datasource-table:
- manage_email
- manage_menu
- manage_role
- manage_role_menu
- manage_user
- manage_user_role
- jzero-admin_log.operate_logjzero gen生成的 internal/model/model.go 与 mysql driver 一致
默认生成如下方法
- WithTable: 指定表名, 用于分表场景
- Insert: 插入单条数据
- InsertV2: 插入单条数据(insert v2 版本, 可获取自增主键)
- BulkInsert: 批量插入数据
- Update: 根据主键更新单条数据
- Delete: 根据主键删除单条数据
- FindOne: 根据主键查询单条数据
- FindByCondition: 条件查询
- FindSelectedColumnsByCondition: 条件查询(指定查询字段)
- FindOneByCondition: 条件查询单条数据
- CountByCondition: 条件查询总数
- PageByCondition: 条件分页查询
- UpdateFieldsByCondition: 条件更新指定字段
- DeleteByCondition: 条件删除