Jadual Kandungan
连接数据库
" >连接数据库
查询单条" >查询单条
查询多条" >查询多条
添加" >添加
更新
" >更新
删除
" >删除
事物
" >事物
NameQuery" >NameQuery
Ringkasan" >Ringkasan
Rumah pembangunan bahagian belakang Golang Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

Jul 24, 2023 pm 02:34 PM
mysql pergi bahasa

Fail mod

Buat kod jadual
module sqlxDemo


go 1.14


require (
    github.com/go-sql-driver/mysql v1.4.0
    github.com/jmoiron/sqlx v1.2.0
    google.golang.org/appengine v1.6.7 // indirect
)
Salin selepas log masuk
Buat Struktur

Kod struktur

type Userinfo struct {
    Id      int64  `json:"id"`
    Name    string `json:"name"`
    Phone   string `json:"phone"`
    Address string `json:"address"`
}
Salin selepas log masuk

连接数据库

代码

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql"
    "github.com/jmoiron/sqlx"
)
type Userinfo struct {
    Id      int64  `json:"id"`
    Name    string `json:"name"`
    Phone   string `json:"phone"`
    Address string `json:"address"`
}
func main() {
    dsn := "root:rootroot@tcp(127.0.0.1:3306)/go_mysql_demo?charset=utf8mb4&parseTime=True"
    // 使用 MustConnect 连接的话,验证失败不成功直接panic
    //db := sqlx.MustConnect("mysql", dsn)


    //使用 Connect 连接,会验证是否连接成功,
    db, err := sqlx.Connect("mysql", dsn)


    if err != nil {
        fmt.Printf("connect DB failed, err:%v\n", err)
        return
}
    db.SetMaxOpenConns(20)
    db.SetMaxIdleConns(10)
}
Salin selepas log masuk

查询单条

我记得使用原来的方式进行查询并且绑定结构体,是这审的。

//查询单条
sqlStr := "SELECT id,`name`,phone,address from userinfo where id = ?;"
var user Userinfo
err = db.QueryRow(sqlStr, 1).Scan(&user.Id, &user.Name, &user.Phone, &user.Address)
if err != nil {
    fmt.Println("查询失败", err)
    return
}
Salin selepas log masuk

第4行代码,需要将结构体的字段一个一个上去。

如果使用sqlx呢?

代码

//查询
sqlStr := "SELECT id,`name`,phone,address from userinfo where id = ?;"
var user Userinfo
err = db.Get(&user, sqlStr, 1)
if err != nil {
    fmt.Println("查询失败:", err)
    return
}
fmt.Println("user:",user)
Salin selepas log masuk

执行结果

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

还是第4行代码,直接一个结构体扔过去,就绑定成功了。

如果表有很多字段,结构体字段也有很多,这个是很有用的。

查询多条

还是惯例,看看原来是怎么查的。

//查询多条
sqlStr := "SELECT id,`name`,phone,address from userinfo where id >= ?"
//参数同 QueryRow
rows, err := db.Query(sqlStr, 1)
//处理err
// 此处使用rows释放所有链接
defer rows.Close()
//循环整理所有数据
var userList = make([]Userinfo, 0, 10)
for rows.Next() {
    var user Userinfo
    err = rows.Scan(&user.Id, &user.Name, &user.Phone, &user.Address)
    //处理err
    userList = append(userList, user)
}
fmt.Println(userList)
Salin selepas log masuk

为了方便,我去掉了err,使用伪代码处理err代替。

原来的方法,查询出来还得需要一个循环,还需要一个切片,乖乖嘞,打扰了。


来看看sqlx

代码

//查询多条
sqlStr := "SELECT id,`name`,phone,address from userinfo where id >= ?"
var userList []Userinfo
err = db.Select(&userList, sqlStr, 1)
if err != nil {
    fmt.Println("查询失败:", err)
    return
}
fmt.Println("userList:",userList)
Salin selepas log masuk

执行结果

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

还是直接扔过去,就绑定完成了,真是美滋滋。

添加

额,添加,更新,删除,事物的话,似乎跟原来差不多,直接看代码叭。

代码

//添加
sqlStr := "INSERT into userinfo(name,phone,address) values(?,?,?);"
result, err := db.Exec(sqlStr, "吴彦祖", 555, "不知道哪的")
if err != nil {
    fmt.Println("插入失败", err)
    return
}
row_affect, err := result.RowsAffected()
if err != nil {
    fmt.Println("受影响行数获取失败:", err)
    return
}
fmt.Println("受影响的行数:", row_affect)
lastId, err := result.LastInsertId()
if err != nil {
    fmt.Println("新增行id获取失败:", err)
    return
}
fmt.Println("新增行id:", lastId)
fmt.Println("插入成功")
Salin selepas log masuk

执行结果

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

Mysql

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

更新

代码

//更新数据
sqlStr := `UPDATE userinfo set name=? where id=?;`
result, err := db.Exec(sqlStr, "吴彦祖666", 4)
if err != nil {
    fmt.Println("更新失败", err)
    return
}
//受影响的行数
row_affect, err := result.RowsAffected()
if err != nil {
    fmt.Println("受影响行数获取失败:", err)
    return
}
fmt.Println("受影响的行数:", row_affect)


fmt.Println("更新成功")
Salin selepas log masuk

执行结果

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

Mysql

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

删除

代码

sqlStr := "delete from userinfo where id = ?;"
result, err := db.Exec(sqlStr, 4)
if err != nil {
    fmt.Println("删除失败", err)
    return
}
//受影响的行数
row_affect, err := result.RowsAffected()
if err != nil {
    fmt.Println("受影响行数获取失败:", err)
    return
}
fmt.Println("受影响的行数:", row_affect)


fmt.Println("删除成功")
Salin selepas log masuk

执行结果

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

Mysql

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

事物

代码

//事物
tx, err := db.Begin()
if err != nil {
    //释放事物
    if tx != nil {
        tx.Rollback()
}
    fmt.Println("事物开启失败")
    return
}
张三减10块Sql := `UPDATE bill set money=money - 10 where name = ?;`
result, err := tx.Exec(张三减10块Sql, "张三")
if err != nil {
    //有错误表示更是失败,回滚原来状态
    tx.Rollback()
    fmt.Println(err)
    return
}
张三受影响行数, err := result.RowsAffected()
if err != nil {
    tx.Rollback() // 回滚
    return
}


李四加10块Sql := `UPDATE bill set money=money + 10 where name = ?;`
result, err = tx.Exec(李四加10块Sql, "李四")
if err != nil {
    //有错误表示更是失败,回滚原来状态
    tx.Rollback()
    fmt.Println(err)
    return
}
李四受影响行数, err := result.RowsAffected()
if err != nil {
    tx.Rollback() // 回滚
    return
}
//都等于1表示成功,可以提交事务,修改数据
if 张三受影响行数==1 && 李四受影响行数==1{
    //提交事务
    fmt.Println("提交事务")
    tx.Commit()
}else{
    //有一个!=1表示没有更新成功,可能用户不存在
    fmt.Println("失败了,事物回滚了")
    tx.Rollback()
}
fmt.Println("事物执行成功")
Salin selepas log masuk

执行结果

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

Mysql

Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx)

NameExec

增 删 改使用。

NameExec方法是通过结构体Map绑定SQL语句,试了试,感觉用处不大,不做举例。

NameQuery

digunakan untuk pertanyaan.

Penggunaan sama seperti di atas, sia-sia, tiada contoh akan diberikan.

Ringkasan

Malah, penambahbaikan terbesar modul sqlx adalah dalam pertanyaan yang saya juga lebih mudah untuk anda lihat ry Banyak banyak.

Tapi kalau lain-lain kemudahan, nampak macam memanjang, tapi dia pun cakap secara amnya banyak senario pertanyaan, semak lebih banyak dan kurangkan perubahan.

Atas ialah kandungan terperinci Versi dipertingkatkan bahasa Go mengendalikan Mysql (Sqlx). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Halaman ini kosong selepas PHP disambungkan ke MySQL. Apakah sebab fungsi mati () tidak sah? Halaman ini kosong selepas PHP disambungkan ke MySQL. Apakah sebab fungsi mati () tidak sah? Apr 01, 2025 pm 03:03 PM

Halaman ini kosong selepas PHP menghubungkan ke MySQL, dan sebab mengapa fungsi mati () gagal. Semasa mempelajari hubungan antara pangkalan data PHP dan MySQL, anda sering menemui beberapa perkara yang membingungkan ...

Bagaimana untuk mengintegrasikan perkhidmatan Node.js atau Python dengan cekap di bawah seni bina lampu? Bagaimana untuk mengintegrasikan perkhidmatan Node.js atau Python dengan cekap di bawah seni bina lampu? Apr 01, 2025 pm 02:48 PM

Ramai pemaju laman web menghadapi masalah mengintegrasikan perkhidmatan node.js atau python di bawah seni bina lampu: lampu sedia ada (Linux Apache MySQL PHP) Laman web seni bina memerlukan ...

Apabila menggunakan Django dan MySQL untuk memproses beratus-ratus ribu hingga satu atau dua juta keping data, apakah jenis penyelesaian cache yang harus dipilih oleh pelayan memori 4-teras? Apabila menggunakan Django dan MySQL untuk memproses beratus-ratus ribu hingga satu atau dua juta keping data, apakah jenis penyelesaian cache yang harus dipilih oleh pelayan memori 4-teras? Apr 01, 2025 pm 11:36 PM

Menggunakan Django dan MySQL untuk memproses jumlah data yang besar apabila menggunakan pangkalan data Django dan MySQL, jika jumlah data anda mencapai ratusan ribu hingga satu atau dua juta ...

Bagaimana cara berkongsi halaman yang sama di PC dan sisi mudah alih dan mengendalikan masalah cache? Bagaimana cara berkongsi halaman yang sama di PC dan sisi mudah alih dan mengendalikan masalah cache? Apr 01, 2025 pm 01:57 PM

Bagaimana cara berkongsi halaman yang sama di PC dan sisi mudah alih dan mengendalikan masalah cache? Di persekitaran PHP MySQL Nginx yang dibina menggunakan latar belakang Baota, bagaimana menjadikan sisi PC dan ...

Bagaimana untuk menggunakan Go atau Rust untuk memanggil skrip Python untuk mencapai pelaksanaan selari yang benar? Bagaimana untuk menggunakan Go atau Rust untuk memanggil skrip Python untuk mencapai pelaksanaan selari yang benar? Apr 01, 2025 pm 11:39 PM

Bagaimana untuk menggunakan Go atau Rust untuk memanggil skrip Python untuk mencapai pelaksanaan selari yang benar? Baru -baru ini saya telah menggunakan python ...

Dari PHP ke GO atau Front-End? Cadangan dan kekeliruan realiti dari orang yang berpengalaman Dari PHP ke GO atau Front-End? Cadangan dan kekeliruan realiti dari orang yang berpengalaman Apr 01, 2025 pm 02:12 PM

Kekeliruan dan punca memilih dari PHP untuk pergi baru -baru ini, saya secara tidak sengaja belajar tentang gaji rakan sekerja dalam jawatan lain seperti Android dan tertanam C di syarikat itu, dan mendapati bahawa mereka lebih ...

Docker Membina Persekitaran LNMP: Adakah Dockerfile atau Docker tunggal mengarang lebih baik? Docker Membina Persekitaran LNMP: Adakah Dockerfile atau Docker tunggal mengarang lebih baik? Apr 01, 2025 pm 02:09 PM

Amalan terbaik Dockerfile untuk membina pembelajaran persekitaran LNMP Semasa Docker, ramai pemaju cuba membina LNMP mereka sendiri (Linux, Nginx, MySQL, PHP) ...

See all articles