mybatis根据对应view来动态设置查询列

背景

在进行根据模型开发的过程中,模型是需要最精简的。各个模型物料表的列都不一样,如何在模型开发中设置一个精简模型来进行配置,查询出对应的模型数据呢?
在上一篇中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>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值