Go 开发的 数据库操作框架

2022-03-04 17:04:57 +08:00
 Joker123456789

项目简介

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))

自定义 sql 操作

根据数组参数查询

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)

可以访问官网了解更多

https://beeruscc.com/cn/

2674 次点击
所在节点    Go 编程语言
13 条回复
mmrx
2022-03-04 17:16:35 +08:00
和 Gorm 相比如何?
Joker123456789
2022-03-04 17:28:45 +08:00
@mmrx 不敢跟 Gorm 比较,毕竟那是一个团队开发了很久的,而我这个框架 年龄还不到 1 岁。

Beerus-DB 是主打 小型,快速开发的,不是 ORM 框架,主要还是以写 SQL 为主
qq1340691923
2022-03-04 17:43:30 +08:00
已 star ,加油
zoharSoul
2022-03-04 18:03:52 +08:00
感觉没有你发的那个 java 的舒服啊
FrankAdler
2022-03-04 21:10:10 +08:00
那与 sqlx 相比呢
roy2220
2022-03-04 23:12:00 +08:00
FrankAdler
2022-03-05 00:51:21 +08:00
@roy2220 #6 又杀出来一个,跟 sqlx 有啥区别,少了几个方法?
roy2220
2022-03-05 10:48:18 +08:00
@FrankAdler 轻量——实现在 100 行代码以内,逻辑非常简单,没有使用反射
gowk
2022-03-05 11:00:08 +08:00
aurtech
2022-03-10 17:51:31 +08:00
坐标深圳,求一枚 Golang 大佬!!欢迎砸简历 V:Ifboredgunquxuexi.
aurtech
2022-03-10 18:13:54 +08:00
@FrankAdler 坐标深圳,求一枚 Golang 大佬!!欢迎砸简历 V:Ifboredgunquxuexi.
luckyman
2022-05-10 11:25:41 +08:00
个人感觉不如直接写 sql ,自己封装了反而不够灵活。如果仅仅为了提升开发效率可以用代码生成路线,我自己开发了一个有兴趣我可以发出来
Joker123456789
2022-05-10 17:26:38 +08:00
@luckyman 本来就是直接写 sql 啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838006

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX