go語言的sqlx庫的使用

一、連接數(shù)據(jù)庫

sqlx庫連接數(shù)據(jù)庫

對比sql庫的初始化:

sql庫連接數(shù)據(jù)庫

發(fā)現(xiàn)sqlx庫的相當于是把sql庫的Open方法、Ping方法結合到了一個Connect方法中。

二、增刪改查

需要注意的是,我們定義的user結構體中字段名稱的首字母都需要大寫,因為db.Get()方法是其他包中的。這里也要注意db.Get()方法中需要傳結構體的指針。


三、NameExec()方法

有時候如果sql語句中的占位符過多,后面我們傳參容易傳錯。因此有個準確度高的方法如下:

NameExec()方法

即現(xiàn)在sql語句中用":變量名"的方式替代原來的"?"占位符,之后調用NameExec()方法傳入map類型的參數(shù),有準確的對應關系,以防止出錯。


四、sqlx.In()方法

sqlx.In()是sqlx提供的一個非常方便的函數(shù)。

1、綁定變量

查詢占位符"?"在內部稱為bindvars(查詢占位符),它非常重要。你應該始終使用它們向數(shù)據(jù)庫發(fā)送值,因為它們可以防止SQL注入攻擊。database/sql不嘗試對查詢文本進行任何驗證;它與編碼的參數(shù)一起按原樣發(fā)送到服務器。除非驅動程序實現(xiàn)一個特殊的接口,否則在執(zhí)行之前,查詢是在服務器上準備的。因此bindvars是特定于數(shù)據(jù)庫的:

MySQL中使用?

PostgreSQL使用枚舉的$1、$2等bindvar語法

SQLite中?$1的語法都支持

Oracle中使用:name的語法

bindvars的一個常見誤解是,它們用來在sql語句中插入值。它們其實僅用于參數(shù)化,不允許更改SQL語句的結構。例如,使用bindvars嘗試參數(shù)化列或表名將不起作用:

一些錯誤使用

2、自己拼接語句實現(xiàn)批量插入


3、使用sqlx.In實現(xiàn)批量插入

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容