go本身提供了一个库database/sql用来管理数据库,但是缺少驱动需要导入驱动
因此我们需要导入mysql的驱动通过sql.open(driver,source)来连接mysql数据库
package session
import (
"GeeORM/main/log"
"database/sql"
"strings"
)
type Session struct {
db *sql.DB
sql strings.Builder
sqlVars []any
}
func New(db *sql.DB) *Session {
return &Session{db: db}
}
func (s *Session) Clear() {
s.sql.Reset()
s.sqlVars = nil
}
func (s *Session) DB() *sql.DB {
return s.db
}
func (s *Session) Raw(sql string, values ...any) *Session {
//将数据暂时存储起来
s.sql.WriteString(sql)
s.sql.WriteString(" ")
s.sqlVars = append(s.sqlVars, values...)
return s
}
func (s *Session) Exec() (result sql.Result, err error) {
defer s.Clear()
log.Info(s.sql.String(), s.sqlVars)
if result, err = s.db.Exec(s.sql.String(), s.sqlVars...); err != nil {
log.Error(err)
}
return
}
func (s *Session) QueryRow() *sql.Row {
defer s.Clear()
log.Info(s.sql.String(), s.sqlVars)
return s.db.QueryRow(s.sql.String(), s.sqlVars...)
}
func (s *Session) QueryRows() (rows *sql.Rows, err error) {
defer s.Clear()
log.Info(s.sql.String(), s.sqlVars)
if rows, err = s.db.Query(s.sql.String(), s.sqlVars...); err != nil {
log.Error(err)
}
return
}
首先写一些基本的东西,Exec主要用于执行原生的mysql指令,QueryRow用于请求数据,QueryRows用于请求多条数据