您的位置:首页 > 编程语言 > Java开发

mark mybatis annotation driven

2017-12-28 21:34 148 查看
mybatis annotaion方式并不像spring,需要指定annotation-driven来启用annotaion特性。

mybatis默认支持annotation,参考MapperRegistry#addMapper

/**
* MapperRegistry Configuration实现annotaion mapper注册的帮助类
**/
public <T> void addMapper(Class<T> type) {
if (type.isInterface()) {
try {
MapperAnnotationBuilder parser = new MapperAnnotationBuilder(config, type);
parser.parse();
} finally {
//...
}
}
}


接下来就是对Method对象的parse,解析出完整的mapped-statement 配置

public void parse() {
// Class级别解析
parseCache();
parseCacheRef();
Method[] methods = type.getMethods();
// Method级别解析
for (Method method : methods) {
try {
// 根据Annotation解析完整的MappedStatement信息
parseStatement(method);
} catch (IncompleteElementException e) {
// 加入待处理队列
configuration.addIncompleteMethod(new MethodResolver(this, method));
}
}
// 再次尝试解析 IncompleteMethod
parsePendingMethods();
}


最后,将解析完的mapped-statement 归入configuration

MappedStatement.Builder statementBuilder = new MappedStatement.Builder(configuration, id, sqlSource, sqlCommandType);
// ......
MappedStatement statement = statementBuilder.build();
configuration.addMappedStatement(statement);


附:mybatis Mapper XML 解析顺序

循环指定的mapperLocations,创建对应XMLMapperBuilder

解析mapper node,addMappedStatement

guess xml namespace(Class),引入Annotation处理流程

创建MapperAnnotationBuilder

解析 Class.method annotation,addMappedStatement

……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis spring annotation