在MyBatis注释中提取嵌套字段

时间:2018-01-24 13:34:48

标签: java sql annotations mybatis ibatis

我的程序使用Metadata类来描述不同对象的属性和字段:

class Metadata {
  private String objectType;
  private String table;
  private String idAttribute;

  private List<Attribute> attributes;
}

class Attribute {
  private String name;
  private List<Field> fields;
}

class Field {
  private String name;
  private String type;
  private int size;
}

我们假设我得到了一个JSON:

{
  "objectType": "OBJECT TYPE",
  "table": "objects"
  "idAttribute": "identifier";

  "attributes": [
     {
       "name": "identifier",
       "fields": [
         {
           "name": "id",
           "type": "NUMERIC",
           "size": 32
         },
         {
           "name": "version"
           "type": "NUMERIC",
           "size": 8
         }
       ]
     },
     // many other attributes
   ]
 }

fields表示来自我的数据库的table中的实际列。我想使用MyBatis映射器检查指定versionobjectType的对象的id

@Select(
  "SELECT ${metadata.attributes.${metadata.idAttribute}.fields.(get the field name 'version' somehow) " + 
  "FROM ${metadata.table} " +
  "WHERE ${metadata.attributes.${metadata.idAttribute}.fields.(get the field name 'id' somehow)} 
  = #{id} "
)
public byte getVersion(@Param("metadata") Metadata metadata),
                       @Param("id") long id);

如您所见,上面的查询看起来令人毛骨悚然,我不知道如何通过动态值提取具体字段

是否有可能在MyBatis中执行此操作,或者除了获取java中的所有嵌套字段然后将它们传递给Mapper之外没有别的办法?

0 个答案:

没有答案