初始化实现

This commit is contained in:
Yun
2026-06-06 02:09:22 +08:00
commit 83c727372a
10 changed files with 670 additions and 0 deletions
+31
View File
@@ -0,0 +1,31 @@
# mysqlx Examples
本目录提供了 `mysqlx` SDK 的多种配置使用示例,按场景拆分到独立子目录:
- `basic_dsn/`:通过原始 DSN 字符串创建客户端。
- `expanded_dsn/`:通过 `WithDSNConfig` 及单个字段展开设置连接信息。
- `custom_dialector/`:使用自定义 `gorm.Dialector`(例如 SQLite 内存数据库)创建客户端。
- `advanced_options/`:演示 GORM 高级配置与连接池选项,如 `NamingStrategy``SkipDefaultTransaction``DisableForeignKeyConstraintWhenMigrating` 等。
## 运行示例
示例目录下每个文件可单独执行:
```bash
cd c:/Code/pkg/mysqlx
go run ./example/basic_dsn/basic_dsn.go
```
```bash
go run ./example/expanded_dsn/expanded_dsn.go
```
```bash
go run ./example/custom_dialector/custom_dialector.go
```
```bash
go run ./example/advanced_options/gorm_advanced_options.go
```
也可以运行整个 `example` 目录里的单个子目录或文件。
@@ -0,0 +1,29 @@
package main
import (
"fmt"
"log"
"time"
"code.yun.ink/pkg/mysqlx"
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
)
func main() {
client, err := mysqlx.NewDB(
mysqlx.WithDSN("user:password@tcp(127.0.0.1:3306)/testdb?parseTime=true&loc=Local"),
mysqlx.WithLogger(logger.Default.LogMode(logger.Info)),
mysqlx.WithNamingStrategy(schema.NamingStrategy{SingularTable: true}),
mysqlx.WithDisableForeignKeyConstraintWhenMigrating(true),
mysqlx.WithSkipDefaultTransaction(true),
mysqlx.WithConnectionPool(5, 20, 15*time.Minute, time.Hour),
)
if err != nil {
log.Fatalf("failed to create mysqlx client: %v", err)
}
defer client.Close()
fmt.Println("MySQL client created with advanced GORM and connection pool options")
_ = client
}
+23
View File
@@ -0,0 +1,23 @@
package main
import (
"fmt"
"log"
"code.yun.ink/pkg/mysqlx"
"gorm.io/gorm/logger"
)
func main() {
client, err := mysqlx.NewDB(
mysqlx.WithDSN("user:password@tcp(127.0.0.1:3306)/testdb?parseTime=true&loc=Local"),
mysqlx.WithLogger(logger.Default.LogMode(logger.Info)),
)
if err != nil {
log.Fatalf("failed to create mysqlx client: %v", err)
}
defer client.Close()
fmt.Println("MySQL client created with raw DSN")
_ = client
}
@@ -0,0 +1,24 @@
package main
import (
"fmt"
"log"
"code.yun.ink/pkg/mysqlx"
"gorm.io/driver/sqlite"
"gorm.io/gorm/logger"
)
func main() {
client, err := mysqlx.NewDB(
mysqlx.WithDialector(sqlite.Open("file::memory:?cache=shared")),
mysqlx.WithLogger(logger.Default.LogMode(logger.Info)),
)
if err != nil {
log.Fatalf("failed to create mysqlx client with custom dialector: %v", err)
}
defer client.Close()
fmt.Println("MySQL SDK client created with custom Dialector")
_ = client
}
+41
View File
@@ -0,0 +1,41 @@
package main
import (
"fmt"
"log"
"time"
"code.yun.ink/pkg/mysqlx"
"github.com/go-sql-driver/mysql"
"gorm.io/gorm/logger"
)
func main() {
cfg := mysql.NewConfig()
cfg.User = "testuser"
cfg.Passwd = "password"
cfg.Net = "tcp"
cfg.Addr = "127.0.0.1:3306"
cfg.DBName = "testdb"
cfg.ParseTime = true
cfg.Loc = time.Local
cfg.Params = map[string]string{
"charset": "utf8mb4",
}
client, err := mysqlx.NewDB(
mysqlx.WithDSNConfig(cfg),
mysqlx.WithDSNTimeout(5*time.Second),
mysqlx.WithDSNReadTimeout(10*time.Second),
mysqlx.WithDSNWriteTimeout(10*time.Second),
mysqlx.WithDSNParams(map[string]string{"multiStatements": "true"}),
mysqlx.WithLogger(logger.Default.LogMode(logger.Warn)),
)
if err != nil {
log.Fatalf("failed to create mysqlx client: %v", err)
}
defer client.Close()
fmt.Println("MySQL client created with expanded DSN configuration")
_ = client
}