A replacement for database sql

栏目: IT技术 · 发布时间: 5年前

内容简介:Imagine if you had the power to rewrite the notoriousWhat would it look like?It would look like the all-new

A replacement for database/sql

Imagine if you had the power to rewrite the notorious database/sql package so that it was friendlier, simpler and less verbose.

What would it look like?

It would look like the all-new dbq package . Version 2.2 was just released with so many bells and whistles that you’ll never directly use the database/sql package again.

A small subset of the features are showcased below. Also read to the end to see the new direction of the package.

Zero boilerplate code

You can execute simple queries in 8 lines instead of 30. And it comes with built-in unmarshaling.

A replacement for database sql

dbq vs database/sql

The contrast speaks for itself.

Flatten Query Args

You have a []string with a list of query arguments that you want to inject into a query without SQL-injection issues. You can feel the irritation building up.

func (db *DB) Query(query string, args ...interface{})

Unfortunately, args only accepts interface{} so you need to superfluously iterate over the entire []string to copy the values into a []interface{} . It makes your code look like Wuhan 2 months back. dbq has your back.

All slices are flattened automatically . No questions asked.

A replacement for database sql
No questions asked!

Mission-critical queries

What if you have a query that HAS TO SUCCEED . Failure is not an option®.

dbq has built-in retry capabilities so it will continue to attempt your query with exponentially increasing intervals.

Transaction management

What about transactions? Got you covered.

dbq.Tx(ctx, db, func(tx interface{}, ..., txCommit dbq.TxCommit) {   res, err := E(ctx, "exec statement")
   if err != nil {
      return // Automatic rollback
   }
   txCommit()})

You can have an arbitrarily complex database operation happening within a transaction without having to worry about rolling-back ON every SINGLE sad PATH. Just commit at the end.

Finally, THIS IS YOUR PACKAGE

The x subpackage houses custom query helper functions that are general xor MySQL/PostgreSQL specific.

You are welcome to submit PR’s with whatever custom functions you want. As long as you leave the core package pristine, and your code compiles and is well documented, then it’ll be welcomed with open arms.

As a warm-up, I’ve included a BulkUpdate function which allows you to update thousands of rows with 1 query without a transaction!

Stay safe boys and girls.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java 8函数式编程

Java 8函数式编程

[英] Richard Warburton / 王群锋 / 人民邮电出版社 / 2015-3 / 39.00元

通过每一章的练习快速掌握Java 8中的Lambda表达式 分析流、高级集合和其他Java 8类库的改进 利用多核CPU提高数据并发的性能 将现有代码库和库代码Lambda化 学习Lambda表达式单元测试和调试的实践解决方案 用Lambda表达式实现面向对象编程的SOLID原则 编写能有效执行消息传送和非阻塞I/O的并发应用一起来看看 《Java 8函数式编程》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具