Beerus-DB 是 Beerus 的一个数据库操作组件,支持多数据源,连接池管理,单表操作不需要写 sql ,查询结果可以映射到 struct ,废话不多说,直接上示例。
conditions := builder.Create().
Add("id > ?", 10).
Add("and (user_name = ? or age > ?)", "bee", 18).
Add("order by create_time desc", entity.NotWhere).
Build()
resultMap, err := operation.GetDBTemplate("Data source name").Select("table name", conditions)
// 条件设定
conditions := builder.Create().
Add("id = ?", 1).
Build()
// 要修改的数据设定
data := ResultStruct{UserName: "TestNoSqlUpdate"}
// 执行修改操作
result, err := operation.GetDBTemplate("Data source name").Update("table name", dbutil.StructToMapIgnore(&data, true),conditions)
// 设定删除条件
conditions := builder.Create().
Add("id = ?", 2).
Build()
// 执行删除操作
_, err := operation.GetDBTemplate("Data source name").Delete("table name", conditions)
data := ResultStruct{
UserName: "TestNoSqlInsert",
UserEmail: "xxxxx@163.com",
UpdateTime: "2021-12-09 13:50:00",
}
result, err := operation.GetDBTemplate("Data source name").Insert("table name", dbutil.StructToMapIgnore(&data, true))
param := make([]interface{}, 1)
param[0] = 1
// 查多条
resultMap, err := operation.GetDBTemplate("Data source name").SelectList("select * from xt_message_board where id = ?", param)
// 查一条
resultMap, err := operation.GetDBTemplate("Data source name").SelectOne("select * from xt_message_board where id = ?", param)
data := ResultStruct{
UserName: "TestNoSqlInsert",
UserEmail: "xxxxx@163.com",
}
// 创建分页参数
param := entity.PageParam{
CurrentPage: 1, // 第几页
PageSize: 20, // 每页多少条
Params: dbutil.StructToMap(&data), // 查询参数
}
// 执行查询操作
result, err := operation.GetDBTemplate("Data source name").SelectPage("select * from xt_message_board where user_name = {user_name} and user_email = {user_email}", param)
// 开启事务
id, err := db.Transaction()
if err != nil {
t.Error("TestUpdateTx: " + err.Error())
return
}
res := ResultStruct{Id: 1, UserName: "TestUpdateTx"}
// 注:这里使用的不是 GetDBTemplate ,ExecByMap ,而是 GetDBTemplateTx 和 ExecByTxMap
// 使用事务和不使用事务,在调用的函数上,区别就是多了个 Tx
ss, err := operation.GetDBTemplateTx(id, "dbPoolTest").ExecByTxMap("update xt_message_board set user_name = {user_name} where id = {id}", dbutil.StructToMap(&res))
if err != nil {
// 如果有问题就回滚事务
db.Rollback(id)
t.Error("TestUpdateTx: " + err.Error())
return
}
// 提交事务
db.Commit(id)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.