内容
1 database/sql基本操作
2 gorm基本操作
1 database/sql
- 初始化一个数据库连接
sql包是go提供的原生的数据库操作接口,所以第一步需要引入相应数据库的驱动
import (
"database/sql"
_ "github.com/go-sql-driver/mysql" // 引入mysql驱动
)
func main() {
dsn := "user:password@tcp(127.0.0.1:3306)/dbname"
db, err := sql.Open("mysql", dsn)
if err != nil {
panic(err)
}
defer db.Close() // 注意这行代码要写在上面err判断的下面,如果open时,db对象没有初始成功,就调用了close,要报错
}
- 初始化连接
Open方法只是初始化了一个db对象,并没有进行连接,一种懒加载思想,待用到这个连接时在尝试去建立连接
// 尝试与数据库建立连接(校验dsn是否正确)
err = db.Ping()
if err != nil {
return err
}
return nil
- 进行增、删、改、查
增、删、改都通过Exec方法进行操作
func (db *DB) Exec(query string, args ...interface{}) (Result, error)
增,删除和更新一样的,编写相应sql即可
func insert() {
sqlStr := "insert into user(name, age) values (?,?)"
ret, err := db.Exec(sqlStr, "11", 11)
if err != nil {
return
}
// 获取插入id
theID, err := ret.LastInsertId()
if err != nil {
fmt.Printf("get lastinsert ID failed, err:%v\n", err)
return
}
fmt.Printf("insert success, the id is %d.\n", theID)
}
查询:
查询单条数据
func queryRowDemo() error {
sqlStr := "select id, name, age from user where id=?"
var u user
err := db.QueryRow(sqlStr, 1).Scan(&u.id, &u.name, &u.age)
if err != nil {
return err
}
}
查询多条数据
func queryMultiRowDemo() error {
sqlStr := "select id, name, age from user where id > ?"
rows, err := db.Query(sqlStr, 0)
if err != nil {
return err
}
defer rows.Close()
// 循环读取结果集中的数据
for rows.Next() {
var u user
err := rows.Scan(&u.id, &u.name, &u.age)
if err != nil {
return err
}
}
}
- prepare()进行sql预编译
func (db *DB) Prepare(query string) (*Stmt, error)
func prepareInsertDemo() error {
sqlStr := "insert into user(name, age) values (?,?)"
stmt, err := db.Prepare(sqlStr)
if err != nil {
return err
}
defer stmt.Close()
_, err = stmt.Exec("小王子", 18)
if err != nil {
return err
}
_, err = stmt.Exec("沙河娜扎", 18)
if err != nil {
return err
}
}
- 事务处理
func (db *DB) Begin() (*Tx, error)
func (tx *Tx) Commit() error
func (tx *Tx) Rollback() error
2 gorm 基本操作
- GORM中午文档:https://gorm.io/zh_CN/docs/models.html
- Go语言操作MySQL:https://www.liwenzhou.com/posts/Go/go_mysql/
网友评论