1、背景描述

用beego的ORM框架对sqllite进行库操作。项目中配置表存放在sqlite数据中,这样就存对每个表需要进行增删改查的操作。若按照beego提供方式对每一张表去实现增删改查的操作,这样会有很多的重复代码。例如,插入记录代码中,每个插入操作中都有相似的一段代码。为了代码更加的简洁,需要对重复代码进行封装。

2、实现方式

2.1、公共实现部分

利用golang的语言特性,面向接口编程,对公共操作提取接口:

type Repo interface {

SubscribeUpdateChange(func()) error

SubscribeDeleteChange(func()) error

Update(obj interface{}) (err error)

Delete(obj interface{}) (err error)

}

实现接口的结构:

type BaseRepo struct {

funcsUpdate []func()

funcsDelete []func()

}

//parameter is slice ([]StructName) or ptr(&aObj)

func (r BaseRepo) Update(obj interface{}) (err error) {

defer func() { r.UpdateChanged(err) }()

o := orm.NewOrm()

ms := TransToSlice(obj)//利用反射把入参处理成切片,需要自己实现

for _, m := range ms {

val := reflect.ValueOf(m)

if val.Kind() == reflect.Ptr {

val = val.Elem()

}

id := val.FieldByName("Id").Int()

if id == 0 {

_, err = o.Insert(m)

} else {

_, err = o.Update(m)

}

if err != nil {

return err

}

}

return nil

}

2.2、应用部分

各个配置表依据自己的需求进行接口定义[golang中组合来复用子结构的方法]:

type XxxxRepo interface {

repo.Repo

GetRecord(userName, host string) (xxxx, error)

}

type xxxxRepo struct {

repo.BaseRepo

}

func NewXxxxRepo() XxxxRepo {

return &xxxxRepo{}

}

func (this *xxxxRepo)(userName, host string) (xxxx,error){

//..........

return xxx,nil

}

3、总结

公共代码的提取,减少重复代码【clean code】

golang面向接口编程,罗列接口代码更加清晰

repo层的思考

beego mysql按时间排序_beego的数据库操作优化相关推荐

  1. 数据库建表原则,SQL数据库建表前期优化,SQL数据库操作优化,数据库命名规范...

    2019独角兽企业重金招聘Python工程师标准>>> 关键字: 数据库建表原则 ·1. 原始单据与实体之间的关系 可以是一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关 ...

  2. mysql部门人员排序设计_MySQL数据库访问性能优化

    MYSQL应该是最流行的WEB后端数据库.大量应用于PHP,Ruby,Python,Java 等Web语言开发项目中,无论NOSQL发展多么快,都不影响大部分架构师选择MYSQL作为数据存储. MYS ...

  3. mysql 索引都有哪些_MySQL 数据库的优化,你知道有哪些?

    原标题:MySQL 数据库的优化,你知道有哪些? 来源 | sf.gg/a/1190000018631870 数据库优化一方面是找出系统的瓶颈,提高MySQL数据库的整体性能,而另一方面需要合理的结构 ...

  4. mysql insert 不需要日志_MySQL数据库性能优化(1)「转」

    1.MySQL概述 从本文开始我们将讨论建立在块存储方案之上的关系型数据库的性能优化方案和集群方案.关系型数据库的选型将以创业公司.互联网行业使用最广泛的MySQL数据为目标,但是MySQL的安装过程 ...

  5. mysql数据和性能平衡点_MySQL数据库性能优化(2)

    4.影响SQL性能的要素 MySQL数据库的性能不止受到性能参数和底层硬件条件的影响,在这两个条件一定的情况下,开发人员对SQL语句的优化能力更能影响MySQL数据库的性能.由于MySQL中不同数据库 ...

  6. 数据分片排序oracle,Oracle数据库的优化

    摘要 本文提出了一种优化Oracle数据库的方法.Oracle中SQL语句的执行过程可分为解析(Parse).执行(Execute)和提取结果(Fetch)三步,此方法就是通过对SQL语句在Oracl ...

  7. laravel mysql增删改查_Laravel框架数据库操作的增删改三种方式 阿星小栈

    Laravel提供了3种操作数据库方式:DB facade(原始方式).查询构造器和Eloquent ORM. 数据库的配置文件在config目录下的database.php里.打开这个文件,找到my ...

  8. MySql学习笔记(2)--数据库操作及数据管理

    2.数据库操作 操作数据库>操作数据库中的表>操作数据库中表的数据 mysql关键字区分大小写 2.1操作数据库 1.创建数据库 create database if not exists ...

  9. mysql在cmd命令下执行数据库操作

    2019独角兽企业重金招聘Python工程师标准>>> windows+r 运行cmd命令,执行以下操作! 当mysql 数据库文件相对于来说比较大的时候,这个时候你可能在正常环境下 ...

最新文章

  1. 免费教材丨第49期:数学基础课程----漫画线性代数、微积分超入门
  2. 笔记-中项案例题-2020年下-风险管理
  3. 实现一个vue的图片预览插件
  4. Java工具类--Map集合与Java对象相互转换
  5. 单实例单向rac搭建gg流
  6. 宝塔面板进行ssl配置,显示待域名确认
  7. 将数据转化成字符串时:用字符串的链接 还是 StringBuilder
  8. PHP probuf详细步骤_【转】protobuffer php使用
  9. HDFS进阶应用 配置 NFS 网关
  10. Spring Validation
  11. 猴子排序的期望复杂度推导(雾)
  12. 使用网络调试助手连接EMQ服务器
  13. 数学科普书籍介绍(一)
  14. 关于打造超级产品,初创型企业如何找到巨头的“阿喀琉斯之踵”?
  15. TCP协议格式和特点
  16. 【E类】Linux视频课程集
  17. android wear 微信支付,智能手表不是鸡肋 Pacewear能刷微信支付宝结账
  18. 从反脆弱角度谈技术系统的高可用性
  19. Win10 内置 OpenSSH 使用密钥连不上的问题解决
  20. 有关系统DLL文件大全

热门文章

  1. 高通Android平台下关于display部分的几个关键问题
  2. Mom and Dad
  3. ORACLE1.13-综合例子应用01
  4. nodejs服务器部署教程一
  5. [bzoj1027][JSOI2007]合金
  6. uestc oj 1218 Pick The Sticks (01背包变形)
  7. MAC OS 如何安装命令行工具:Command Line Tools
  8. Flex 4命名空间
  9. SQLServer查询所有表所有字段包含xx的信息
  10. JavaScript开发工具--Aptana