1.为了对一些表的原有字段进行清洗加密处理,并将结果放到新的字段中,所以把数据库表进行了抽象,表和字段是一对多的关系。
Java的PO类如下:
表实体:
public class DataCleanModel{
/**
* 表名
*/
private String tableName;
/**
* 主键名称
*/
private String primaryKeyName;
/**
* 主键值
*/
private String primaryKeyValue;
/**
* 字段
*/
private List<DataCleanColumn> columns;
/**
* 查询条件 (select... where ?)
*/
private String queryCondition;
/**
* 修改条件 (update... where ?)
*/
private String updateCondition;
}
字段实体:
public class DataCleanColumn {
/**
* 原始字段名
*/
private String columnName;
/**
* 原始字段值
*/
private String columnVaule;
/**
* 目标字段名
*/
private String targetColumnName;
/**
* 目标字段值
*/
private String targetColumnValue;
/**
* 处理类型:根据处理类型选择不同的处理方式
*/
private String dealType;
/**
* 字段加密类型:
*/
private String encryType;
}
查询时,希望传入一个表名,多个字段名,查到这张表的多个字段的值。
但是目前字段只能查询出一条记录
MyBatis的Mapper文件:
<!-- 表映射 -->
<resultMap id="DataCleanResult" type="com.orm.domain.DataCleanModel">
<result property="tableName" column="tableName" jdbcType="VARCHAR"/>
<result property="primaryKeyName" column="primaryKeyName" jdbcType="VARCHAR"/>
<result property="primaryKeyValue" column="primaryKeyValue" jdbcType="VARCHAR"/>
<result property="queryCondition" column="queryCondition" jdbcType="VARCHAR"/>
<result property="updateCondition" column="updateCondition" jdbcType="VARCHAR"/>
<collection property="columns" resultMap="DataCleanColumnResult"/>
</resultMap>
<resultMap id="DataCleanColumnResult" type="com.orm.domain.DataCleanColumn">
<id property="columnName" column="columnName"/>
<result property="columnVaule" column="columnVaule"/>
<result property="targetColumnName" column="targetColumnName"/>
<result property="targetColumnValue" column="targetColumnValue"/>
<result property="dealType" column="dealType"/>
<result property="encryType" column="encryType"/>
</resultMap>
<!-- 查询需要处理的数据 -->
<select id="getData" resultMap="DataCleanResult">
select '${tableName}' as tableName, '${primaryKeyName}' as primaryKeyName, ${primaryKeyName} as primaryKeyValue
<if test="@Ognl@isNotEmpty(columns)">
<foreach collection="columns" open="," close="" separator="," item="column">
'${column.columnName}' as columnName, ${column.columnName} as columnVaule, '${column.targetColumnName}' as targetColumnName, ${column.targetColumnName} as targetColumnVaule, '${column.dealType}' as dealType, '${column.encryType}' as encryType
</foreach>
</if>
from ${tableName}
<where>
<if test="@Ognl@isNotEmpty(queryCondition)"> ${queryCondition} </if>
and rownum < 1000
</where>
</select>
实际执行SQL示例:
select
'XXX.T_TABLE_NAME_BACK_170907' as tableName, 'UUID' as primaryKeyName, UUID as primaryKeyValue ,
'DIAODAN_CONTACT' as columnName, DIAODAN_CONTACT as columnVaule,
'RMK' as targetColumnName, '1' as dealType, '1' as encryType ,
'ENCRY_LEG_PER_NM' as columnName, ENCRY_LEG_PER_NM as columnVaule,
'ENCRY_CONT_NM_CN' as targetColumnName, '2' as dealType, '1' as encryType
from RCS.T_RCS_MEC_MONITOR_LIST_BACK_170907
WHERE rownum < 1000
SQL执行结果:
可以看到一对多的“多”,可以查到多个数据,查出来的字段名加了后缀,如:_1,_2这种。
程序执行的结果中的多也只有一条记录
求各位大神帮忙看下,为什么没有映射出多条,具体是哪里的问题,需要如何修改?