比较 Go 中的 7 个最佳 ORM 包

对象关系映射器 (ORM) 是提供使用首选编程语言的数据类型和语法与 SQL 数据库交互的功能的工具。您可以使用 ORM 对数据库进行操作,而无需编写纯 SQL,因为典型的 ORM 提供了数据库抽象。

使用 ORM 代替使用内置数据类型的数据库有很多好处。例如,您可以将任何受支持的数据库与 ORM 一起使用,而无需对现有代码进行大量更改。此外,ORM 提高了开发人员的生产力并降低了开发成本。

Go 不是纯面向对象的语言,但使用 ORM 的体验类似于纯面向对象的语言,如 Python 和 C++。

Go 生态中有很多 ORM 包;大多数使用结构和接口的模式取决于他们的方法。

本文概述并比较了 Go 生态系统中的七个 ORM 包,为您的下一个项目提供有关最佳 ORM 的见解。

向前跳:

  • 高尔姆

  • SQLC:SQL 编译器

  • SQLX

  • 比戈

  • GORP

  • 火风暴

  • SQL锅炉

  • 比较 GO ORM 包

1. 高尔姆

GORM(Go-ORM)包是Go生态系统中最流行的ORM包。GORM 是一个对开发人员友好、功能丰富的 ORM,它构建在database/sql包之上,拥有您在 ORM 中需要的许多功能。

GORM 提供模式自动迁移、日志记录、上下文、准备好的语句、关联、约束、高级数据库操作(如分片)等功能。

GORM 包采用代码优先的方法,并使用结构作为与数据库交互的模型。该包还提供了在数据库上构建原始 SQL 查询以进行不受支持的操作的功能。


超过 20 万开发人员使用 LogRocket 来创造更好的数字体验了解更多 →


要使用 GORM 包并与数据库交互,您需要在工作区中安装数据库驱动程序和 GORM 包。GORM 为流行的 SQL 数据库(MySQL、SQLite、MSSQL、PostgreSQL)提供了一套数据库驱动程序,您可以使用自定义数据库驱动程序与您的数据库进行交互。

在工作目录的终端中运行此命令以安装 GORM 包。

去 -u gorm.io/gorm

GORM 包

jdao是一个轻量级的orm工具,通过简单配置或者连接数据库提供表名它便可以自动生成与数据库表一一对应的dao类,生成的dao类提供了与SQL无关的增删改查的功能。在复杂的查询SQL中,我建议编程人员自己编写高效的SQL,再通过jdao查询后返回封装好的QureyDao类,很方便的获取数据。在jdao底层,目前有spring的jdbcTemplate实现与我自己封装的jdaoHandlerImpl实现。jdao有支持事务,支持批量插入数据等特性。同时jdao底层数据库操作提供接口,编程人员可以自己实现。       如果你觉得hibernate,ibatis等orm框架过于笨重,不烦试下jdao,它可以在团队开发中规范团队持久层代码,较少开发量,特别在单表操作上基本是对象操作,对于复杂SQL查询也有较好的封装。一、使用DAO方式操作数据:查询SQL: select value,rowname from hstest where id between 2 and 10;jdao对象操作如下:Hstest t = new Hstest();t.where(Hstest.ID.BETWEEN(2, 10));t.query(Hstest.VALUE, Hstest.ROWNAME);插入SQL:  insert into hstest (id,rowname,value) values(1,"donnie","wuxiaodong")jdao对象操作如下:Hstest t = new Hstest();t.setId(1);t.setRowname("donnie");t.setValue("wuxiaodong");t.save();批量插入SQL:  insert into hstest (id,rowname,value) values(1,"donnie1","wuxiaodong1"),(2,"donnie2","wuxiaodong2"),(3,"donnie3","wuxiaodong3")jdao对象操作如下:Hstest t = new Hstest();t.setId(1);t.setRowname("donnie1");t.setValue("wuxiaodong1");t.addBatch();t.setId(2);t.setRowname("donnie2");t.setValue("wuxiaodong2");t.addBatch();t.setId(3);t.setRowname("donnie3");t.setValue("wuxiaodong3");t.addBatch();t.batchForSave();更新SQL:  update hstest set rowname="wuxiaodong",value="wuxiaodong" where id=10jdao对象操作如下:Hstest t = new Hstest();t.setRowname("wuxiaodong");t.setValue("wuxiaodong");t.where(Hstest.ID.EQ(10));t.update();删除SQL:  delete from hstest where id=2jdao对象操作如下:Hstest t = new Hstest();t.where(Hstest.ID.EQ(2));t.delete();二、使用QueryDao查询数据,建议用于复杂SQL查询,单表增删改查建议还是使用DAO对象操作。QueryDao qd = new QueryDao(JdaoHandlerFactory.getDBHandler4c3p0(), "select id,rowname from hstest limit ?,?", 0, 10);//获取数据方式一while (qd.hasNext()) {    QueryDao q = qd.next();    //获取字段方式一    System.out.println(q.fieldValue(1) "   " q.fieldValue(2));    //获取字段方式二    System.out.println(q.fieldValue("id") "   " q.fieldValue("rowname"));}//获取数据方式二for(QueryDao q:qd.queryDaoList()){    System.out.println(q.fieldValue(1) "   " q.fieldValue(2));} 标签:orm  jdao
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pxr007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值