一、连接数据库

对比sql库的初始化:

发现sqlx库的相当于是把sql库的Open方法、Ping方法结合到了一个Connect方法中。
二、增删改查




需要注意的是,我们定义的user结构体中字段名称的首字母都需要大写,因为db.Get()方法是其他包中的。这里也要注意db.Get()方法中需要传结构体的指针。
三、NameExec()方法
有时候如果sql语句中的占位符过多,后面我们传参容易传错。因此有个准确度高的方法如下:

即现在sql语句中用":变量名"的方式替代原来的"?"占位符,之后调用NameExec()方法传入map类型的参数,有准确的对应关系,以防止出错。
四、sqlx.In()方法
sqlx.In()是sqlx提供的一个非常方便的函数。
1、绑定变量
查询占位符"?"在内部称为bindvars(查询占位符),它非常重要。你应该始终使用它们向数据库发送值,因为它们可以防止SQL注入攻击。database/sql不尝试对查询文本进行任何验证;它与编码的参数一起按原样发送到服务器。除非驱动程序实现一个特殊的接口,否则在执行之前,查询是在服务器上准备的。因此bindvars是特定于数据库的:
MySQL中使用?
PostgreSQL使用枚举的$1、$2等bindvar语法
SQLite中?和$1的语法都支持
Oracle中使用:name的语法
bindvars的一个常见误解是,它们用来在sql语句中插入值。它们其实仅用于参数化,不允许更改SQL语句的结构。例如,使用bindvars尝试参数化列或表名将不起作用:

网友评论