开发环境准备
Go *** 作 mysql 需要使用的包:go-sql-driver/mysql 和 sqlx
sqlx 包是作为 database/sql 包的一个额外扩展包,在原有的 database/sql 上加了很多扩展,如果将查询的数据转为结构体,大大简化了代码书写,当然,database/sql 包中的方法同样起作用
github 地址:
https://github.com/go-sql-driver/mysql
https://github.com/jmoiron/sqlx
安装:
go get "github.com/go-sql-driver/mysql"
go get "github.com/jmoiron/sqlx"
连接数据库示例:
var Db *sqlx.DB
db, err := sqlx.Open("mysql","username:password@tcp(ip:port)/database?charset=utf8")
Db = db
处理类型(Handle Types)
sqlx 设计和 database/sql 使用方法是一样的,包含有 4 个主要的 handle types
sqlx.DB 表示数据库(与 sql.DB 相似)
sqlx.Tx 表示事物(与 sql.Tx 相似)
sqlx.Stmt 表示 prepared statement(和 sql.Stmt 相似)
sqlx.NamedStmt 表示 prepared statement(支持 named parameters)
所有的 handle types 都提供了对 database/sql 的兼容,意味着当你调用 sqlx.DB.Query 时,可以直接替换为 sql.DB.Query,这就使得 sqlx 可以很容易的加入到已有的数据库项目中
此外,sqlx 还有两个 cursor 类型:
sqlx.Rows (和 sql.Rows 类似,Queryx 返回)
sqlx.Row (和 sql.Row 类似,QueryRowx 返回)
相比 database/sql 还多了新的方法,也就是将获取的数据直接转换成 结构体
Get(dest interface{}, ...) error
Select(dest interface{}, ...) error
建表
以下所有 demo 都以下表结构作为基础
CREATE TABLE`userinfo` (
`uid`INT(10) NOT NULLAUTO_INCREMENT,
`create_time`datetime DEFAULT NULL,
`username`VARCHAR(64) DEFAULT NULL,
`password`VARCHAR(32) DEFAULT NULL,
`department`VARCHAR(64) DEFAULT NULL,
`email`varchar(64) DEFAULT NULL,PRIMARY KEY(`uid`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
Exec() 方法使用
Exec 和 MustExec 从连接池中获取一个连接然后指向对应的 query *** 作,对于不支持 ad-hoc query execution 的驱动,在 *** 作执行的背后会创建一个 prepared statement,在结果返回前,这个 connection 会返回到连接池中
需要注意的是,不同的数据库,使用的占位符不同,mysql 采用 ? 作为占位符
Mysql 使用 ?
PostgreSQL 使用 1,1,2 等等
SQLLite 使用 ? 或 $1
Oracle 使用 :name (注意有冒号)
增删
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)