bi/engine/db/sqlx.go
2025-05-22 16:27:39 +08:00

78 lines
1.6 KiB
Go

// MySql引擎层
package db
import (
"fmt"
"github.com/Masterminds/squirrel"
"github.com/jmoiron/sqlx"
"log"
"time"
)
// sqlx 全局变量
var Sqlx *sqlx.DB
var ClickHouseSqlx *sqlx.DB
// 用squirrel生成sql语句
var SqlBuilder = squirrel.StatementBuilder
type Eq = squirrel.Eq
type Or = squirrel.Or
type And = squirrel.And
type NotEq = squirrel.NotEq
type Gt = squirrel.Gt
type Lt = squirrel.Lt
type GtOrEq = squirrel.GtOrEq
type LtOrEq = squirrel.LtOrEq
type Like = squirrel.Like
type Gte = squirrel.GtOrEq
type Lte = squirrel.LtOrEq
type SelectBuilder = squirrel.SelectBuilder
type InsertBuilder = squirrel.InsertBuilder
type UpdateBuilder = squirrel.UpdateBuilder
// NewMySQL 创建一个连接MySQL的实体池
func NewSQLX(driverName, dbSource string, maxOpenConns, maxIdleConns int) (db *sqlx.DB, err error) {
db, err = sqlx.Open(driverName, dbSource)
if err != nil {
return nil, fmt.Errorf("sqlx open driver %v source %v error:%v", driverName, dbSource, err)
}
if maxOpenConns > 0 {
db.SetMaxOpenConns(maxOpenConns)
}
if maxIdleConns > 0 {
db.SetMaxIdleConns(maxIdleConns)
}
err = db.Ping()
if err != nil {
return nil, fmt.Errorf("sqlx ping driver %v source %v error:%v", driverName, dbSource, err)
}
go func() {
for {
err = db.Ping()
if err != nil {
log.Println("mysql db can't connect!")
}
time.Sleep(time.Minute)
}
}()
return
}
// 创建分页查询
func CreatePage(page, limit uint64) uint64 {
tmp := (page - 1) * limit
return tmp
}
// 创建模糊查询
func CreateLike(column string) string {
return fmt.Sprint("%", column, "%")
}