Mybatis是如何设计解析property值

本文探讨了Mybatis中解析property值的设计思路,重点介绍了PropertyTokenizer的结构,它使用迭代器方式处理类似树形结构的property。PropertyTokenizer包含name、index、indexName和children四个字段,这种设计适用于处理具有子结构的数据。文章鼓励读者借鉴此设计来解决类似问题,如遍历具有层级关系的类。

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类一种有四个字段:nameindexedNameindexchildren。它的类设计如下所示。

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的技术内幕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值