- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
golang利⽤模板⽣成数据库表对应的模型及操作函数
起因
很多年以前,当我第⼀次接触到ORM的时候,我就有⼀点疑惑:这玩意⽤起来倒是⽅便,就是模型结构得⼀个字段⼀个字段的写,⾮
常枯燥也⾮常累⼈,⽽且如果表结构修改了,⽐如增加、减少或者修改了⼀个字段,就得修改模型⽂件。那个时候也没有想到可以从数据库
中读取到⽬标表的表结构数据⾃动⽣成ORM需要的模型结构。直到有⼀天我看到⼀个根据模板⾃动⽣成ORM的模型⽂件的代码,然后我就
⽤golang也写了这么⼀个玩意。。
⽣成过程
准备⼯作
假设我在mysql中创建了⼀个名为dbnote的库,并且创建了⼀个名为msg的表,创建语句如下:
CREATE TABLE msg (
id int(11) NOT NULL AUTO_INCREMENT,
sender_id int(11) NOT NULL COMMENT 发送者,
receiver_id int(11) NOT NULL COMMENT 接收者,
content varchar(256) NOT NULL COMMENT 内容,
status tinyint(4) NOT NULL,
createtime timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
);
那么对应的ORM模型则是
type Msg struct {
ID int `db:id json:id` //
SenderID int `db:sender_id json:sender_id` // 发送者
ReceiverID int `db:receiver_id json:receiver_id` // 接收者
Content string `db:content json:content` // 内容
Status int8 `db:status json:status` //
Createtime *time.Time `db:createtime json:createtime` //
}
获取表结构信息
为了⽣成这个struct以及相关的增删改查代码,我需要先获得这个表的结果信息,以及编写对应的模板⽂件⽤于代码⽣成。
通过查询语句
SELECT table_name from tables where table_schema=dbnote
可以获取到这个库中所有的表名(当然,也可以增加过滤条件筛选 ⽬标表)。
⽤⽬标表的名称通过查询语句
SELECT COLUMN_NAME,DATA_TYPE,COLUMN_KEY,COLUMN_COMMENTfrom COLUMNS
where TABLE_NAME=msg and table_schema = dbnote
可以获取这个表的结构信息。
表结构的信息⽤这样⼀个struct存储
type TABLE_SCHEMA struct {
COLUMN_NAME string `db:COLUMN_NAME json:column_name`
DATA_TYPE string `db:DATA_TYPE json:data_type`
COLUMN_KEY string `db:COLUMN_KEY json:column_key`
COLUMN_COMMENT string `db:COLUMN_COMMENT json:COLUMN_COMMENT`
}
⽣成模型及操作函数需要的全部信息,则⽤这样⼀个struct存储
type ModelInfo struct {
BDName string
DBConnection string
TableName string
PackageName strin
您可能关注的文档
- 【遵纪守法八荣八耻】大学生“以遵纪守法为荣,以违纪乱法为耻”.pdf
- 人防工程安全技术交底.pdf
- 小学语文教师工作总结.pdf
- 数控插齿机调试作业指导书.pdf
- 免费课程C4D-陶瓷工艺品建模渲染.pdf
- 实验四32位LED显示和LED点阵显示实验.pdf
- 实验四用MATLAB实现线性系统的频域分析(已完成)8901.pdf
- 华北水利水电学院参考书目.pdf
- 分数应用题综合练习p1.pdf
- 十二大类标准对照G类管件.pdf
- 2022版高考英语一轮复习必修2Unit1Culturalrelics学案新人教版.pdf
- 2022年高考物理大一轮复习讲义:第8讲.pdf
- (人教版数学)初中9年级上册-同步练习-23.1图形的旋转-九年级数学人教版(上)(解析版).pdf
- 2022年高三3月摸底考试文综地理专题训练(江西省赣州市).pdf
- 220kV怡明智能变电站二次调试报告(out).pdf
- 2023年高考地理复习精题精练-人口(解析版).pdf
- 2022年高考数学大一轮复习第一部分专题四第1讲不等式的性质与证明专题训练.pdf
- 2022年高中生自我评价15篇.pdf
- 2016届396逻辑真题答案及详细解析【8-20题】.pdf
- 2020年小学一年级数学上学期期末考试试卷及答案.pdf
文档评论(0)