ShardingSphere-Proxy分表場景:go測試案例

接續上篇文章《ShardingSphere-Proxy分表場景測試案例》

go測試用例:

package mainimport ("fmt""math/rand""time""github.com/bwmarrin/snowflake""gorm.io/driver/mysql""gorm.io/gorm""gorm.io/gorm/logger"
)var globalDB *gorm.DBtype Order struct {ID        int64  `gorm:"primaryKey"`OrderId   string `gorm:"sharding:order_id"` // 指明 OrderId 是分片鍵UserID    int64  `gorm:"sharding:user_id"`ProductID int64OrderDate int64
}type Product struct {ID   int64  `gorm:"primaryKey"`Name string `gorm:"name"`
}// 定義結構體,用于接收查詢結果
type OrderGroup struct {ID         int64  `gorm:"primaryKey"`OrderId    string `gorm:"sharding:order_id"` // 指明 OrderId 是分片鍵UserID     int64  `gorm:"sharding:user_id"`ProductID  int64OrderDate  int64SumProduct int64MaxProduct int64
}type OrderProduct struct {OrderProduct
}type User struct {ID   int64  `gorm:"primaryKey"`Name string `gorm:"name"`
}type OrderUser struct {OrderUser
}func main() {InitDb()// 示例:插入訂單數據InsertRandomOrders()// 示例:插入product數據InsertRandomProducts()// 示例:插入user數據InsertRandomUsers()// 場景1:全表查詢,不含分表鍵FindAllOrders()// 場景2:根據訂單號查詢訂單,不含分表健FindOrderByOrderId("20240101ORDER9503")// 場景3:根據用戶ID查詢訂單,含分表健FindOrderByUserID(8648)// 場景4:等值查詢,根據訂單id和product_id查詢訂單。不包含分表健FindOrderByOrderIdAndProductID("20240101ORDER6546", 861)// 場景5:等值查詢,根據用戶id和product_id查詢訂單。包含分表健FindOrderByUserIDAndProductID(4581, 213)// 場景6:in查詢,根據用戶id查詢訂單。包含分表健FindOrderByUserIDIn([]int64{2608, 4581, 2142, 3519})// 場景7:in查詢,根據order_id查詢訂單。不包含分表健FindOrderByOrderIdIn([]string{"20240101ORDER6546", "20250101ORDER2295", "20250101ORDER4465", "20240101ORDER7826"})// 場景8:between查詢,根據order_id查詢訂單。不包含分表健FindOrderByOrderIdBetween("20240101ORDER6546", "20240101ORDER6548")// 場景9:beteeen查詢,根據user_id查詢訂單。包含分表健FindOrderByUserIDBetween(4581, 4583)// 場景10:or查詢,根據order_id查詢訂單。不包含分表健FindOrderByOrderIdOr("20240101ORDER6546", "20250101ORDER2295")// 場景11:or查詢,根據user_id查詢訂單。包含分表健FindOrderByUserIDOr(4581, 3519)// 場景12:>查詢,根據order_id查詢訂單。不包含分表健FindOrderByOrderIdGt("20240101ORDER6546")// 場景13:>查詢,根據user_id查詢訂單。包含分表健FindOrderByUserIDGt(4581)// 場景14:累加聚合查詢,根據order_id查詢訂單。不包含分表健FindOrderByOrderIdSum("20240101ORDER6546")// 場景15:累加聚合查詢,根據user_id查詢訂單。包含分表健FindOrderByUserIDSum(4581)// 場景16:count查詢,根據order_id查詢訂單。不包含分表健FindOrderByOrderIdCount("20240101ORDER6546")// 場景17:count查詢,根據user_id查詢訂單。包含分表健FindOrderByUserIDCount(4581)// 場景18:count查詢,全表查詢。不包含分表健FindAllOrdersCount()// 場景19:sum查詢,全表查詢。不包含分表健FindAllOrdersSum()// 場景20:比較聚合查詢,max查詢,全表查詢。不包含分表健FindAllOrdersMax()// 場景21:比較聚合查詢,min查詢,全表查詢。不包含分表健FindAllOrdersMin()// 場景22:平均聚合查詢,全表查詢。不包含分表健FindAllOrdersAvg()// 場景23:分組聚合查詢,根據order_id分組查詢。不包含分表健FindOrderByOrderIdGroupBy()// 場景24:分組聚合查詢,根據user_id分組查詢。包含分表健FindOrderByUserIDGroupBy()// 場景25:排序、分頁查詢,根據order_id排序,查詢第2頁數據。不包含分表健FindOrderByOrderIdOrderPage(1, 5)// 場景26:排序、分頁查詢,根據user_id排序,查詢第2頁數據。包含分表健FindOrderByUserIDOrderPage(1, 5)// 場景27:去重查詢,根據order_id去重,查詢訂單。不包含分表健FindOrderByOrderIdDistinct()// 場景28:去重查詢,根據user_id去重,查詢訂單。包含分表健FindOrderByUserIDDistinct()// 場景29:join查詢,order表和product表關聯查詢。join條件不包含分表健FindOrderJoinProduct()// 場景30:join查詢,order表和user表關聯查詢。join條件包含分表健FindOrderJoinUser()// 場景31:子查詢,order表和product表關聯查詢作為子查詢,查詢訂單。join條件不包含分表健FindOrderSubQueryProduct()// 場景32:子查詢,order表和user表關聯查詢作為子查詢,查詢訂單。join條件包含分表健FindOrderSubQueryUser()// 場景33:where in 子查詢表FindOrderInSubQuery()// 場景34:union查詢。包含分表健FindOrderUnion()// 場景35:union all查詢。包含分表健FindOrderUnionAll()// 場景36:union 查詢。不包含分表健FindOrderUnionByOrderId()// 場景37:union all查詢。不包含分表健FindOrderUnionAllByOrderId()// 場景38:根據主鍵更新UpdateOrderByID(1866023311733952512, 1)// 場景39:場景39:根據分表鍵更新UpdateOrderByUserID(9148, 1)// 場景40:根據主鍵刪除DeleteOrderByID(1866023311071252480)// 場景41:根據分表鍵刪除DeleteOrderByUserID(4389)
}// 生成product數據插入
func InsertRandomProducts() {// 查詢所有訂單var orders []Ordererr := globalDB.Table("orders").Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return}// 生成product數據for _, order := range orders {product := Product{ID:   order.ProductID,Name: fmt.Sprintf("product_%04d", order.ProductID),}InsertProduct(product)}
}// 插入product數據
func InsertProduct(product Product) error {err := globalDB.Table("product").Create(&product).Errorif err != nil {fmt.Println("Error creating product:", err)}return nil
}// 生成user數據插入
func InsertRandomUsers() {// 查詢所有訂單var orders []Ordererr := globalDB.Table("orders").Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return}// 生成user數據for _, order := range orders {user := User{ID:   order.UserID,Name: fmt.Sprintf("user_%04d", order.UserID),}InsertUser(user)}
}// 插入user數據
func InsertUser(user User) error {err := globalDB.Table("user").Create(&user).Errorif err != nil {fmt.Println("Error creating user:", err)}return nil
}// 隨機生成一些訂單數據插入
func InsertRandomOrders() {node, err := snowflake.NewNode(1)if err != nil {fmt.Println("Error creating snowflake node:", err)return}now := time.Now()for i := 0; i < 10; i++ {// 雪花id生成// 生成一個IDid := node.Generate()order := Order{ID:        id.Int64(),OrderId:   fmt.Sprintf("20240101ORDER%04d", rand.Int31n(10000)),UserID:    int64(rand.Int31n(10000)),ProductID: int64(rand.Int31n(1000)),OrderDate: now.Unix(),}InsertOrder(order)}// orderDate 用2025年,拼接當前月,日,時,分秒orderDate := time.Date(2025, now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second(), 0, time.UTC)for i := 0; i < 10; i++ {id := node.Generate()order := Order{ID:        id.Int64(),OrderId:   fmt.Sprintf("20250101ORDER%04d", rand.Int31n(10000)),UserID:    int64(rand.Int31n(10000)),ProductID: int64(rand.Int31n(1000)),OrderDate: orderDate.Unix(),}InsertOrder(order)}
}// 插入訂單數據
func InsertOrder(order Order) error {err := globalDB.Create(&order).Errorif err != nil {fmt.Println("Error creating order:", err)}return nil
}// 場景1:全表查詢,不含分表鍵
func FindAllOrders() ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景1:全表查詢,不含分表鍵 orders:", orders)return orders, err
}// 場景2:根據訂單號查詢訂單,不含分表健
func FindOrderByOrderId(orderId string) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("order_id=?", orderId).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景2:根據訂單號查詢訂單,不含分表健 orders:", orders)return orders, err
}// 場景3:根據用戶ID查詢訂單,含分表健
func FindOrderByUserID(userID int64) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("user_id=?", userID).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景3:根據用戶ID查詢訂單,含分表健 orders:", orders)return orders, err
}// 場景4:等值查詢,根據訂單id和product_id查詢訂單。不包含分表健
func FindOrderByOrderIdAndProductID(orderId string, productID int64) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("order_id=? AND product_id=?", orderId, productID).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景4:等值查詢,根據訂單id和product_id查詢訂單 orders:", orders)return orders, err
}// 場景5:等值查詢,根據用戶id和product_id查詢訂單。包含分表健
func FindOrderByUserIDAndProductID(userID int64, productID int64) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("user_id=? AND product_id=?", userID, productID).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景5:等值查詢,根據用戶id和product_id查詢訂單 orders:", orders)return orders, err
}// 場景6:in查詢,根據用戶id查詢訂單。包含分表健
func FindOrderByUserIDIn(userIDs []int64) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("user_id IN ?", userIDs).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景6:in查詢,根據用戶id查詢訂單 orders:", orders)return orders, err
}// 場景7:in查詢,根據order_id查詢訂單。不包含分表健
func FindOrderByOrderIdIn(orderIDs []string) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("order_id IN ?", orderIDs).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景7:in查詢,根據order_id查詢訂單 orders:", orders)return orders, err
}// 場景8:between查詢,根據order_id查詢訂單。不包含分表健
func FindOrderByOrderIdBetween(orderID1, orderID2 string) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("order_id BETWEEN ? AND ?", orderID1, orderID2).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景8:between查詢,根據order_id查詢訂單 orders:", orders)return orders, err
}// 場景9:beteeen查詢,根據user_id查詢訂單。包含分表健
// 包含分表健的between查詢,似乎不支持。allow-range-query-with-inline-sharding設置為true,可以支持,這個場景待重新測試。
func FindOrderByUserIDBetween(userID1, userID2 int64) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("user_id BETWEEN ? AND ?", userID1, userID2).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景9:beteeen查詢,根據user_id查詢訂單 orders:", orders)return orders, err
}// 場景10:or查詢,根據order_id查詢訂單。不包含分表健
func FindOrderByOrderIdOr(orderID1, orderID2 string) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("order_id = ? OR order_id = ?", orderID1, orderID2).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景10:or查詢,根據order_id查詢訂單 orders:", orders)return orders, err
}// 場景11:or查詢,根據user_id查詢訂單。包含分表健
func FindOrderByUserIDOr(userID1, userID2 int64) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("user_id = ? OR user_id = ?", userID1, userID2).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景11:or查詢,根據user_id查詢訂單 orders:", orders)return orders, err
}// 場景12:>查詢,根據order_id查詢訂單。不包含分表健
func FindOrderByOrderIdGt(orderID string) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("order_id > ?", orderID).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景12:>查詢,根據order_id查詢訂單 orders:", orders)return orders, err
}// 場景13:>查詢,根據user_id查詢訂單。包含分表健
// 包含分表鍵的>查詢,似乎不支持。allow-range-query-with-inline-sharding設置為true,可以支持,這個場景待重新測試。
func FindOrderByUserIDGt(userID int64) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Where("user_id > ?", userID).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景13:>查詢,根據user_id查詢訂單 orders:", orders)return orders, err
}// 場景14:累加聚合查詢,根據order_id查詢訂單。不包含分表健
func FindOrderByOrderIdSum(orderID string) (int64, error) {var sum int64err := globalDB.Table("orders").Where("order_id=?", orderID).Select("SUM(product_id)").Scan(&sum).Errorif err != nil {fmt.Println("Error finding orders:", err)return 0, err}fmt.Println("場景14:累加聚合查詢,根據order_id查詢訂單 orders:", sum)return sum, err
}// 場景15:累加聚合查詢,根據user_id查詢訂單。包含分表健
func FindOrderByUserIDSum(userID int64) (int64, error) {var sum int64err := globalDB.Table("orders").Where("user_id=?", userID).Select("SUM(product_id)").Scan(&sum).Errorif err != nil {fmt.Println("Error finding orders:", err)return 0, err}fmt.Println("場景15:累加聚合查詢,根據user_id查詢訂單 orders:", sum)return sum, err
}// 場景16:count查詢,根據order_id查詢訂單。不包含分表健
func FindOrderByOrderIdCount(orderID string) (int64, error) {var count int64err := globalDB.Table("orders").Where("order_id=?", orderID).Count(&count).Errorif err != nil {fmt.Println("Error finding orders:", err)return 0, err}fmt.Println("場景16:count查詢,根據order_id查詢訂單 orders:", count)return count, err
}// 場景17:count查詢,根據user_id查詢訂單。包含分表健
func FindOrderByUserIDCount(userID int64) (int64, error) {var count int64err := globalDB.Table("orders").Where("user_id=?", userID).Count(&count).Errorif err != nil {fmt.Println("Error finding orders:", err)return 0, err}fmt.Println("場景17:count查詢,根據user_id查詢訂單 orders:", count)return count, err
}// 場景18:count查詢,全表查詢。不包含分表健
func FindAllOrdersCount() (int64, error) {var count int64err := globalDB.Table("orders").Count(&count).Errorif err != nil {fmt.Println("Error finding orders:", err)return 0, err}fmt.Println("場景18:count查詢,全表查詢 orders:", count)return count, err
}// 場景19:sum查詢,全表查詢。不包含分表健
func FindAllOrdersSum() (int64, error) {var sum int64err := globalDB.Table("orders").Select("SUM(product_id)").Scan(&sum).Errorif err != nil {fmt.Println("Error finding orders:", err)return 0, err}fmt.Println("場景19:sum查詢,全表查詢 orders:", sum)return sum, err
}// 場景20:比較聚合查詢,max查詢,全表查詢。不包含分表健
func FindAllOrdersMax() (int64, error) {var max int64err := globalDB.Table("orders").Select("MAX(user_id)").Scan(&max).Errorif err != nil {fmt.Println("Error finding orders:", err)return 0, err}fmt.Println("場景20:max查詢,全表查詢 orders:", max)return max, err
}// 場景21:比較聚合查詢,min查詢,全表查詢。不包含分表健
func FindAllOrdersMin() (int64, error) {var min int64err := globalDB.Table("orders").Select("MIN(user_id)").Scan(&min).Errorif err != nil {fmt.Println("Error finding orders:", err)return 0, err}fmt.Println("場景21:min查詢,全表查詢 orders:", min)return min, err
}// 場景22:平均聚合查詢,全表查詢。不包含分表健
func FindAllOrdersAvg() (float64, error) {var avg float64err := globalDB.Table("orders").Select("AVG(user_id)").Scan(&avg).Errorif err != nil {fmt.Println("Error finding orders:", err)return 0, err}fmt.Println("場景22:avg查詢,全表查詢 orders:", avg)return avg, err
}// 場景23:分組聚合查詢,根據order_id分組查詢。不包含分表健
func FindOrderByOrderIdGroupBy() error {var orders []OrderGrouperr := globalDB.Table("orders").Group("order_id").Select("*,SUM(product_id) AS sum_product,MAX(product_id) as max_product").Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return err}fmt.Printf("場景23:分組聚合查詢,根據order_id分組查詢 orders:%+v\n", orders)return err
}// 場景24:分組聚合查詢,根據user_id分組查詢。包含分表健
func FindOrderByUserIDGroupBy() error {var orders []OrderGrouperr := globalDB.Table("orders").Group("user_id").Select("*,SUM(product_id) AS sum_product,MAX(product_id) as max_product").Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return err}fmt.Printf("場景24:分組聚合查詢,根據user_id分組查詢 orders:%+v\n", orders)return err
}// 場景25:排序、分頁查詢,根據order_id排序,查詢第2頁數據。不包含分表健
func FindOrderByOrderIdOrderPage(page, pageSize int) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Order("order_id desc").Offset((page - 1) * pageSize).Limit(pageSize).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景25:排序、分頁查詢,根據order_id排序,查詢第2頁數據 orders:", orders)return orders, err
}// 場景26:排序、分頁查詢,根據user_id排序,查詢第2頁數據。包含分表健
func FindOrderByUserIDOrderPage(page, pageSize int) ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Order("user_id desc").Offset((page - 1) * pageSize).Limit(pageSize).Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景26:排序、分頁查詢,根據user_id排序,查詢第2頁數據 orders:", orders)return orders, err
}// 場景27:去重查詢,根據order_id去重,查詢訂單。不包含分表健
func FindOrderByOrderIdDistinct() ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Distinct("order_id").Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景27:去重查詢,根據order_id去重,查詢訂單 orders:", orders)return orders, err
}// 場景28:去重查詢,根據user_id去重,查詢訂單。包含分表健
func FindOrderByUserIDDistinct() ([]Order, error) {var orders []Ordererr := globalDB.Table("orders").Distinct("user_id").Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景28:去重查詢,根據user_id去重,查詢訂單 orders:", orders)return orders, err
}// 場景29:join查詢,order表和product表關聯查詢。join條件不包含分表健
func FindOrderJoinProduct() ([]OrderProduct, error) {var orders []OrderProducterr := globalDB.Table("orders").Joins("JOIN product ON orders.product_id = product.id").Select("orders.*,product.*").Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景29:join查詢,order表和product表關聯查詢 orders:", orders)return orders, err
}// 場景30:join查詢,order表和user表關聯查詢。join條件包含分表健
func FindOrderJoinUser() ([]OrderUser, error) {var orders []OrderUsererr := globalDB.Table("orders").Joins("JOIN user ON orders.user_id = user.id").Select("orders.*,user.*").Find(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景30:join查詢,order表和user表關聯查詢 orders:", orders)return orders, err
}// 場景31:子查詢,order表和product表關聯查詢作為子查詢,查詢訂單。join條件不包含分表健
func FindOrderSubQueryProduct() ([]OrderProduct, error) {var orders []OrderProductsql := `SELECT subquery.* FROM (SELECT orders.* FROM orders JOIN product ON orders.product_id = product.id) AS subquery`err := globalDB.Raw(sql).Scan(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景31:子查詢,order表和product表關聯查詢作為子查詢,查詢訂單 orders:", orders)return orders, err
}// 場景32:子查詢,order表和user表關聯查詢作為子查詢,查詢訂單。join條件包含分表健
func FindOrderSubQueryUser() ([]OrderUser, error) {var orders []OrderUsersql := `SELECT subquery.* FROM (SELECT orders.* FROM orders JOIN user ON orders.user_id = user.id) AS subquery`err := globalDB.Raw(sql).Scan(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景32:子查詢,order表和user表關聯查詢作為子查詢,查詢訂單 orders:", orders)return orders, err
}// 場景33:where in 子查詢表
func FindOrderInSubQuery() ([]Order, error) {var orders []Ordersql := `SELECT * FROM orders WHERE user_id IN (SELECT id FROM user)`err := globalDB.Raw(sql).Scan(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景33:where in 子查詢表 orders:", orders)return orders, err
}// 場景34:union查詢。包含分表健
func FindOrderUnion() ([]Order, error) {var orders []Ordersql := `SELECT * FROM orders WHERE user_id = 8648 UNION SELECT * FROM orders WHERE user_id = 3401`err := globalDB.Raw(sql).Scan(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景34:union查詢 orders:", orders)return orders, err
}// 場景35:union all查詢。包含分表健
func FindOrderUnionAll() ([]Order, error) {var orders []Ordersql := `SELECT * FROM orders WHERE user_id = 8648 UNION ALL SELECT * FROM orders WHERE user_id = 3401`err := globalDB.Raw(sql).Scan(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景35:union all查詢 orders:", orders)return orders, err
}// 場景36:union 查詢。不包含分表健
func FindOrderUnionByOrderId() ([]Order, error) {var orders []Ordersql := `SELECT * FROM orders WHERE order_id = '20240101ORDER6546' UNION SELECT * FROM orders WHERE order_id = '20240101ORDER9728'`err := globalDB.Raw(sql).Scan(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景36:union查詢 orders:", orders)return orders, err
}// 場景37:union all查詢。不包含分表健
func FindOrderUnionAllByOrderId() ([]Order, error) {var orders []Ordersql := `SELECT * FROM orders WHERE order_id = '20240101ORDER6546' UNION ALL SELECT * FROM orders WHERE order_id = '20240101ORDER9728'`err := globalDB.Raw(sql).Scan(&orders).Errorif err != nil {fmt.Println("Error finding orders:", err)return nil, err}fmt.Println("場景37:union all查詢 orders:", orders)return orders, err
}// 場景38:根據主鍵更新
func UpdateOrderByID(ID int64, productID int) error {err := globalDB.Table("orders").Where("id = ?", ID).Update("product_id", productID).Errorif err != nil {fmt.Println("Error updating orders:", err)}return err
}// 場景39:根據分表鍵更新
func UpdateOrderByUserID(userID int64, productID int) error {err := globalDB.Table("orders").Where("user_id = ?", userID).Update("product_id", productID).Errorif err != nil {fmt.Println("Error updating orders:", err)}return err
}// 場景40:根據主鍵刪除
func DeleteOrderByID(ID int64) error {err := globalDB.Table("orders").Where("id = ?", ID).Delete(&Order{}).Errorif err != nil {fmt.Println("Error deleting orders:", err)}return err
}// 場景41:根據分表鍵刪除
func DeleteOrderByUserID(userID int64) error {err := globalDB.Table("orders").Where("user_id = ?", userID).Delete(&Order{}).Errorif err != nil {fmt.Println("Error deleting orders:", err)}return err
}// InitDb 初始化數據庫連接
func InitDb() *gorm.DB {log := logger.Default.LogMode(logger.Info)// 連接到 MySQL 數據庫dsn := "sharding:sharding@tcp(localhost:13308)/sharding"db, err := gorm.Open(mysql.New(mysql.Config{DSN: dsn,}), &gorm.Config{Logger: log,})if err != nil {panic("failed to connect database")}globalDB = dbreturn db
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64689.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

主流在售AI電子寵物產品

市面上已經有許多類型的AI電子寵物產品&#xff0c;它們各具特色&#xff0c;旨在提供情感陪伴、教育娛樂以及智能互動等功能。以下是幾款在市場上較為知名的AI電子寵物玩具&#xff0c;涵蓋了不同的形態和技術特點&#xff1a; 1. Moflin 制造商&#xff1a;日本消費電子公司…

Debian-linux運維-docker安裝和配置

騰訊云搭建docker官方文檔&#xff1a;https://cloud.tencent.com/document/product/213/46000 阿里云安裝Docker官方文檔&#xff1a;https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance 天翼云常見docker源配置指導&#xff1a;htt…

【機器學習 | 數據挖掘】時間序列算法

時間序列是按時間順序排列的、隨時間變化且相互關聯的數據序列。分析時間序列的方法構成數據分析的一個重要領域&#xff0c;即時間序列分析。以下是對時間序列算法的詳細介紹&#xff1a; 一、時間序列的分類 時間序列根據所研究的依據不同&#xff0c;可有不同的分類&#…

Qt6.8.1 Mingw13.1 編譯opencv4.10時cannot convert ‘char*‘ to ‘LPWSTR

當選擇build_world時出錯 G:\ForOpencv4.10\opencv-4.10.0\modules\core\src\utils\filesystem.cpp: In function cv::String cv::utils::fs::getCacheDirectory(const char*, const char*): G:\ForOpencv4.10\opencv-4.10.0\modules\core\src\utils\filesystem.cpp:442:43: e…

MIT S081 Lab 2 System Calls

Lab鏈接 一 實現trace功能 1 題目要求 In this assignment you will add a system call tracing feature that may help you when debugging later labs. You’ll create a new trace system call that will control tracing. It should take one argument, an integer “ma…

[Linux] 服務器CPU信息

&#xff08;1&#xff09;查看CPU信息&#xff08;型號&#xff09; cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c輸出&#xff1a;可以看到有128個虛擬CPU核心&#xff0c;型號是后面一串 128 Intel(R) Xeon(R) Platinum 8336C CPU 2.30GHz&#xff08;2&…

通過無障礙服務(AccessibilityService)實現Android設備全局水印顯示

一、無障礙功能簡介 首先我們先來了解下無障礙功能的官方介紹&#xff1a; 無障礙服務僅應用于幫助殘障用戶使用 Android 設備和應用。它們在后臺運行&#xff0c;并在觸發 AccessibilityEvents 時接收系統的回調。此類事件表示用戶界面中的某些狀態轉換&#xff0c;例如焦點已…

java中多線程的一些常見操作

Java 中的多線程是通過并發編程來提高應用程序的效率和響應速度。Java 提供了多個機制和類來支持多線程編程&#xff0c;包括繼承 Thread 類、實現 Runnable 接口、使用線程池等。以下是 Java 中一些常見的多線程操作和應用場景。 1. 創建線程 1.1 通過繼承 Thread 類創建線程…

使用 Docker 搭建 Hadoop 集群

1.1. 啟用 WSL 與虛擬機平臺 1.1.1. 啟用功能 啟用 WSL并使用 Moba 連接-CSDN博客 1.2 安裝 Docker Desktop 最新版本鏈接&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本鏈接&#xff1a;Docker Desktop release notes | Do…

【每日學點鴻蒙知識】廣告ID、NFC手機充值、CSS支持語法、PC與模擬器交互、SO熱更新等

1、HamonyOS 樣機獲取成功返回Oaid為00000000-0000-0000-0000-000000000000&#xff1f; 請求授權時需要觸發動態授權彈窗,看一下是不是沒有觸發授權彈窗。 可以參考以下代碼以及文檔&#xff1a; // ets import identifier from ohos.identifier.oaid; import hilog from oh…

【YOLO 項目實戰】(12)紅外/可見光多模態目標檢測

歡迎關注『youcans動手學模型』系列 本專欄內容和資源同步到 GitHub/youcans 【YOLO 項目實戰】&#xff08;10&#xff09;YOLO8 環境配置與推理檢測 【YOLO 項目實戰】&#xff08;11&#xff09;YOLO8 數據集與模型訓練 【YOLO 項目實戰】&#xff08;12&#xff09;紅外/可…

logback日志框架源碼分析

目錄 (一)入口:slf4j選擇日志框架 (二)日志框架初始化 (1)logback的3種配置方式 a、BasicConfigurator默認配置 b、SPI方式配置的Configurator實現類 c、通過配置文件初始化 (2)xml配置文件初始化 (三)Logger的創建 (四)打印日志 本文源碼基于:logback版…

國產數據庫OceanBase從入門到放棄教程

1. 介紹 是由螞蟻集團&#xff08;Ant Group&#xff0c;原螞蟻金服&#xff09;自主研發的分布式關系型數據庫。它旨在解決海量數據存儲和高并發訪問的問題&#xff0c;特別適合金融級應用場景&#xff0c;如支付寶等對數據一致性、可靠性和性能有極高要求的服務。以下是關于…

連接Milvus

連接到Milvus 驗證Milvus服務器正在偵聽哪個本地端口。將容器名稱替換為您自己的名稱。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用瀏覽器訪問連接地址htt…

機器學習中的欠擬合

當模型不能夠準確地表達輸入與輸出的關系時&#xff0c;就是欠擬合。它在訓練集和未見過的數據都會產生高誤差率。過度擬合則在訓練集表現出低誤差率&#xff0c;只有對未見過的數據表現出高誤差率。 當模型太過于簡單時&#xff0c;它需要更多的訓練時間、更多的輸入特征、更…

安卓入門二 Kotlin基礎

Kotlin Kotlin的歷史 Kotlin由Jet Brains公司開發設計&#xff0c;2011年公布第一版&#xff0c;2012年開源。 2016年發布1.0正式版&#xff0c;并且Jet Brains在IDEA加入對Kotlin的支持&#xff0c;安卓自此又有新的選擇。 2019年谷歌宣布Kotlin成為安卓第一開發語言&#x…

淺談Cocos2djs逆向

前言 簡單聊一下cocos2djs手遊的逆向&#xff0c;有任何相關想法歡迎和我討論^^ 一些概念 列出一些個人認為比較有用的概念&#xff1a; Cocos遊戲的兩大開發工具分別是CocosCreator和CocosStudio&#xff0c;區別是前者是cocos2djs專用的開發工具&#xff0c;後者則是coco…

STM32驅動NRF24L01

一、NRF24L01的相關介紹 1.2 引腳的介紹 關于SPI的引腳就不再說了&#xff0c;這里介紹其余的兩個引腳&#xff1a; CE 模塊控制引腳&#xff1a;芯片開啟信號&#xff0c;激活RX或TX模式 IRQ 模塊中斷信號輸出引腳&#xff1a;其低電平有效&#xff0c;也就是中斷時變為低電平…

【Python】 glob批處理模塊的學習

1.什么是glob模塊&#xff1f; 在 Python 中&#xff0c;glob模塊是一個用于文件路徑名的模式匹配的工具。它使用簡單的通配符規則來匹配文件和目錄的路徑&#xff0c;這些通配符規則類似于在命令行中使用的文件搜索規則。這使得在處理文件系統中的多個文件或目錄時非常方便&am…

Android 系統 AlarmManager 系統層深度定制

Android 系統 AlarmManager 系統層深度定制 目錄 引言AlarmManager 概述AlarmManager 系統架構AlarmManager 核心代碼解讀AlarmManager 深度定制方法 修改 AlarmManagerService 修改定時任務調度策略增加定時任務類型定制內核層 修改定時觸發精度增加定時觸發類型優化定時任務…