请选择 进入手机版 | 继续访问电脑版

动态表 动态查询

[复制链接]
菜鸡 发表于 2021-1-1 18:33:02 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
@Tomato
动态表 动态查询

文章目录



介紹

动态表

1、说明

  动态表:
大多数情况下我们的表布局都是固定的,但是当客户逻辑变动频仍且数据布局并不复杂的情况下,我们可以通过动态配置表来减少代码量和版本迭代次数


2、使用范围

举个栗子:
  

  • 老师的项目表新增频仍 ( 导致每次都需要重新写一套表的增删改查)
  • 但是功能大同小异(只是给不同的表打分,也只会有2张表的毗连)





3、简朴实现


  • 新增项目表(主要是表名称、表code,其他关联表id、所属权限组、表权限、排序、表提示字段等可以不加)

  • 新增项目字段表(主要是列名称、列范例,其他备注、是否主键、列提示字段等可以不加)

  • 实现逻辑   

    • 新建model表接口 == 新建数据库表(新建数据表时可以固定生成ID、IsDelete等字段)
    • 新建model子表modelDetail接口 == 新建数据库表内里的字段(拼接sql alter 表字段时先判断主表对应的数据库表是否存在)

       

  • 测试代码
  1. /// /// 查询动态毗连表分页/// [TestMethod]public void ListPageDynamicJoinModelList_Test(){    // 新增表    ModelInputModel inputMaster = new ModelInputModel()    {        ModelCode = "tb_test",        ModelName = "测试表"    };    BaseResultModel resultMaster = this.ModelService.ModifyModel(inputMaster);    Assert.IsTrue(resultMaster.IsSuccess, resultMaster.ErrorMessage);    ModelInputModel inputSon = new ModelInputModel()    {        ModelCode = "tb_testDetail",        ModelName = "测试子表"    };    BaseResultModel resultSon = this.ModelService.ModifyModel(inputSon);    Assert.IsTrue(resultSon.IsSuccess, resultSon.ErrorMessage);    // 新增动态表字段    ModelDetailInputModel inputSonModel = new ModelDetailInputModel()    {        ColIndex = 1,        ColMemo = "备注",        ColName = "dynamicID",        ColType = "nvarchar(256)",        ModelID = resultSon?.Data?.ModelID    };    BaseResultModel resultSonDetail = this.ModelDetailService.ModifyModelDetail(inputSonModel);    Assert.IsTrue(resultSonDetail.IsSuccess, resultSonDetail.ErrorMessage);    // 新增动态表数据    string tempGuid = Guid.NewGuid() + string.Empty;    TableSelModel selMasterTable = new TableSelModel()    {        TableName = inputMaster.ModelCode,        ColSel = new List() {            new TableColSelModel(){                ColName="testID",                ColValue=tempGuid            }        }    };    BaseResultModel resultMasterTab = this.ModelService.InsertDynamicModel(selMasterTable);    Assert.IsTrue(resultMasterTab.IsSuccess, resultMasterTab.ErrorMessage);    TableSelModel selSonTable = new TableSelModel()    {        TableName = inputSon.ModelCode,        ColSel = new List() {            new TableColSelModel(){                ColName="dynamicID",                ColValue=tempGuid            }        }    };    BaseResultModel resultSonTab = this.ModelService.InsertDynamicModel(selSonTable);    Assert.IsTrue(resultSonTab.IsSuccess, resultSonTab.ErrorMessage);    // 查询动态表分页    TableSelModel selTableList = new TableSelModel()    {        PageNo = 1,        PageSize = 20,        TableName = inputSon.ModelCode,        JoinMasterTableName = inputMaster.ModelCode,        WhereSel = new List() {            new TableColSelModel(){                ColName="dynamicID",                ColValue=tempGuid            }        }    };    BaseResultModel resultTableList = this.ModelService.ListPageDynamicJoinModelList(selTableList);    Assert.IsTrue(resultTableList.IsSuccess && resultTableList.Data.dataCount > 0, resultTableList.ErrorMessage);}
复制代码



动态查询

1、说明

  动态查询
工作中大部分的工作查询数据库用于展示,但是随着用户页面的控件多样化,我们查询的传入model参数越来越难以满足多样化的查询



2、使用范围

举个栗子:
  

  • 前端页面多样化查询(罗列框准确查询、下拉框后含糊查询、文本框全含糊查询、日期框区间查询)
  • list查询方法(查询方法公用时,对一些简朴的子查询)



3、简朴实现

3.1、Old-实现
  通过DAL拼接sql实现多样化查询(可维护性差,复用性差)



3.2、New-实现
  将查询条件通过入参实现(对前端要求较高,对文档要求较高)

  • 新建PagedInputDto查询统一类(将表名、排序项放到入参内里,不在通过model特性取配置实现)
  • 新建PageFilterDto查询过滤类(将列明、范例,查询种别作为入参拼接查询)


来源:https://blog.csdn.net/qq_34246850/article/details/112007154
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )