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

文章目录

  • 逻辑概念以及实现的需求效果
    • 逻辑图
    • 前端效果图
  • 准备工作
    • 数据库表结构
    • 实体类部分
    • 定义过滤查询对象
  • 后端部分
    • 控制器部分
    • 获取过滤后数据明细对象的业务层实现类方法
      • 查询数据明细使用到的sql部分
      • resultMap 封装部分
  • 前端部分
    • 分页部分
      • 分页插件的js部分
      • 分页插件独有的表单部分
    • 显示页面部分
      • 数据目录部分
      • 数据明细部分
    • js部分

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

  • 前提须知:bootstrap分页插件使用,

逻辑图

数据字典如何玩(一) 之显示_第1张图片
数据字典如何玩(一) 之显示_第2张图片

前端效果图

  • 左边为数据目录列表, 点击左边数据目录后,右边则会显示出相应的数据明细,点击数据明细(若此明细是属于上级明细)后也会显示出对应的下级明细
    数据字典如何玩(一) 之显示_第3张图片

准备工作

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

数据库表结构

  • 数据字典目录
    数据字典如何玩(一) 之显示_第4张图片
  • 数据字典明细表结构
    数据字典如何玩(一) 之显示_第5张图片

实体类部分

  • 逆向工程后,数据明细实体类属性需要更改,将type_id改成type名的数据目录对象,将parent_id改成parent名的明细对象
  • 因为数据字典明细和数据字典目录,是多对一关系,所以需要在数据字典明细中设置字典目录对象 作为属性type
    数据字典如何玩(一) 之显示_第6张图片

定义过滤查询对象

  • typeId过滤,查找指定数据目录对象的 数据明细信息
  • parentId过滤,查找指定上级明细 下的 数据明细信息
    数据字典如何玩(一) 之显示_第7张图片
  • 此部分用于分页,被以上类继承,主要为了分页插件服务
    数据字典如何玩(一) 之显示_第8张图片

后端部分

控制器部分

  • 获取页面所需数据,将所有数据目录对象放在页面左边排列,将被过滤后的明细对象放在右边显示
  • 记得给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 query(Queryobject qo) {
//分页插件  不需要我们写count语句,它会自动生成
//分页插件  高查sql不需要我们自己写limt,它会在你原本的sql上自动拼接limit上去并执行
//分页插件  limit是插件自动计算参数并拼接上去,qo
//分页插件  提供PageInfo类,用于封装分页相关数据,不需要自己写PageResult类
        PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize());//开始分页(对下一个sql进行分页),传当前页和每页显示数量
        List systemDictionaryItems = systemDictionaryItemMapper.selectForList(qo);
        return new PageInfo<>(systemDictionaryItems);
    }

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

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

resultMap 封装部分

  • 将以上sql语句查找到的上级明细属性 封装进明细实体类中的 上级明细对象中去
    数据字典如何玩(一) 之显示_第10张图片

前端部分

分页部分

分页插件的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进行隐藏,保证每次的’下一页’ 都是过滤后的效果
   
                        
添加

显示页面部分

数据目录部分

  • 放在页面的左边,将所有数据目录显示出来 供用户点击
  • 点击则传过滤属性typeId(数据明细的typeId也就是数据目录的id) 给到后台list,再次更新页面
    数据字典如何玩(一) 之显示_第11张图片

数据明细部分

  • 放在页面的右边,点击数据明细标题则传过滤属性parentId给到后台list更新页面
  • 点击明细,则将此明细的下级明细数据出来
    数据字典如何玩(一) 之显示_第12张图片

js部分

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

数据字典如何玩(一) 之显示_第13张图片

你可能感兴趣的:(框架/架构,后端,插件,数据库,java,freemarker,mysql)