Mybatis是如何设计解析property值的
Mybatis是现在非常流行一个开源框架,有很多公司都在使用的。当然,优秀的框架必然有我们学习的地方,今天和大家分享一个优秀设计——解析property值。大家学习Mybatis时,想必对 resultMap 标签都应该了解。
<resultMap id = "userMap" type="User">
<id column="id" property="id"></id>
<result property="orders[0].items[0].name" column="item1"/>
...
</resultMap>
怎么去解析property呢?
property的特点有点像树的结构,Mybatis通过迭代器的方式,解析后续子结点。
PropertyTokenizer的结构
PropertyTokenizer类一种有四个字段:name、indexedName、index、children。它的类设计如下所示。
public class PropertyTokenizer implements Iterator<PropertyTokenizer> {
private String name;
private final String indexedName;
private String index;
private final String children;
public PropertyTokenizer(String fullname) {
int delim = fullname.indexOf('.');
if (delim > -1) {
name = fullname.substring(0, delim);
children = fullname.substring(delim + 1);
} else {
name = fullname;
children = null;
}
indexedName = name;
delim = name.indexOf('[');
if (delim > -1) {
index = name.substring(delim + 1, name.length() - 1);
name = name.substring(0, delim);
}
}
@Override
public boolean hasNext() {
return children != null;
}
@Override
public PropertyTokenizer next() {
return new PropertyTokenizer(children);
}
}
第一次迭代时四个字段分别表示:
- name:orders
- index:0
- indexName:orders[0]
- children:item[0].name
总结
我们也可以借用这种设计,去遍历那些具有子结构类型类。比如,试卷的题目我们可以采用这种设计,当题目为阅读题时,会有子题目。我们可以借助迭代器帮助我们设计数据结构。
参考
Mybatis的技术内幕
本文探讨了Mybatis中解析property值的设计思路,重点介绍了PropertyTokenizer的结构,它使用迭代器方式处理类似树形结构的property。PropertyTokenizer包含name、index、indexName和children四个字段,这种设计适用于处理具有子结构的数据。文章鼓励读者借鉴此设计来解决类似问题,如遍历具有层级关系的类。
2175

被折叠的 条评论
为什么被折叠?



