Beerus-DB,是Beerus的子项目之一,是一个数据库操作框架,用到了[go-sql-driver/mysql]来做数据库连接与基础操作,在此基础上做了很多扩展,比如:连接池管理,多数据源,事务管理,单表无sql操作,多表以及复杂操作可以自己写sql,sql支持{}占位符,可以用struct作为参数来操作数据库等
文档https://beeruscc.com/beerusdb
示例单表操作根据条件查询单表数据coditios:=make([]*etity.Coditio,0)coditios=apped(coditios,etity.GetCoditio("id>?",10))coditios=apped(coditios,etity.GetCoditio("ad(user_ame=?orage>?)","bee",18))coditios=apped(coditios,etity.GetCoditio("orderbycreate_timedesc",etity.NotWhere))resultMap,err:=operatio.GetDBTemplate("Datasourceame").Select("tableame",coditios)根据条件修改单表数据//Coditiossetcoditios:=make([]*etity.Coditio,0)coditios=apped(coditios,etity.GetCoditio("id=?",1))//Datasettigstobemodifieddata:=ResultStruct{UserName:"TestNoSqlUpdate"}//Executethemodificatiooperatioresult,err:=operatio.GetDBTemplate("Datasourceame").Update("tableame",dbutil.StructToMapIgore(&data,data,true),coditios)根据条件删除单表数据//Setdeletecoditioscoditios:=make([]*etity.Coditio,0)coditios=apped(coditios,etity.GetCoditio("id=?",2))//Performadeleteoperatio_,err:=operatio.GetDBTemplate("Datasourceame").Delete("tableame",coditios)插入一条数据data:=ResultStruct{UserName:"TestNoSqlIsert",UserEmail:"xxxxx@163.com",UpdateTime:"2021-12-0913:50:00",}result,err:=operatio.GetDBTemplate("Datasourceame").Isert("tableame",dbutil.StructToMapIgore(&data,data,true))自定义sql查询
//struct参数res:=ResultStruct{Id:1}//查多条,注:这里需要用到占位符resultMap,err:=operatio.GetDBTemplate("Datasourceame").SelectListByMap("select*fromxt_message_boardwhereid<{id}",dbutil.StructToMap(&res,res))//查一条,注:这里需要用到占位符resultMap,err:=operatio.GetDBTemplate("Datasourceame").SelectOeByMap("select*fromxt_message_boardwhereid<{id}",dbutil.StructToMap(&res,res))增删改
res:=ResultStruct{Id:1,UserName:"TestUpdateByMap"}//无论是增删改,都是调用ExecByMap函数,将sql和参数传入即可,注:这里需要用到占位符operatio.GetDBTemplate("Datasourceame").ExecByMap("updatext_message_boardsetuser_ame={user_ame}whereid={id}",dbutil.StructToMap(&res,res))分页查询data:=ResultStruct{UserName:"TestNoSqlIsert",UserEmail:"xxxxx@163.com",}//创建分页参数param:=etity.PageParam{CurretPage:1,//第几页PageSize:20,//每页多少条Params:dbutil.StructToMap(&data,data),//查询参数}//执行查询操作result,err:=operatio.GetDBTemplate("Datasourceame").SelectPage("select*fromxt_message_boardwhereuser_ame={user_ame}aduser_email={user_email}",param)事务管理//开启事务id,err:=db.Trasactio()iferr!=il{t.Error("TestUpdateTx:"+err.Error())retur}res:=ResultStruct{Id:1,UserName:"TestUpdateTx"}//注:这里使用的不是GetDBTemplate,ExecByMap,而是GetDBTemplateTx和ExecByTxMap//使用事务和不使用事务,在调用的函数上,区别就是多了个Txss,err:=operatio.GetDBTemplateTx(id,"dbPoolTest").ExecByTxMap("updatext_message_boardsetuser_ame={user_ame}whereid={id}",dbutil.StructToMap(&res,res))iferr!=il{//如果有问题就回滚事务db.Rollback(id)t.Error("TestUpdateTx:"+err.Error())retur}//提交事务db.Commit(id)想了解更多的话,可以查阅我们的文档哦
评论