package user import ( "bytes" "fmt" "reflect" "strconv" "strings" "text/template" ) const ( COLUMNS = ` id ID, code Code ` SEARCH_COUNT = ` SELECT count(0) count FROM user WHERE 1=1 ` SEARCH = ` SELECT {{COLUMNS}} FROM user LEFT JOIN user ` INSERT = ` {{$size := (len .) |Sub 1}} INSERT INTO sm_user(id,code,name) VALUES {{range $index, $elem := .}} (E_SEQ('sm_user'),'{{.Code}}'){{ if ne $index $size }} ,{{else}};{{end}} {{end}} ` UPDATE = ` UPDATE sm_user set {{if ne .Code ""}} code='{{.Code}}', {{end}} {{if ne .Name ""}} name='{{.Name}}',{{end}} update_time=NOW() WHERE id={{.ID}} ` DELETE = ` UPDATE sm_user set deleted_flag='Y' WHERE id={{.ID}} ` WHERE = ` {{if ne .Code ""}} and smu.code = '{{.Code}}' , {{end}} {{if ne .Name ""}} and smu.name = '{{.Name}}' {{end}} ` ) var ( count *template.Template search *template.Template insert *template.Template update *template.Template delete *template.Template condition *template.Template funcs map[string]interface{} ) //给template添加自定义的方法 func init(){ funcs = template.FuncMap{"Add": Add,"Sub":Sub} } //根据业务组装相应的SQL func assembly(model interface{}, mode string) string { buffer := bytes.NewBufferString("") switch mode { case "searchCount": if count == nil { count = template.New("count") count.Parse(SEARCH_COUNT) } count.Execute(buffer, model) buffer.WriteString(where(model, mode)) break case "get": if count == nil { count = template.New("search") count.Parse(SEARCH_COUNT) } count.Execute(buffer, model) buffer.WriteString(" limit 1") break case "search": if search == nil { search = template.New("search") //此处可以修改为子模板 {{template "COLUMNS" .}} search.Parse(strings.Replace(SEARCH, "{{COLUMNS}}", COLUMNS, -1)) } search.Execute(buffer, model) buffer.WriteString(where(model, mode)) break case "searchPage": if search == nil { search = template.New("search") search.Parse(strings.Replace(SEARCH, "{{COLUMNS}}", COLUMNS, -1)) } search.Execute(buffer, model) buffer.WriteString(where(model, mode)) buffer.WriteString(limit(model)) break case "insert": if insert == nil { insert = template.New("insert") insert.Parse(INSERT) } insert.Execute(buffer, model) break case "batchInsert": if insert == nil { insert = template.New("insert").Funcs(funcs) insert.Parse(INSERT) } insert.Execute(buffer, model) break case "update": if update == nil { update = template.New("update") update.Parse(UPDATE) } update.Execute(buffer, model) break case "delete": if delete == nil { delete = template.New("delete") update.Parse(DELETE) } update.Execute(buffer, model) break } fmt.Println(buffer.String()) return buffer.String() } //条件where func where(model interface{}, mode string) string { buffer := bytes.NewBufferString("") if condition == nil { condition = template.New("where") condition.Parse(WHERE) } condition.Execute(buffer, model) return buffer.String() } //分页limit func limit(model interface{}) string { invoke := reflect.ValueOf(model).Elem() //fmt.Println("%t",invoke.Kind()) //fmt.Println("%t",invoke.FieldByName("PageNo")) pageNo := invoke.FieldByName("PageNo").Int() pageSize := invoke.FieldByName("PageSize").Int() offset := (pageNo - 1) * pageSize return " limit " + strconv.FormatInt(offset, 10) + "," + strconv.FormatInt(pageSize, 10) } func Add(left int, right int) int{ return left+right } func Sub(left int, right int) int{ return right - left }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- iOS后台模式借助位置更新实现
- websocket借助Redis实现实时双工通信
- 借助 Webpack 静态分析能力实现代码动态加载
- [译] 借助 Pod 删除事件的传播实现 Pod 摘流
- 借助wbr标签实现连续英文字符的精准换行
- 借助 Turbolinks 实现不间断的网页音乐播放器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
电子商务:管理与社交网络视角(原书第7版)
(美)埃弗雷姆·特班(Efraim Turban)、戴维.金(David King)、李在奎、梁定澎、德博拉·特班(Deborrah Turban) / 时启亮、陈育君、占丽 / 机械工业出版社 / 2014-1-1 / 79.00元
本书对电子学习、电子政务、基于web的供应链、协同商务等专题进行了详细的介绍,全书涵盖丰富的资料以及个案,讨论了Web 2.0环境内的产业结构、竞争变化以及对当今社会的影响。另外,本书在消费者行为、协同商务、网络安全、网络交易及客户管理管理、电子商务策略等内容上都有最新的改编,提供读者最新颖的内容,贴近当代电子商务的现实。 本书适合高等院校电子商务及相关专业的本科生、研究生及MBA学员,也可......一起来看看 《电子商务:管理与社交网络视角(原书第7版)》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
HTML 编码/解码
HTML 编码/解码