go提供了一些標準庫讓我們和數據庫交互, database/sql是golang的標準庫之一,它提供了一系列接口方法,用於訪問關係數據庫。 不同的數據庫驅動,需要去實現各種方法
func main(){
db,err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/htadmin")
}
此時會報錯,說mysql 驅動不存在。安裝mysql驅動
go get github.com/go-sql-driver/mysql
---------------------------------
import(
"database/sql"
_ "github.com/go-sql-driver/mysql" //需要引入這個包
)
獲取到db對象,查詢用db.Query(sql), DDL操作用db.Exec(sql),用Scan方法把結果賦值給模型實例
模型結構(和表對應)
type User struct {
ID int64 `db:"id"`
UserId int64 `db:"user_id"`
}
func main(){
s := new(User);
db,err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/htadmin")
rows,err := db.Query("select id,user_id from user_addresses") //返回的字段數要和scan接受的參數一致
results,err:=db.Exec("UPDATE message SET salary=? where id=?",8900,3)//這是更新語句
for rows.Next(){
rows.Scan(&s.UserId, &s.ID) //把查詢出來的字段賦值給模型實例
fmt.Println(s)
}
}
GO還有一些第三方庫,方便我們和數據庫交互,比如:
gorm操作數據庫
http://gorm.book.jasperxu.com/crud.html#c 中文文檔鏈接
1.安裝第三方庫
go get -u github.com/jinzhu/gorm
//創建User模型
type User struct{
gorm.Model
Name string `gorm:"column:name"` //gorm:"column:name"指定表的字段
Email string `gorm:"column:email"`
Password string `gorm:"column:password"`
}
func (u User) TableName() string{
return "users" //這就是User模型綁定的表名,如果不指定,默認是模型複數
}
func main(){
db,err := gorm.Open("mysql","root:123456@tcp(127.0.0.1:3306)/htadmin")
defer db.Close()
user:=User{ //創建一個模型對象並且實例化
Name: "張三",
Email: "[email protected]",
Password: "$10$wqvwRQiHYOBCrR6dUdEzY.eYxC8XI9I6BUWPM8K.DzMEsjw66bX2K",
}
res := db.NewRecord(user)//檢測主鍵是否存在,返回true
db.Create(&user) //執行插入操作
//查詢操作,獲取結果集one
var one []User
db.Table("users").Select("id,name,email,password").Where("name=?", "張三").Scan(&one)
for _,v := range one{
fmt.Println(v.ID,v.Name)
}
}
常用查詢方式
查詢一條
var one User //如果查詢一條數據,一個模型對象存儲即可
db.First(&one,5) //where id=5
db.Where("name=?", "張三").First(&one) //where name="張三"
查詢所有匹配結果集
var ones []User //數組
db.Where("name=?", "張三").Find(&ones)
//多個條件鏈式查詢
db.Where("role = ?", "admin").Or("role = ?", "super_admin").Not("name = ?", "jinzhu").Find(&ones)
//指定字段
db.Select("name, age").Find(&users)
for _,v := range ones{
fmt.Println(v.ID,v.Name)
}