背景
在进行根据模型开发的过程中,模型是需要最精简的。各个模型物料表的列都不一样,如何在模型开发中设置一个精简模型来进行配置,查询出对应的模型数据呢?
在上一篇中Mybatis无实体类查询中已经简单实现了mybatis的非预编译查询,那么如何实现对应的动态查询列呢?
实现
根据设置对应的视图view,来配置要显示或者查找的动态列名,当然这个列名肯定是在表中存在的。
演示
设置视图编号和名称,分录为要显示的列名,一定要和物理表相对应,这里后面可以通过Model的描述文件设置成过滤条件来选择
查询结果
修改视图显示分录,只显示名称
查询结果展示
可以看到不用改动代码,只要修改对应的视图,就可以展示返回的结果信息,这样扩展性就很高了。
源码
BaseObject baseObject=new BaseObject();
baseObject.setTableName("user");
baseObject.setColsValue("name","张三");
ViewCol viewCol=new ViewCol();
//根据视图code来查找对应的视图
BaseObject userViewObeject=new BaseObject();
userViewObeject.setTableName("viewlist");
userViewObeject.setColsValue("viewcode","userview");
ViewCol userViewCol=new ViewCol();
userViewCol.SetCol("id");
userViewCol.SetCol("viewcode");
userViewCol.SetCol("viewname");
List<HashMap<Object, Object>> userViewMap = baseObjectService.querySelect(userViewObeject.getTableName(), userViewObeject.GetColsValue(), userViewCol.GetColView());
if(userViewMap!=null && userViewMap.size()>0){
//根据视图编号查找对应的视图对象列名
String mainId = userViewMap.get(0).get("id").toString();
BaseObject userViewColObject=new BaseObject();
userViewColObject.setTableName("viewcol");
userViewColObject.setColsValue("main_id",mainId);
ViewCol userViewColNew=new ViewCol();
userViewColNew.SetCol("colname");
List<HashMap<Object, Object>> userViewColMap = baseObjectService.querySelect(userViewColObject.getTableName(), userViewColObject.GetColsValue(), userViewColNew.GetColView());
if(userViewColMap!=null && userViewColMap.size()>0){
for(HashMap<Object,Object> m : userViewColMap){
for(Object o: m.keySet())
{
viewCol.SetCol(m.get(o).toString());
}
}
}
}
return baseObjectService.querySelect(baseObject.getTableName(),baseObject.GetColsValue(),viewCol.GetColView());
<mapper namespace="org.jeecg.modules.mda.mapper.BaseObjectMapper">
<select id="querySelect" resultType="map" statementType="STATEMENT">
select
<foreach collection="list" item="param" separator=",">
${param}
</foreach>
from ${tableName} where
<foreach collection="map" item="value" index="key" separator="and">
${key}='${value}'
</foreach>
</select>
</mapper>