首页 文章 精选 留言 我的

精选列表

搜索[orm框架],共10000篇文章
优秀的个人博客,低调大师

GO从入门到进阶教程系列 - 研发高性能ORM框架mysql管理多数据源篇

↵ 上一篇教程我们了解到了基础的GO语法,今天我们来学习如何使用GO开发一个通用的mysql管理器,下面就直接进入步骤环节,代码需要承接上一篇教程的,如有疑问请查看上一篇教程 技术版权归属 广州市金狮网络科技有限公司 (https://kingc.cn/) ,如需商用请联系公司 1. 编写一个多数据源实例的管理器对象,以及改造下之前的DBConfig对象 // 连接管理器 type RDBManager struct { OpenTx bool // 是否开启事务 DsName string // 数据源名称 Db *sql.DB // 非事务实例 Tx *sql.Tx // 事务实例 Errors []error // 操作过程中记录的错误 } // 数据库配置 type DBConfig struct { DsName string // 数据源名称 Host string // 地址IP Port int // 数据库端口 Database string // 数据库名称 Username string // 账号 Password string // 密码 } 2. 编写初始化多个数据源配置的方法,并改造下我们之前的NewMysql方法 // 初始化数据库实例 func NewMysql(conf DBConfig) (*sql.DB, error) { // 定义占位符字符串,使用配置值替换%s和%d link := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8", conf.Username, conf.Password, conf.Host, conf.Port, conf.Database) // 打开mysql获得实例对象 db, err := sql.Open("mysql", link) // 打开mysql失败,返回nil对象,以及返回err对象 if err != nil { return nil, errors.New("mysql初始化失败: " + err.Error()) } // 打开mysql成功返回db对象,err=nil return db, nil } var ( MASTER = "MASTER" // 默认主数据源 RDBs = map[string]*RDBManager{} // 初始化时加载数据源到集合 ) // 初始化多个数据库配置文件 func BuildByConfig(input ...DBConfig) { if len(input) == 0 { panic("数据源配置不能为空") } for _, v := range input { db, err := NewMysql(v) panic(err) if len(v.DsName) == 0 { v.DsName = MASTER } rdb := &RDBManager{ Db: db, DsName: v.DsName, } RDBs[v.DsName] = rdb } } 3. 编写获取数据源的方法,包含是否开启事务,数据源名称参数 // 获取数据源,并控制是否开启事务 func GetDB(openTx bool, ds ...string) (*RDBManager, error) { dsName := MASTER if len(ds) > 0 && len(ds[0]) > 0 { dsName = ds[0] } rt := RDBs[dsName] rdb := &RDBManager{ OpenTx: openTx, Db: rt.Db, DsName: rt.DsName, Errors: []error{}, } // 如设置事务,则初始化事务实例 if rdb.OpenTx { tx, err := rdb.Db.Begin() if err != nil { return nil, errors.New("开启事务失败:" + err.Error()) } rdb.Tx = tx } return rdb, nil } 4. 编写释放数据库资源,并提交事务的方法 // 释放资源并提交事务 func (self *RDBManager) Close() { if self.OpenTx { // 开启事务操作逻辑 if len(self.Errors) > 0 { // 如产生异常则回滚事务 self.Tx.Rollback() } else { self.Tx.Commit() // 如无异常则提交事务 } } } 5. 使用获取的数据源进行保存数据操作,我们改造下之前的CRUD方法 // 通过管理器开启事务保存数据 func (self *RDBManager) CRUD1() error { // 编写需要执行的sql createSql := "insert test_user(username, password, age, sex) values(?,?,?,?)" // 预编译sql,事务模式 stmt, err := self.Tx.Prepare(createSql) if err != nil { return errors.New("预编译失败: " + err.Error()) } // 提交编译sql对应参数 ret, err := stmt.Exec("zhangsan", "123456", 18, 1) if err != nil { return errors.New("提交数据失败: " + err.Error()) } // 保存成功后获取自增ID fmt.Println(ret.LastInsertId()) return nil } 6. 编写单元测试用例 // 单元测试 func TestCRUD1(t *testing.T) { // 数据源配置 conf := DBConfig{ DsName: "test", Host: "127.0.0.1", Port: 3306, Database: "test", Username: "root", Password: "123456", } // 初始化数据源 BuildByConfig(conf) // 获取test数据源 rdb, err := GetDB(true, "test") if err != nil { panic(err) } // 释放资源 defer rdb.Close() // 执行保存数据方法 if err := rdb.CRUD1(); err != nil { panic(err) } } 上面我们已经明白了自定义数据源管理器如何实现,通过示例演示操作,下一篇文章我会讲解如何封装对象转sql入库,敬请期待!

优秀的个人博客,低调大师

新一代国产 ORM 框架 sagacity-sqltoy-5.1.9 发版,统一授权传参和越权校验

开源地址: github:https://github.com/sagframe/sagacity-sqltoy gitee:https://gitee.com/sagacity/sagacity-sqltoy idea 插件(可直接在idea中检索安装):https://github.com/threefish/sqltoy-idea-plugins 更新内容 1、增加统一数据权限传参和越权检查,参照文档统一字段处理章节配置 2、兼容sql中参数名称含中文的特殊场景 3、@loop(:paramName,sql片段)支持类似:staffInfos[i].birthday 对象子属性模式,为应对极端场景提供策略 4、代替group_concat的link对应的id-column改为id-columns支持多列分组(依旧兼容id-column) qltoy的关键优势: //------------------了解 sqltoy的关键优势: -------------------------------------------------------------------------------------------*/ //1、最简最直观的sql编写方式(不仅仅是查询语句),采用条件参数前置处理规整法,让sql语句部分跟客户端保持高度一致 //2、sql中支持注释(规避了对hint特性的影响,知道hint吗?搜oracle hint),和动态更新加载,便于开发和后期维护整个过程的管理 //3、支持缓存翻译和反向缓存条件检索(通过缓存将名称匹配成精确的key),实现sql简化和性能大幅提升 //4、支持快速分页和分页优化功能,实现分页最高级别的优化,同时还考虑到了cte多个with as情况下的优化支持 //5、支持并行查询 //6、根本杜绝sql注入问题 //7、支持行列转换、分组汇总求平均、同比环比计算,在于用算法解决复杂sql,同时也解决了sql跨数据库问题 //8、支持保留字自动适配 //9、支持跨数据库函数自适配,从而非常有利于一套代码适应多种数据库便于产品化,比如oracle的nvl,当sql在mysql环境执行时自动替换为ifnull //10、支持分库分表 //11、提供了取top、取random记录、树形表结构构造和递归查询支持、updateFetch单次交互完成修改和查询等实用的功能 //12、sqltoy的update、save、saveAll、load 等crud操作规避了jpa的缺陷,参见update(entity,String...forceUpdateProps)和updateFetch //13、提供了极为人性化的条件处理:排它性条件、日期条件加减和提取月末月初处理等 //14、提供了查询结果日期、数字格式化、安全脱敏处理,让复杂的事情变得简单,大幅简化sql或结果的二次处理工作 //-----------------------------------------------------------------------------------*/ sqltoy特点介绍: sqltoy的核心构建思想 sqltoy的对比mybatis(plus)和fluent mybatis的核心点:查询语句编写、可阅读性、可维护性 对象化crud是基础,但sqltoy有针对性的改进:update、updateSaveFetch、updateFetch等 sqltoy的缓存翻译,大幅减少表关联简化sql,让你的查询性能成几何级提升 极致的分页,同样帮助你实现查询的性能大幅提升 快速分页:@fast() 实现先取单页数据然后再关联查询,极大提升速度 分页优化器:page-optimize 让分页查询由两次变成1.3~1.5次(用缓存实现相同查询条件的总记录数量在一定周期内无需重复查询 sqltoy的分页取总记录的过程不是简单的select count(1) from (原始sql);而是智能判断是否变成:select count(1) from 'from后语句', 并自动剔除最外层的order by sqltoy支持并行查询:parallel="true",同时查询总记录数和单页数据,大幅提升性能 便利的跨数据库统计计算:数据旋转 便利的跨数据库统计计算:无限极分组统计(含汇总求平均) 便利的跨数据库统计计算:同比环比

优秀的个人博客,低调大师

RedBeanPHP 5.4 beta 1 发布,PHP 的 ORM 映射框架

ReadBeanPHP 支持数据库包括:CUBRID,MySQL, Postgres, SQLite 无需配置。5.4 beta 1 版本已经发布: R::store( $beans,$unfreezeIfNecessary) R::storeAll( $beans,$unfreezeIfNecessary) R::findForUpdate( ) R::traverse(...,function( ,$depth){}) 允许 findLike(以及其他类似的)使用“isnull”条件 trash/trashAll 返回已删除 bean 的编号 修复Facade::removeToolBoxByKey移除工具箱 R::getRow()现在返回类型数组 R::setAllowFluidTransactions() R::diff( ) 的性能改进 修复缓存防止第二个 FOR-UPDATE SQL 查询 附加单元测试 改进源代码文档 详情发布说明: https://redbeanphp.com/index.php?p=/beta

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册