Beerus-DB数据库操作框架
Beerus-DB,是 Beerus 的子项目之一,是一个数据库操作框架,用到了[go-sql-driver/mysql]来做数据库连接与基础操作,在此基础上做了很多扩展,比如:连接池管理,多数据源,事务管理,单表无sql操作,多表以及复杂操作可以自己写sql,sql支持{}占位符,可以用struct作为参数来操作数据库等
文档
示例
单表操作
根据条件查询单表数据
conditions := make([]*entity.Condition,0)
conditions = append(conditions, entity.GetCondition("id > ?", 10))
conditions = append(conditions, entity.GetCondition("and (user_name = ? or age > ?)", "bee", 18))
conditions = append(conditions, entity.GetCondition("order by create_time desc", entity.NotWhere))
resultMap, err := operation.GetDBTemplate("Data source name").Select("table name", conditions)
根据条件修改单表数据
// Conditions set
conditions := make([]*entity.Condition,0)
conditions = append(conditions, entity.GetCondition("id = ?", 1))
// Data settings to be modified
data := ResultStruct{UserName: "TestNoSqlUpdate"}
// Execute the modification operation
result, err := operation.GetDBTemplate("Data source name").Update("table name", dbutil.StructToMapIgnore(&data, data, true),conditions)
根据条件删除单表数据
// Set delete conditions
conditions := make([]*entity.Condition,0)
conditions = append(conditions, entity.GetCondition("id = ?", 2))
// Perform a delete operation
_, 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, data, true))
自定义sql
查询
// struct参数
res := ResultStruct{Id: 1}
// 查多条, 注:这里需要用到占位符
resultMap, err := operation.GetDBTemplate("Data source name").SelectListByMap("select * from xt_message_board where id < {id}", dbutil.StructToMap(&res, res))
// 查一条, 注:这里需要用到占位符
resultMap, err := operation.GetDBTemplate("Data source name").SelectOneByMap("select * from xt_message_board where id < {id}", dbutil.StructToMap(&res, res))
增删改
res := ResultStruct{Id: 1, UserName: "TestUpdateByMap"}
// 无论是增删改,都是调用ExecByMap函数,将sql和参数传入即可,注:这里需要用到占位符
operation.GetDBTemplate("Data source name").ExecByMap("update xt_message_board set user_name = {user_name} where id = {id}", dbutil.StructToMap(&res, res))
分页查询
data := ResultStruct{
UserName: "TestNoSqlInsert",
UserEmail: "xxxxx@163.com",
}
// 创建分页参数
param := entity.PageParam{
CurrentPage: 1, // 第几页
PageSize: 20, // 每页多少条
Params: dbutil.StructToMap(&data, 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, res))
if err != nil {
// 如果有问题就回滚事务
db.Rollback(id)
t.Error("TestUpdateTx: " + err.Error())
return
}
// 提交事务
db.Commit(id)
想了解更多的话,可以查阅我们的文档哦
评论