数据字典如何玩(一) 之显示

51 篇文章 2 订阅
7 篇文章 0 订阅

逻辑概念以及实现的需求效果

逻辑图

在这里插入图片描述
在这里插入图片描述

前端效果图

  • 左边为数据目录列表, 点击左边数据目录后,右边则会显示出相应的数据明细,点击数据明细(若此明细是属于上级明细)后也会显示出对应的下级明细
    在这里插入图片描述

准备工作

  • 根据以下表结构,使用mybatis逆向工程生成对应的文件

数据库表结构

  • 数据字典目录
    在这里插入图片描述
  • 数据字典明细表结构
    在这里插入图片描述

实体类部分

  • 逆向工程后,数据明细实体类属性需要更改,将type_id改成type名的数据目录对象,将parent_id改成parent名的明细对象
  • 因为数据字典明细和数据字典目录,是多对一关系,所以需要在数据字典明细中设置字典目录对象 作为属性type
    在这里插入图片描述

定义过滤查询对象

  • typeId过滤,查找指定数据目录对象的 数据明细信息
  • parentId过滤,查找指定上级明细 下的 数据明细信息
    在这里插入图片描述
  • 此部分用于分页,被以上类继承,主要为了分页插件服务
    在这里插入图片描述

后端部分

控制器部分

  • 获取页面所需数据,将所有数据目录对象放在页面左边排列,将被过滤后的明细对象放在右边显示
  • 记得给qo参数 加 @ModelAttribute(“qo”),才可回显数据
 //    处理查询所有字典明细的请求,响应HTML
    @RequiredPermission(name = "字典明细页面", expression = "systemDictionaryItem:list")
    @RequestMapping("/list")
    public String list(Model model, @ModelAttribute("qo") SystemDictionaryItemQueryObject qo) {
        model.addAttribute("dictionaries",systemDictionaryService.listAll());//获取所有数据目录对象
        model.addAttribute("pageInfo", systemDictionaryItemService.query(qo));//根据过滤信息,获取所有数据明细对象
        return "systemDictionaryItem/list";//WEB-INF/views/systemDictionaryItem/list.jsp
    }

获取过滤后数据明细对象的业务层实现类方法

  • 这里使用到了分页插件的方式,具体不多做解释,不懂请跳转至:分页插件使用
 public PageInfo<SystemDictionaryItem> query(Queryobject qo) {
//分页插件  不需要我们写count语句,它会自动生成
//分页插件  高查sql不需要我们自己写limt,它会在你原本的sql上自动拼接limit上去并执行
//分页插件  limit是插件自动计算参数并拼接上去,qo
//分页插件  提供PageInfo类,用于封装分页相关数据,不需要自己写PageResult类
        PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize());//开始分页(对下一个sql进行分页),传当前页和每页显示数量
        List<SystemDictionaryItem> systemDictionaryItems = systemDictionaryItemMapper.selectForList(qo);
        return new PageInfo<>(systemDictionaryItems);
    }

查询数据明细使用到的sql部分

  • 也就是以上业务层方法中的systemDictionaryItemMapper.selectForList(qo);
  • 传入的是qo过滤对象(实际即SystemDictionaryItemQueryObject),对过滤对象的属性进行过滤判断
  • 自己连自己,也是数据明细与其上级明细 连,获取所有数据明细,若有上级明细则封装进实体类对应的上级明细属性中, (记住,必须使用内连接,left join,才可以 不管此明细有没上级明细 都可以查找出来)
    在这里插入图片描述

resultMap 封装部分

  • 将以上sql语句查找到的上级明细属性 封装进明细实体类中的 上级明细对象中去
    在这里插入图片描述

前端部分

分页部分

分页插件的js部分

  • 注意这里有使#searchForm表单进行了提交
  //分页
    $(function(){
        $("#pagination").twbsPagination({
                totalPages: ${pageInfo.pages} || 1, //总页数
                startPage: ${pageInfo.pageNum} || 1, //当前页
                visiblePages:5, //显示几页
                first:"首页",
                prev:"上页",
                next:"下页",
                last:"尾页",
                initiateStartPageClick:false,
                onPageClick:function(event,page){//点击页数 会执行方法
					$("#currentPage").val(page);
					$("#searchForm").submit();
				}
		});
    })

分页插件独有的表单部分

  • 放进显示页面中,每次点击’上一页’ 和’下一页’的时候,分页插件都会使此表单进行提交,进行过滤
  • 将后端qo过滤对象的值 放入进去,并且用input的hidden进行隐藏,保证每次的’下一页’ 都是过滤后的效果
   <!--高级查询--->
                        <form class="form-inline" id="searchForm" action="/systemDictionaryItem/list" method="post">
                            <input type="hidden" name="currentPage" id="currentPage" value="1">
                            <input type="hidden" name="typeId"  value="${qo.typeId}">
                            <input type="hidden" name="parentId"  value="${qo.parentId}">
                            <a href="#" class="btn btn-success btn-input" style="margin: 10px">
                                <span class="glyphicon glyphicon-plus"></span> 添加
                            </a>
                        </form>

显示页面部分

数据目录部分

  • 放在页面的左边,将所有数据目录显示出来 供用户点击
  • 点击则传过滤属性typeId(数据明细的typeId也就是数据目录的id) 给到后台list,再次更新页面
    在这里插入图片描述

数据明细部分

  • 放在页面的右边,点击数据明细标题则传过滤属性parentId给到后台list更新页面
  • 点击明细,则将此明细的下级明细数据出来
    在这里插入图片描述

js部分

  • 点击数据目录被点击时 会有高亮效果
 <#if qo.typeId?? >
    $("a[data-id=${qo.typeId}]").addClass('active');//设置高亮代码
    </#if>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值