美文网首页
go sqlx基本使用

go sqlx基本使用

作者: peroLuo | 来源:发表于2020-03-04 18:17 被阅读0次
    package main
    
    // 数据库连接初始化
    import (
        "fmt"
    
        _ "github.com/go-sql-driver/mysql" // mysql
        "github.com/jmoiron/sqlx"
    )
    
    // DB 数据库模型
    var DB *sqlx.DB
    
    const dsn = "root:123456@tcp(127.0.0.1:3306)/golist"
    
    type user struct {
        ID   int    `json:"id" db:"id"`
        Name string `json:"name" db:"name"`
        Age  int    `json:"age" db:"age"`
    }
    
    // connect 1.连接数据库
    func connect() (db *sqlx.DB, err error) {
        db, err = sqlx.Connect("mysql", dsn)
        db.SetMaxOpenConns(100) // 设置连接池最大连接数
        db.SetMaxIdleConns(20)  // 设置连接池最大空闲连接数
        DB = db
        if err != nil {
            fmt.Println("数据库连接失败==>", err)
        }
        fmt.Println("数据库已连接!")
        return
    }
    
    // 添加数据 Exec、MustExec
    // MustExec遇到错误的时候直接抛出一个panic错误,程序就退出了;
    // Exec是将错误和执行结果一起返回,由我们自己处理错误。 推荐使用!
    func createUser() {
        // 创建表
        sql := `
            CREATE TABLE user  (
                id bigint(20) NOT NULL AUTO_INCREMENT,
                name varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
                age int(11) NULL DEFAULT 0,
                PRIMARY KEY (id) USING BTREE
            ) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact
        `
        _, err := DB.Exec(sql)
        fmt.Println(err)
    }
    
    // 添加数据
    func insertUser() {
        sql := `insert into user (name, age) values ("lgx",18)`
        res := DB.MustExec(sql)
        fmt.Println(res.LastInsertId)
        fmt.Println(res.RowsAffected)
    }
    
    // 更新数据
    func updateUser() {
        sql := `update user set name = ?, age = ? where id = ?`
        res, err := DB.Exec(sql, "LGX", 28, 20)
        fmt.Println(err, res)
    }
    
    // Get、QueryRowx: 查询一条数据
    // QueryRowx可以指定到不同的数据类型中
    func getNum() {
        var num int
        _ = DB.Get(&num, "select count(*) from user")
        fmt.Printf("数据库一共有:%d 个用户\n", num)
        var u user
        _ = DB.Get(&u, "select name, id, age from user where id = ?", 20)
        fmt.Printf("查找用户id==1的用户:%v \n", u)
    }
    
    // Select、Queryx:查询多条数据
    // Queryx可以指定到不同的数据类型中
    func getAll() {
        sql := `select id, name ,age from user where id > 1`
        var us []user
        err := DB.Select(&us, sql)
        fmt.Println(err, us)
    }
    
    // 删除
    func deleteUser() {
        sql := `delete from user where id = 20`
        _, _ = DB.Exec(sql)
    }
    
    // 事务处理
    func events() {
        tx, _ := DB.Beginx()
        _, err1 := tx.Exec("update user set age = 10 where id = 20")
        _, err2 := tx.Exec("update user set age = 10 where id = 21")
        fmt.Println(err1, err2)
        if err1 != nil || err2 != nil {
            tx.Rollback()
        }
        tx.Commit()
    }
    
    func main() {
        db, _ := connect()
        defer db.Close()
        // 建表
        // createUser()
        // 添加数据
        // insertUser()
        // 修改数据
        // updateUser()
        // 查数据-Get
        // getNum()
        // 查数据-Select
        // getAll()
        // 事务
        events()
    }
    

    相关文章

      网友评论

          本文标题:go sqlx基本使用

          本文链接:https://www.haomeiwen.com/subject/xvgblhtx.html