zoukankan      html  css  js  c++  java
  • 多表数据转化器MTDC

    需求

    根据配置文件的映射规则,将一种模型和数据映射成另外一种模型和数据。如图:

    其中,a1,b1,c1,d1为表主键,关系:A.a1=B.b1=C.c2=D.d1

    解决思路

    1. 解析模型配置文件,将每个转换规则解析成一个rule,一个rule对应一个dst模型,多个src模型
    2. 根据src模型中的所需字段信息(字段收集),查询数据
    3. src模型中第一个作为主表,主表数据条数和dst数据条数相等
    4. 根据src模型主表数据和辅表中的key信息,做辅表的索引(模型中配置key和ref)
    5. 使用EL表达式,来做dst模型中各种对src模型的运算(参考javax.el)
    6. 将主表每一条记录(遍历主表),和这条记录对应的辅表记录放入el上下文,通过el对表达式的计算,得到此条主表记录对应的dst表记录。

    整体架构

    转换器

    模型文件

    <?xml version="1.0" encoding="GBK"?>
    <Model>
      <Head>
        <import>common.lknny.com.cnblogs</import><!--ext函数包路径-->
      </Head>
      <Rules>
        <mo dst="D" parent="">
          <srcMo src="A"/><!--主表不需要key-->    
          <srcMo src="B">
            <key pk="b1" pkRef="a1"/><!--pk对应辅表一条记录,关系为B.b1=A.a1-->   
          </srcMo>
          <srcMo src="C">
            <key mk1="c2" mk1Ref="a1"/><!--mk对应辅表多条记录,关系为C.c2=A.a1,结果为List<Object>-->   
          </srcMo>
          <attr dst="d1" src="a1"/><!--主表字段可以不加表名访问-->
          <attr dst="d2" src="a2" func="${blin:getPrefix(a2)}"/>/><!--内置函数-->
          <attr dst="d3" src="B.b3"/><!--辅表字段必须加表名访问-->
          <attr dst="d4" src="a3,B.b2" func="${(a3+B.b2)/2}/><!--el表达式-->
          <attr dst="d5" src="C.c3" func="${ext:join2List(',', C.c3)}/><!--扩展函数-->
        </mo>
      </Rules>
    </Model>
    

    总结

    整个转化器还是比较复杂的,重点是根据主表数据做好附表数据的索引,并在迭代器取dst数据时,将所有src数据放入el上下文。

  • 相关阅读:
    排序算法整理
    V-REP Plugin 开发
    YAML-CPP
    YAML
    V-REP Remote API
    V-REP Plugin
    结构化方法与面向对象方法的比较
    敏捷软件开发vs传统软件工程
    个人项目-地铁出行路线规划程序
    Week1个人作业
  • 原文地址:https://www.cnblogs.com/lknny/p/7462434.html
Copyright © 2011-2022 走看看