当前位置: 首页 > news >正文

郑州企业网站排名优化哪家好代写文章兼职

郑州企业网站排名优化哪家好,代写文章兼职,广东网站建设哪家好,个人建设门户网站 如何备案【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 对所有关系数据的操作都只有CRUD,采用Go 的接口interface{}重构代码…

【REST2SQL】01RDB关系型数据库REST初设计
【REST2SQL】02 GO连接Oracle数据库
【REST2SQL】03 GO读取JSON文件
【REST2SQL】04 REST2SQL第一版Oracle版实现
【REST2SQL】05 GO 操作 达梦 数据库

对所有关系数据的操作都只有CRUD,采用Go 的接口interface{}重构代码,代码更简洁、易维护。

1 创建接口声明包

在 REST2sql目录下创建一个dbif的子目录,在此子目录下创建dbif.go包,文件组织结构如下图:
在这里插入图片描述
接口包代码如下:

// 数据库接口定义
package dbif// 数据库操作接口
type CRUD interface {InsertData(string) string //插入,返回影响行数json字符串SelectData(string) string //查询, 返回查询结果json字符串UpdateData(string) string //更新,返回影响行数json字符串DeleteData(string) string //删除,返回影响行数json字符串IsResource(string) bool   //在系统对象表总查找资源是否有效,用户表或视图
}

2 dboracle包重构

2.1 引入接口包dbif

import ("database/sql/driver""encoding/json""io""log""rest2sql/config"db "rest2sql/dbif" //数据库接口包"strings"go_ora "github.com/sijms/go-ora/v2" // 1 go get github.com/sijms/go-ora/v2
)

2.2 声明CRUD4Oracle结构体

作为接口函数的接收者,或者说接口绑定对象。

type CRUD4Oracle struct {//Oracle的CRUD操作,结构体
}

2.3 创建New()构造函数

直接返回,结构体指针。

func New() db.CRUD {//创建结构体CRUD4Oraclereturn &CRUD4Oracle{}
}

2.4 实现接口的全部函数或方法

原来的CRUD函数加上接受者即可,或者说绑定结构体

// delete
func (crud *CRUD4Oracle) DeleteData(deleteSql string) string {}
// update
func (crud *CRUD4Oracle) UpdateData(updateSql string) string {}
// insert
func (crud *CRUD4Oracle) InsertData(insertSql string) string {}
// select查询,结果为json
func (crud *CRUD4Oracle) SelectData(sqls string) string {}

原来dothing包的资源检查函数 isRes( resName string) bool ,用接口重构,不同数据库实现稍微不同。

// REST请求时检查资源是否有效
func (crud *CRUD4Oracle) IsResource(resName string) bool {icurd := New()resname := strings.ToUpper(resName)resSQL := "select object_name from user_objects where object_type in ('TABLE','VIEW') and object_name = '" + resname + "'"//执行数据库查询result := icurd.SelectData(resSQL)//检查数据库是否有此表if strings.Contains(result, resname) {return true} else {return false}
}

3 dbdm包重构

和oracle重构类似,只有结构体和New() 不同

3.1 引入dbif包

import db "rest2sql/dbif"

3.2 声明CRUD4Dm结构体

type CRUD4Dm struct {//Dm的CRUD操作,结构体
}

3.3 创建New()构造函数

func New() db.CRUD {//创建结构体CRUD4Dmreturn &CRUD4Dm{}
}

3.4 实现接口的全部函数或方法

原来的CRUD函数加上接受者即可,或者说绑定结构体

/* 往表插入数据 */
func (crud *CRUD4Dm) InsertData(insertSql string) string {}
/* 删除表数据 */
func (crud *CRUD4Dm) DeleteData(deleteSql string) string {}
/* 修改表数据 */
func (crud *CRUD4Dm) UpdateData(updateSql string) string {}
/* 查询表数据 */
func (crud *CRUD4Dm) SelectData(sqlSelect string) string {}// REST请求时检查资源是否有效
func (crud *CRUD4Dm) IsResource(resName string) bool {icurd := New()resname := strings.ToUpper(resName)resSQL := "select object_name from user_objects where object_type in ('TABLE','VIEW') and object_name = '" + resname + "'"//执行数据库查询result := icurd.SelectData(resSQL)//检查数据库是否有此表if strings.Contains(result, resname) {return true} else {return false}
}

4 Dothing包的重构

4.1 引入接口和数据库包

// dothing project dothing.go
package dothingimport ("encoding/json""fmt""net/http""rest2sql/config"dm "rest2sql/dbdm"db "rest2sql/dbif"ora "rest2sql/dboracle""strings"
)

4.2 声明接口全局变量

// 当前连接的数据库类型oracle
var (DBType string = config.Conf.DBType //数据库类型REST   string = config.Conf.REST   //支持的REST:GET,POST,PUT,DELETESQL    string = config.Conf.SQL    //支持的SQL:SELECT,INSERT,UPDATE,DELETE
)
// 声明CRUD操作的全局接口变量
var Icrud db.CRUD

4.3 创建全局变量构造函数createDBType

// 根据数据库类型,创建crud对象
func createDBType() {switch DBType {case "oracle":Icrud = ora.New()case "dm":// 达梦Icrud = dm.New()default:// 不支持的数据库}
}// 调用接口函数
// 根据请求类型参数执行不同的操作 
func DoThing(w http.ResponseWriter, req map[string]interface{}) {//创建数据库接口createDBType()w.Write([]byte("\n"))//请求类型 REST or SQLswitch req["RESTorSQL"] {case "REST"://REST请求方法过滤sMethod := strings.ToUpper(req["Method"].(string))if !strings.Contains(REST, sMethod) {w.Write([]byte("!!!不准许的REST请求,检查配置文件config.json的REST项。"))return}//执行REST请求doREST(w, req)case "SQL"://SQL过滤resSQL := req["ResName"].(string)sqlToUpper := strings.ToUpper(resSQL)sql6 := sqlToUpper[:6]if !strings.Contains(SQL, sql6) {w.Write([]byte("!!!不准许的SQL请求,检查配置文件config.json的SQL项。"))return}//执行SQLdoSQL(w, req)}
}

4.4 检查资源是否有效的调用

//资源名resName := req["ResName"].(string)// 检查是否有效资源if !Icrud.IsResource(resName) {//if !isRes(resName) {w.Write([]byte("\nerror:无效资源" + resName))return} else {//w.Write([]byte("\nresName:" + resName))}

4.5 doSQL重构

重构了switch case

// 根据请求参数执行不同的操作 
func doSQL(w http.ResponseWriter, req map[string]interface{}) {//w.Write([]byte("\ndoSQL()\n"))w.Write([]byte("\"Response\":"))//资源名sql语句resSQL := req["ResName"].(string)fmt.Println("SQL://", resSQL)sqlToUpper := strings.ToUpper(resSQL)sql6 := sqlToUpper[:6]var result stringswitch sql6 {case "SELECT":result = Icrud.SelectData(resSQL)case "INSERT":result = Icrud.InsertData(resSQL)case "UPDATE":result = Icrud.UpdateData(resSQL)case "DELETE":result = Icrud.DeleteData(resSQL)default:// 过滤sql ,只能执行 SELECT INSERT UPDATE DELETEresult = "\"只能执行 SELECT INSERT UPDATE DELETE\""}fmt.Println("SQL://", resSQL)w.Write([]byte(result))w.Write([]byte("}"))
}

4.6 REST4种请求的重构

// get
//执行 sql并返回 json 结果fmt.Println("REST://", selectSQL)result := Icrud.SelectData(selectSQL)
// post
//执行 insertSQL 并返回 json 结果fmt.Println("REST://:", insertSQL)result := Icrud.InsertData(insertSQL)
// put 
//执行 insertSQL 并返回 json 结果fmt.Println("REST://", updateSQL)result := Icrud.UpdateData(updateSQL)
// delete
//执行 sql并返回 json 结果fmt.Println("REST://", deleteSQL)result := Icrud.DeleteData(deleteSQL)

5 测试结果

总体代码组织
在这里插入图片描述

Oracle OK
达梦dm OK

控制台执行日志:
在这里插入图片描述

浏览器请求及返回:

在这里插入图片描述

《06 完》

http://www.hkea.cn/news/471050/

相关文章:

  • 百度网站排名关键词整站优化培训网站建设
  • 网络平台代理seo外包 杭州
  • 东方头条网站源码免费推广软件工具
  • 北京网站建设公司分享网站改版注意事项流程优化四个方法
  • 案例学 网页设计与网站建设手机百度seo快速排名
  • 江门网站建设总部电话产品推广渠道有哪些
  • 网站建设全攻略站长之家ping检测
  • 导航网站 cmsgoogle chrome谷歌浏览器
  • wordpress看其他人博客优化师是做什么的
  • 现在哪个网站还做白拿2021小说排行榜百度风云榜
  • 网站流量seo提升seo排名的方法
  • 做html网站模板下载地址网站页面布局和样式设计
  • 公司网站邮箱费用磁力宅在线搜种子
  • wordpress 缺少临时文件夹刷关键词优化排名
  • 做网站要有什么团队淘宝关键词排名查询工具
  • 开源门户网站源码宁波谷歌seo
  • wordpress+一页一屏seo关键技术有哪些
  • 学校校园网站建设实施方案精准营销的案例
  • 腾讯云服务器可以做网站可以推广发广告的app
  • seo外链友情链接网站运营推广选择乐云seo
  • 做网站 要学 什么语言网站优化公司
  • 天乐测绘网做网站吗搜索引擎广告图片
  • 湖南营销型网站建设多少钱百度关键词优化软件网站
  • 怎样给网站做关键词优化百度词条
  • 做网站哪个平台搭建网站需要什么技术
  • 做gif图的网站简述网络营销的主要方法
  • 做图网站被告seo视频网页入口网站推广
  • 做的网站底部应该标注什么意思免费文案素材网站
  • 企业网站搜索引擎拓客农夫山泉软文300字
  • 青岛黄岛区网站开发武汉seo优化