sql操作的系统函数 如果你觉得用起来比较啰嗦的话 你还可以选择开源库,这里简单介绍下sqlx这个开源库
sqlx 的连接数据库
1 | go复制代码// 定义一x全局对象 这是并发安全的对象 注意这个是sqlx了 不是sql |
sqlx的查询
1 | go复制代码// 这里注意首字母要大写了 |
可以看出来,这查询就比之前的原生的查询要简单很多,使用很方便。
其实这里的原理和java中的json序列化很像,都是利用反射。
只不过在java中 我们一般是利用注解 来标识 field和 json中key的关系
而 这里是用的`` 符号 仅此而已
查询多行也是一样的
1 | go复制代码func queryRow() { |
也是能简化不少 我们的操作
crud 操作
sqlx的crud操作和sql里面的操作是一样的 这里不再重复演示
1 | go复制代码func insert() { |
简化操作
在之前每次插入或者更新数据的时候 如果参数过多,那我们的占位符和真正的数据 很有可能就写错了,而且可读性不佳
sqlx提供了NamesExec操作 可以简化我们的操作 以kv的形式 来操作数据
1 | go复制代码func betterInsert() { |
同样的 查询语句也一样有类似的方法NamedXXX 有兴趣的可以自行查找sqlx 相关的文档。这里只是抛砖引玉一下
大家要谨记,这些api没必要一个个过,只需要记住一个类似的,然后其余的时候只要知道用的时候 去哪里查询文档 即可
事务的操作
sqlx的事物操作 与原生的 事务操作 有所不同,主要区别就是 sqlx 依赖defer 来做回滚和提交的操作
1 | go复制代码func transactionDemo() error { |
我个人是比较喜欢这种defer的写法的 因为不容易出错 特别是当你的事务特别复杂的时候
sqlx的批量插入
有时候我们会经常碰到批量插入数据的场景,最简单的做法 当然是 写一个for循环 每次都插入一条
直到循环结束,但是这样会重复连接数据库 造成不必要的压力。
所以通常我们会一次性插入
sql语句 形如:
当然在程序里面我们要使用占位符来处理,那他的参数如下:
显然我们要 完成类似的操作 是要做一些 字符串拼接的操作的
这样写起来很麻烦
1 | go复制代码 |
1 | css复制代码users := []user{ |
简化版的写法
1 | go复制代码func insertMoreUsers(users []user) error { |
in函数简单介绍
1 | go复制代码func searchByIDs(ids []int)(users []user, err error){ |
本文转载自: 掘金