码迷,mamicode.com
首页 > 编程语言 > 详细

MyBatis整合Spring的实现(12)

时间:2015-10-27 11:47:50      阅读:315      评论:0      收藏:0      [点我收藏+]

标签:

1 sql配置文件

<sql id="Base_Column_List">
    <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Fri Aug 14 16:08:36 CST 2015.
    -->
    Id, menu_name, menu_remark, menu_parent_id, menu_url, is_show, is_delete, operation_user_name, operation_time
</sql>

2 代码

private void sqlElement(List<XNode> list) throws Exception {
    // 当全局配置中数据库产品名称不为null,先遍历一般SQL
    if (configuration.getDatabaseId() != null) {
      sqlElement(list, configuration.getDatabaseId());
    }
    sqlElement(list, null);
}
private void sqlElement(List<XNode> list, String requiredDatabaseId) throws Exception {
    for (XNode context : list) {
      // null
      String databaseId = context.getStringAttribute("databaseId");
      // Base_Column_List
      String id = context.getStringAttribute("id");
      // cn.vansky.schedule.time.menu.dao.MenuMapper.Base_Column_List
      id = builderAssistant.applyCurrentNamespace(id, false);
      // 一致,需要添加到sqlFragments里面
      if (databaseIdMatchesCurrent(id, databaseId, requiredDatabaseId)) sqlFragments.put(id, context);
    }
}
// 匹配当前配置的数据库是否与默认的数据库一致
private boolean databaseIdMatchesCurrent(String id, String databaseId, String requiredDatabaseId) {
    if (requiredDatabaseId != null) {
      // 当全局配置的数据库产品名称与配置的产品名称不一样,就不需要添加内容到sqlFragment里面
      if (!requiredDatabaseId.equals(databaseId)) {
        return false;
      }
    } else {
      if (databaseId != null) {
        return false;
      }
      // skip this fragment if there is a previous one with a not null databaseId
      if (this.sqlFragments.containsKey(id)) {
        XNode context = this.sqlFragments.get(id);
        if (context.getStringAttribute("databaseId") != null) {
          return false;
        }
      }
    }
    return true;
}

对多个SQL配置进行遍历。这里不再过多分析,下面就是最终结果。

技术分享

这里为什么一次put生成2个对象呢,是因为MyBatis使用自己的StrictMap,在put方法里进行了重写。







MyBatis整合Spring的实现(12)

标签:

原文地址:http://my.oschina.net/u/1269959/blog/522462

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!