Skip to content

Commit

Permalink
添加模板概念测试
Browse files Browse the repository at this point in the history
  • Loading branch information
zhuxiujia committed Feb 11, 2019
1 parent 9ccfb9c commit c54363b
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 14 deletions.
9 changes: 9 additions & 0 deletions ElementType.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,12 @@ const (
Element_where ElementType = "where"
Element_Include ElementType = "include"
)

func isMethodElement(tag ElementType) bool {
switch tag {
case Element_Insert, Element_Delete, Element_Update, Element_Select,
Element_Insert_Templete, Element_Delete_Templete, Element_Update_Templete, Element_Select_Templete:
return true
}
return false
}
2 changes: 1 addition & 1 deletion GoMybatis.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func WriteMapperPtrByEngine(ptr interface{}, xml []byte, sessionEngine SessionEn
func WriteMapper(bean reflect.Value, xml []byte, sessionFactory *SessionFactory, templeteDecoder TempleteDecoder, decoder SqlResultDecoder, sqlBuilder SqlBuilder, enableLog bool) {
beanCheck(bean, sqlBuilder)
var mapperTree = LoadMapperXml(xml)
templeteDecoder.DecodeTree(mapperTree)
templeteDecoder.DecodeTree(mapperTree, bean.Type())
//make a map[method]xml
var methodXmlMap = makeMethodXmlMap(bean, mapperTree)
var resultMaps = makeResultMaps(mapperTree)
Expand Down
37 changes: 26 additions & 11 deletions GoMybatisTempleteDecoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,31 +2,43 @@ package GoMybatis

import (
"bytes"
"errors"
"github.com/zhuxiujia/GoMybatis/utils"
"reflect"
"strings"
)

var equalOperator = []string{"/", "+", "-", "*", "**", "|", "^", "&", "%", "<", ">", ">=", "<=", " in ", " not in ", " or ", "||", " and ", "&&", "==", "!="}

type GoMybatisTempleteDecoder struct {
tree map[string]*MapperXml
}

func (it *GoMybatisTempleteDecoder) DecodeTree(tree map[string]*MapperXml) error {
func (it *GoMybatisTempleteDecoder) DecodeTree(tree map[string]*MapperXml, beanType reflect.Type) error {
if tree == nil {
return errors.New("data cant be nil!")
return utils.NewError("GoMybatisTempleteDecoder", "decode data map[string]*MapperXml cant be nil!")
}
it.tree = tree
for _, v := range it.tree {
it.Decode(v)
if beanType.Kind() == reflect.Ptr {
beanType = beanType.Elem()
}

for _, v := range tree {
var method *reflect.StructField
if isMethodElement(v.Tag) {
var upperId = utils.UpperFieldFirstName(v.Id)
m, haveMethod := beanType.FieldByName(upperId)
if haveMethod {
method = &m
}
}
it.Decode(method, v, tree)
}
return nil
}

func (it *GoMybatisTempleteDecoder) Decode(mapper *MapperXml) error {
func (it *GoMybatisTempleteDecoder) Decode(method *reflect.StructField, mapper *MapperXml, tree map[string]*MapperXml) error {

switch mapper.Tag {

if mapper.Tag == "selectTemplete" {
case "selectTemplete":
mapper.Tag = Element_Select

var tables = mapper.Propertys["tables"]
Expand All @@ -50,7 +62,9 @@ func (it *GoMybatisTempleteDecoder) Decode(mapper *MapperXml) error {
sql.Reset()
it.DecodeWheres(wheres, mapper)
}
} else if mapper.Tag == "insertTemplete" {
break

case "insertTemplete":
mapper.Tag = Element_Insert

var tables = mapper.Propertys["tables"]
Expand All @@ -64,7 +78,7 @@ func (it *GoMybatisTempleteDecoder) Decode(mapper *MapperXml) error {
inserts = "*?*"
}

var resultMapData = it.tree[resultMap]
var resultMapData = tree[resultMap]
if resultMapData == nil {
panic(utils.NewError("GoMybatisTempleteDecoder", "resultMap not define! id = ", resultMap))
}
Expand Down Expand Up @@ -132,6 +146,7 @@ func (it *GoMybatisTempleteDecoder) Decode(mapper *MapperXml) error {
}
}
mapper.ElementItems = append(mapper.ElementItems, trimArg)
break
}

return nil
Expand Down
5 changes: 3 additions & 2 deletions TempleteDecoder.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package GoMybatis

import "reflect"

type TempleteDecoder interface {
Decode(mapper *MapperXml) error
DecodeTree(tree map[string]*MapperXml) error
DecodeTree(tree map[string]*MapperXml, beanType reflect.Type) error
}
1 change: 1 addition & 0 deletions example/Example_ActivityMapper.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<result column="delete_flag" property="deleteFlag" langType="int" enable_logic_delete="true" logic_deleted_value="1" logic_undelete_value="0" />
</resultMap>

<!--Templete模板标签可以省略id="",框架默认设置<insertTemplete id="insertTemplete"/>-->
<insertTemplete tables="biz_activity"></insertTemplete>
<selectTemplete tables="biz_activity" wheres="name?name = #{name},name?name = #{name},name?name = #{name}"></selectTemplete>
<!--updateTemplete,sets="*"更新全部内容,sets="*?*"判空参数,然后设置对应参数.-->
Expand Down

0 comments on commit c54363b

Please sign in to comment.