2018-07-22 17:35:10

goweb-05-golang-操作数据库

使用数据库的一般步骤

sqlx官网

引入xxx

  1. 第三方包 import "github.com/jmoiron/sqlx"
  2. 驱动 import _ "github.com/go-sql-driver/mysql"

配套数据库为 news.sql

建立链接

//uid:pass@tcp(host:port)/dbname?charset=utf8&parseTime=true //用户名:密码@tcp(主机:端口)/数据库名称?charset=utf8&parseTime=true db, err = sqlx.Open(`mysql`, `root:root@tcp(127.0.0.1:3306)/news?charset=utf8&parseTime=true`)

测试链接

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=utf8&parseTime=true`) mod := &Class{} //查询一条数据 //错误信息 = db.Get(要保存数据的变量的指针,`sql语句`,参数...) err = db.Get(mod, `select * from class limit 1`) fmt.Println(mod, err) }

查询集合

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=utf8&parseTime=true`) mods := make([]Class, 0) //查询多条数据 //错误信息 = db.Select(要保存数据的变量的指针,`sql语句`,参数...) err = db.Select(&mods, `select * from class`) fmt.Println(&mods, err) }

操作数据

添加数据

//操作结果, 错误信息 := 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())


修改数据

//修改数据 result, err := db.Exec("update class set `desc`= ?", `描述 描述`)//警告 fmt.Println(err) // 如果是insert数据 则LastInsertId 返回插入的 id fmt.Println(result.LastInsertId()) // 修改和删除 RowsAffected 返回到底影响了多少条数据 fmt.Println(result.RowsAffected())

删除数据

//删除数据 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())

ORM

对象-关系映射(Object/RelationMapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。…实际应用中即在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

推荐xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。xorm的目标并不是让你完全不去学习SQL,我们认为SQL并不会为ORM所替代,但是ORM将可以解决绝大部分的简单SQL需求。xorm支持两种风格的混用。

xorm官网
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=utf8&parseTime=true") if err != nil { panic("Db :" + err.Error()) } }
  • 简单查询
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) }

本文链接:https://blog.zxysilent.com/post/goweb-05.html

-- EOF --

Comments