先给出一段代码,类似于下面的复杂SQL,在解析过程中又是怎么执行的,调用了哪些API
<select id="getAll" parameterType="map" resultType="map">
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
select userId,username,age
from user
where 1=1
<if test="userId != 0 and userId != null">
and userId=#{userId}
</if>
<if test="username != '' and username != null">
and username like "%"#{username}"%"
</if>
<if test="names.size>0 and names != null">
and username in
<foreach item="item" index="index" collection="names" open="("
separator="," close=")">
#{item}
</foreach>
</if>
<choose>
<when test="phonenumber != null">
AND phonenumber like #{phonenumber}
</when>
<when test="address != null">
AND address like #{address}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
order by ${age} asc
</select>
1)加载解析config.xml文件,并解析mapping节点
public Configuration parse() {
if (parsed) {
throw new BuilderException("Each XMLConfigBuilder can only be used once.");
}
parsed = true;
parseConfiguration(parser.evalNode("/configuration"));
return configuration;
}
mapperElement(root.evalNode("mappers"));
2)org.apache.ibatis.builder.xml