使用数据库的一般步骤
引入xxx
- 第三方包
import "github.com/jmoiron/sqlx"
- 驱动
import _ "github.com/go-sql-driver/mysql"
配套数据库为 news.sql
建立链接
- //uid:pass@tcp(host:port)/dbname?charset=utf8mb4&parseTime=true
- //用户名:密码@tcp(主机:端口)/数据库名称?charset=utf8mb4&parseTime=true
- db, err = sqlx.Open(`mysql`, `root:root@tcp(127.0.0.1:3306)/news?charset=utf8mb4&parseTime=true`)
go
测试链接
- err = db.Ping()
查询数据
单个查询
- package main
- import (
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- "github.com/jmoiron/sqlx"
- )
- //Class db class
- type Class struct {
- ID int
- Name string
- Desc string
- }
- func main() {
- db, err := sqlx.Open(`mysql`, `root:root@tcp(127.0.0.1:3306)/news?charset=utf8mb4&parseTime=true`)
- mod := &Class{}
- //查询一条数据
- //错误信息 = db.Get(要保存数据的变量的指针,`sql语句`,参数...)
- err = db.Get(mod, `select * from class limit 1`)
- fmt.Println(mod, err)
- }
go
查询集合
- package main
- import (
- "fmt"
- _ "github.com/go-sql-driver/mysql"
- "github.com/jmoiron/sqlx"
- )
- //Class db class
- type Class struct {
- ID int
- Name string
- Desc string
- }
- func main() {
- db, err := sqlx.Open(`mysql`, `root:root@tcp(127.0.0.1:3306)/news?charset=utf8mb4&parseTime=true`)
- mods := make([]Class, 0)
- //查询多条数据
- //错误信息 = db.Select(要保存数据的变量的指针,`sql语句`,参数...)
- err = db.Select(&mods, `select * from class`)
- fmt.Println(&mods, err)
- }
go
操作数据
添加数据
- //操作结果, 错误信息 := db.Exec(`sql语句`,参数...)
- //result, err := db.Exec("insert into class(`name`,`desc`) values(?,?)", `名称`, `描述description`)
- result, err := db.Exec("insert into class(`name`,`desc`) values(?,?)", `名称`, `描述description`)
- fmt.Println(err)
- // 如果是insert数据 则LastInsertId 返回插入的 id
- fmt.Println(result.LastInsertId())
- // 修改和删除 RowsAffected 返回到底影响了多少条数据
- fmt.Println(result.RowsAffected())
go
修改数据
- //修改数据
- result, err := db.Exec("update class set `desc`= ?", `描述 描述`)//警告
- fmt.Println(err)
- // 如果是insert数据 则LastInsertId 返回插入的 id
- fmt.Println(result.LastInsertId())
- // 修改和删除 RowsAffected 返回到底影响了多少条数据
- fmt.Println(result.RowsAffected())
go
删除数据
- //删除数据
- result, err := db.Exec("delete from class where id = ?", 4) //警告
- fmt.Println(err)
- // 如果是insert数据 则LastInsertId 返回插入的 id
- fmt.Println(result.LastInsertId())
- // 修改和删除 RowsAffected 返回到底影响了多少条数据
- fmt.Println(result.RowsAffected())
go
ORM
对象-关系映射(Object/RelationMapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。…实际应用中即在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。
推荐xorm
是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单SQL需求。xorm支持两种风格的混用。
简单使用
- 安装
go get xorm.io/xorm
- 建立连接
- import (
- _ "github.com/go-sql-driver/mysql"
- "xorm.io/xorm"
- )
- var Db *xorm.Engine
- func init() {
- var err error
- Db, err = xorm.NewEngine("mysql", "账号:密码@/数据库?charset=utf8mb4&parseTime=true")
- if err != nil {
- panic("Db :" + err.Error())
- }
- }
go
- 简单查询
- type User struct {
- Id int
- Name string
- Num string
- }
- func main() {
- // 查询id为10的数据
- // mod := User{}
- // Db.ID(10).Get(&mod)
- mod := User{Id: 10}
- Db.ID(10).Get(&mod)
- fmt.Println(mod)
- }
go
Comments