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.mzph.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 修改定时任务调度策略增加定时任务类型定制内核层 修改定时触发精度增加定时触发类型优化定时任务…