所有操作均需要事先创建并配置ORM引擎才可以进行,创建ORM引擎需要指定引擎所使用的数据库,worm目前支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQLServer。有两种方式创建ORM引擎:
您可通过调用worm.NewMysql()创建一个worm.DbEngine,或者通过调用worm.InitMysql()来初始化缺省的worm.DbEngine。
package main
import (
"database/sql"
"log"
_ "github.com/go-sql-driver/mysql"
"github.com/haming123/wego/worm"
)
func main() {
cnnstr := "account:pwd@tcp(127.0.0.1:3306)/db?charset=utf8&parseTime=True"
dbcnn, err := sql.Open("mysql", cnnstr)
if err != nil {
log.Println(err)
return
}
err = dbcnn.Ping()
if err != nil {
log.Println(err)
return
}
err = worm.InitMysql(dbcnn)
if err != nil {
log.Println(err)
return
}
}
您可通过调用worm.NewPostgres()创建一个worm.DbEngine,或者通过调用worm.InitPostgres()来初始化缺省的worm.DbEngine。
package main
import (
"database/sql"
"log"
_ "github.com/lib/pq"
"github.com/haming123/wego/worm"
)
func main() {
cnnstr := "host=127.0.0.1 port=5432 user=user_name password=pwd_str dbname=demo sslmode=disable"
dbcnn, err := sql.Open("postgres", cnnstr)
if err != nil {
log.Println(err)
return
}
err = dbcnn.Ping()
if err != nil {
log.Println(err)
return
}
err = worm.InitPostgres(dbcnn)
if err != nil {
log.Println(err)
return
}
}
您可通过调用worm.NewSqlServer()创建一个worm.DbEngine,或者通过调用worm.InitSqlServer()来初始化缺省的worm.DbEngine。
package main
import (
"database/sql"
"log"
_ "github.com/denisenkom/go-mssqldb"
"github.com/haming123/wego/worm"
)
func main() {
cnnstr := "server=127.0.0.1;database=demo;user id=user_name;password=pwd_str;port=1433;encrypt=disable"
dbcnn, err := sql.Open("mssql", cnnstr)
if err != nil {
log.Println(err)
return
}
err = dbcnn.Ping()
if err != nil {
log.Println(err)
return
}
err = worm.InitSqlServer(dbcnn)
if err != nil {
log.Println(err)
return
}
}
worm缺省开启了SQL日志的输出,你可以调用worm.ShowSqlLog()来控制是否需要显示SQL日志:
err = worm.InitMysql(dbcnn)
if err != nil {
log.Println(err)
return
}
worm.ShowSqlLog(true)
worm支持SQL语句的预编译,使用SQL语句预编译可以提升数据库访问的效率。你可以调用worm.UsePrepare()来控制是否开启全局预编译:
err = worm.InitMysql(dbcnn)
if err != nil {
log.Println(err)
return
}
worm.UsePrepare(true)
worm支持使用数据库的读写分离模式来访问一组数据库,您可以通过调用worm.AddSlave()来添加从库:
func initMySql(cnnstr string) (*sql.DB, error) {
dbcnn, err := sql.Open("mysql", cnnstr)
if err != nil {
return nil, err
}
err = dbcnn.Ping()
if err != nil {
return nil, err
}
return dbcnn, nil
}
func main() {
db, _ := initMySql("account:pwd@tcp(192.168.0.1:3306)/db?charset=utf8&parseTime=True")
worm.InitMysql(db)
db_slave1, _ := initMySql("account:pwd@tcp(192.168.0.2:3306)/db?charset=utf8&parseTime=True")
worm.AddSlave(db_slave1, "slave1", 1)
db_slave2, _ := initMySql("account:pwd@tcp(192.168.0.3:3306)/db?charset=utf8&parseTime=True")
worm.AddSlave(db_slave2, "slave2", 1)
}
worm目前支持的数据库类型有: MySQL, PostgreSQL, SQlite, SQLServer。对于不支持的数据库,您也可以自定义数据库引擎。
自定义数据库引擎,首先需要实现数据库方言接口, 然后调用worm.NewEngine()函数或worm.InitEngine()函数来创建引擎。
type Dialect interface {
GetName() string
DbType2GoType(colType string) string
GetColumns(db_raw *sql.DB, tableName string) ([]ColumnInfo, error)
LimitSql(offset int64, limit int64) string
ParsePlaceholder(sql_tpl string) string
ModelInsertHasOutput(md *DbModel) bool
GenModelInsertSql(md *DbModel) string
GenModelUpdateSql(md *DbModel) string
GenModelDeleteSql(md *DbModel) string
GenModelGetSql(md *DbModel) string
GenModelFindSql(md *DbModel) string
TableInsertHasOutput(tb *DbTable) bool
GenTableInsertSql(tb *DbTable) (string, []interface{})
GenTableUpdateSql(tb *DbTable) (string, []interface{})
GenTableDeleteSql(tb *DbTable) string
GenTableGetSql(tb *DbTable) string
GenTableFindSql(tb *DbTable) string
GenJointGetSql(lk *DbJoint) string
GenJointFindSql(lk *DbJoint) string
}
您可通过调用worm.NewEngine()创建一个worm.DbEngine,或者通过调用worm.InitEngine()来初始化缺省的worm.DbEngine。
package main
import (
"database/sql"
"log"
"github.com/haming123/wego/worm"
)
func main() {
dbcnn, err := sql.Open("数据库驱动名称", "数据库连接串")
if err != nil {
log.Println(err)
return
}
err = dbcnn.Ping()
if err != nil {
log.Println(err)
return
}
dialect := &UserDefinedDialect{}
worm.InitEngine(dialect, dbcnn)
}