一、数据库设计

二、实体类:entity

  1. import com.joyoung.cloud.security.common.validatedGroup.Add;
    import com.joyoung.cloud.security.common.validatedGroup.Modify;
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.Data;
    import lombok.experimental.Accessors;
  2.  
  3. import javax.persistence.Id;
    import javax.persistence.Transient;
    import javax.validation.constraints.NotBlank;
    import javax.validation.constraints.NotNull;
    import javax.validation.constraints.Null;
    import javax.validation.constraints.Pattern;
    import java.io.Serializable;
    import java.util.Date;
    import java.util.LinkedList;
    import java.util.List;
  4.  
  5. /**
    * 公司表(SysCompany)实体类
    *
    * @author yangyuwei
    * @since 2019-06-06 13:45:23
    */
    @ApiModel(value = "公司类")
    @Data
    @Accessors(chain = true)
    public class SysCompany implements Serializable {
    private static final long serialVersionUID = 600959061181555399L;
    @ApiModelProperty(value = "主键Id")
    @Id
    @Null(message = "{add_id}", groups = {Add.class})
    @NotNull(message = "{modify_id}", groups = {Modify.class})
    private String id;
    //上级公司id
    @ApiModelProperty(value = "父Id")
    private String parentId;
    //公司名称
    @ApiModelProperty(value = "公司名称")
    @NotBlank(message = "{name_null}")
    @Pattern(regexp = "^[\\s\\S]{1,20}$", message = "{name_rule}")
    private String coName;
    //公司简称
    @ApiModelProperty(value = "公司简称")
    private String coAbbr;
    //公司编号
    @ApiModelProperty(value = "公司编号")
    private String coCode;
    //公司地址
    @ApiModelProperty(value = "公司地址")
    private String coAddr;
    //邮编
    @ApiModelProperty(value = "邮编")
    @Pattern(regexp = "^$|[0-9]{6}$", message = "{zipCode_error}")
    private String zipCode;
    //法人名称
    @ApiModelProperty(value = "法人名称")
    private String legalName;
    //法定代表人
    @ApiModelProperty(value = "法定代表人")
    private String legalRep;
    //税号
    @ApiModelProperty(value = "税号")
    private String taxId;
    //电话号码("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX)
    // @Pattern(regexp = "^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{7,14}$", message = "请输入正确的电话号码")
    @ApiModelProperty(value = "电话号码")
    private String tel;
    //开户银行名称
    @ApiModelProperty(value ="开户银行名称")
    private String bankName;
    //开户银行账号
    @ApiModelProperty(value = "开户银行账号")
    private String bankAcct;
    //创建人id
    private String crtUser;
    //创建人名称
    private String crtName;
    //创建时间
    private Date crtTime;
    //最后修改人id
    private String updUser;
    //最后修改人名称
    private String updName;
    //最后修改时间
    private Date updTime;
    //备注
    private String remark;
    //逻辑删除标识:1=删除;0=未删除
    private Integer delFlag;
  6.  
  7. private String attr1;
  8.  
  9. private String attr2;
  10.  
  11. private String attr3;
  12.  
  13. /*****************************以下为添加字段*********************************/
    @Transient
    private Boolean hasChecked;
    @Transient
    private Boolean hasChildren;
    @Transient
    private List<SysCompany> children = new LinkedList<SysCompany>();
  14.  
  15. }
  16.  
  17. 三、controller
  1. @ApiOperation(value = "懒加载查询列表")
    @GetMapping("/children")
    public List<SysCompany> getChildren(SysCompany sysCompany) {
    return service.getChildren(sysCompany);
    }
  1. 四、service
  1. @Override
    public List<SysCompany> getChildren(SysCompany sysCompany) {
    List<SysCompany> companyList = dao.selectCompanyInfo(sysCompany);
    if (StringUtils.isNotBlank(sysCompany.getCoName())) {
    return getTree(sysCompany);
    }
    return companyList;
    }
  2.  
  3. /**
    这里一般将此方法放在entity里面
    */
  1. private List<SysCompany> getTree(SysCompany sysCompany) {
    Map<String, SysCompany> map = dao.selectByCompany(sysCompany);
    List<SysCompany> tree = new ArrayList<>();
    map.forEach((id, obj) -> {
    if (map.containsKey(obj.getParentId())) {
    map.get(obj.getParentId()).getChildren().add(obj);
    } else {
    tree.add(obj);
    }
    });
    return tree;
    }
  1. 五、dao
  1. public List<SysCompany> selectCompanyInfo(SysCompany sysCompany);
  2.  
  3. 六、mapper
  1. <sql id="sys_param">
    c.id,
    c.parent_id,
    c.co_name,
    c.co_abbr,
    c.co_code,
    c.co_addr,
    c.zip_code,
    c.legal_name,
    c.legal_rep,
    c.tax_id,
    c.tel,
    c.bank_name,
    c.bank_acct,
    c.crt_user,
    c.crt_name,
    c.crt_time,
    c.upd_user,
    c.upd_name,
    c.upd_time,
    c.remark,
    c.del_flag
    </sql>
    <select id="selectCompanyInfo" resultMap="SysCompanyMap"
    parameterType="com.joyoung.cloud.security.common.entity.admin.SysCompany">
    SELECT
    <include refid="sys_param"/>,EXISTS (SELECT 1 from sys_company sc where sc.parent_id=c.id and sc.del_flag=0) as
    hasChildren
    FROM
    sys_company c
    WHERE
    c.del_flag = 0
    <if test="coName!=null">
    and c.co_name like concat ('%',#{coName},'%')
    </if>
    <if test="parentId !=null and parentId !=''">
    and c.parent_id = #{parentId}
    </if>
    <if test="parentId == null || parentId == ''">
    and c.parent_id is null
    </if>
    </select>
  1.  

java后台树形结构展示---懒加载的更多相关文章

  1. Vue常规后台系统,路由懒加载实现基于菜单数据并解耦

    路由依赖菜单 场景:文件名与路由组件名完全一致(随便大小写均可) 菜单使用一套,路由又存在一套,这样就很不舒服,于是做了如下处理: 尝试不用懒加载发现有难度,使用懒加载就很轻松了 data.js ex ...

  2. Rhythmk 一步一步学 JAVA (13) Spring-2 之Ben懒加载以及生命周期,单例

    1.定义Demo类: package com.rhythmk.spring; public class User { public void Init () { System.out.println( ...

  3. 【Java】SpringBoot的bean懒加载@Lazy注解

    注解说明 @Lazy:一般情况下,Spring容器在启动时会创建所有的Bean对象,使用@Lazy注解可以将Bean对象的创建延迟到第一次使用Bean的时候. 引用 在类上加入@Lazy或者@Lazy ...

  4. 关于Web项目出现懒加载异常的解决方案

    manytomany关系中,使用 fetch = FetchType.LAZY 来做懒加载,加快些性能.但是却一直出错,原因是session被关闭,要保持session,需要事务. Hibernate ...

  5. Java Web SpringMVC AJAX,实现页面懒加载数据

    因为做的微信端的网页,所以在显示后台数据的时候,要么分页,要么全部加载数据,开始分页对于用户来说,其实体验不是很好,毕竟要去不断的点击下一页,但是如果我把全部数据读取出来的话,但用户可能也就看前面几条 ...

  6. LayUi 树形组件tree 实现懒加载模式,展开父节点时异步加载子节点数据

    LayUi框架中树形组件tree官方还在持续完善中,目前最新版本为v2.5.5 官方树形组件目前还不支持懒加载方式,之前我修改一版是通过reload重载实例方法填充子节点数据方式,因为递归页面元素时存 ...

  7. 【Java EE 学习 47】【Hibernate学习第四天】【sesion】【一级缓存】【懒加载】

    一.Session概述 1.Session 接口是 Hibernate 向应用程序提供的操纵对数据库的最主要的接口, 它提供了基本的保存, 更新, 删除和加载Java 对象的方法. 2.理解Sessi ...

  8. 代码: 两列图片瀑布流(一次后台取数据,图片懒加载。下拉后分批显示图片。图片高度未知,当图片onload后才显示容器)

    代码: 两列图片瀑布流(一次后台取数据,无ajax,图片懒加载.下拉后分批显示图片.图片高度未知,当图片onload后才显示容器) [思路]: 图片瀑布流,网上代码有多种实现方式,也有各类插件.没找到 ...

  9. -java转json hibernate懒加载造成的无限递归问题

    1.在判断到底是谁维护关联关系时,可以通过查看外键,哪个实体类定义了外键,哪个类就负责维护关联关系. JoinColumn(name="pid") 2. 在保存数据时,总是先保存的 ...

随机推荐

  1. Eclipse for Tricore 的安装方法

    1.安装JDK32位版 2.安装Eclipse for Tricore 32位版(应该也只有32位的) 3.OK(如果打开Tricore提示找不到JDK的话,在网上搜索如何配置JDK,修改环境变量) ...

  2. luogu P1938 [USACO09NOV]找工就业Job Hunt

    题目描述 奶牛们正在找工作.农场主约翰知道后,鼓励奶牛们四处碰碰运气.而且他还加了一条要求:一头牛在一个城市最多只能赚D(1≤D≤1000)美元,然后它必须到另一座城市工作.当然,它可以在别处工作一阵 ...

  3. NRF52833蓝牙5.1可用于105℃环境温度的Nordic蓝牙5.1 SoC能实现更广泛的并发多协议低功耗蓝牙、mesh和Thread应用

    Nordic Semiconductor宣布推出nRF52833先进多协议系统级芯片(SoC),这是其广受欢迎且验证通过的nRF52系列的第五个新成员.nRF52833是一款功耗超低的低功耗蓝牙 (B ...

  4. C++与数据结构课程设计---定票咨询系统

    订票咨询管理系统 设计编制一个订票管理系统,考虑旅客不同的要求.例如,选择不同的交通工具,希望在旅途中的时间尽可能地短,期望旅费尽可能省,或要求中转次数最少等.为旅客提供两种或三种最优决策.车票基本信 ...

  5. TypeScript - 类型声明、枚举、函数、接口

    目录  可定义的类型  类型声明  枚举  函数  接口 可定义的类型 以下所写的并不代表typescript的数据类型,而是在使用过程中可以用作定义的类型 number : 数值类型: string ...

  6. Redis第二讲【Redis基本命令和五大数据结构】

    [二.Redis基本命令和五大数据结构] redis的基础知识和命令 redis 是一个单进程(包装epoll函数来对读写事件进行相应) 默认有16个数据库,初始使用的数据库为0号库 默认端口为637 ...

  7. 基于 HTML5 + WebGL 的 3D 太阳系系统

    前言 近年来随着引力波的发现.黑洞照片的拍摄.火星上存在水的证据发现等科学上的突破,以及文学影视作品中诸如<三体>.<流浪地球>.<星际穿越>等的传播普及,宇宙空间 ...

  8. Vue如何实现数据响应的

    参考博客:https://medium.com/vue-mastery/the-best-explanation-of-javascript-reactivity-fea6112dd80d 翻译博客: ...

  9. Linux服务器可以ping,但是telnet端口超时,网站wget超时,访问超时的解决办法

    最近无法通过SSH连接Linux服务器,访问该服务器上的HTTP服务也出现异常.可以ping,但是telnet端口超时,网站wget超时,访问超时. 最后排查是内核配置问题 原来是 net.ipv4. ...

  10. 《Dotnet9》系列-开源C# WPF控件库强力推荐

    时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...