一、数据库设计

二、实体类:entity

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; 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; /**
* 公司表(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; private String attr1; private String attr2; private String attr3; /*****************************以下为添加字段*********************************/
@Transient
private Boolean hasChecked;
@Transient
private Boolean hasChildren;
@Transient
private List<SysCompany> children = new LinkedList<SysCompany>(); } 三、controller
@ApiOperation(value = "懒加载查询列表")
@GetMapping("/children")
public List<SysCompany> getChildren(SysCompany sysCompany) {
return service.getChildren(sysCompany);
}
四、service
@Override
public List<SysCompany> getChildren(SysCompany sysCompany) {
List<SysCompany> companyList = dao.selectCompanyInfo(sysCompany);
if (StringUtils.isNotBlank(sysCompany.getCoName())) {
return getTree(sysCompany);
}
return companyList;
} /**
这里一般将此方法放在entity里面
*/
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;
}
五、dao
public List<SysCompany> selectCompanyInfo(SysCompany sysCompany);

六、mapper
<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>
 

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. 用launchscreen.storyboard适配启动图方法(二)

    背景 之前有写一篇实现方式比较简单的随笔用launchscreen.storyboard适配启动图方法,顺便在评论区提了一下用autolayout适配启动图的思路,现把思路和流程记录下来. 思路 整体 ...

  2. 用IDEA详解Spring中的IoC和DI(挺透彻的,点进来看看吧)

    用IDEA详解Spring中的IoC和DI 一.Spring IoC的基本概念 控制反转(IoC)是一个比较抽象的概念,它主要用来消减计算机程序的耦合问题,是Spring框架的核心.依赖注入(DI)是 ...

  3. 【立即报名】解码AI大杀器:华为云GPU+Tensorflow 容器实战

    导语: 人工智能的火热,带来了一波学习TensorFlow深度学习框架的热潮.聊深度学习免不了要用GPU,但目前GPU费用较高,对于个人学习者和创业公司来讲的话,按需配置的云GPU服务器是一个不错的选 ...

  4. 求亿级记录中搜索次数Top N的搜索词(MapReduce实现)

    程序事例: 日志信息: 二手车 1345 二手房 3416 洗衣机 2789 输入: N=2 输出: 二手房 洗衣机 map函数如下: import java.io.IOException; impo ...

  5. 面试官:如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已经更改

    本篇文章由我的 一日一题 中的四个 Issue 组合而成 [Q111]http 响应头中的 ETag 值是如何生成的 [Q112]如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已 ...

  6. iOS textView的使用总结

    转自:http://blog.csdn.net/zhaopenghhhhhh/article/details/11597887 在.h文件中声明: @interface ProtocolViewCon ...

  7. Java修炼——递归算法的俩个实例

    1.是输出指定文件目录下的所以子目录以及文件 2.使用递归算算法:1!+2!+3!+4!+5!+-+n!(计算阶乘累加) package com.bjsxt.recurison; import jav ...

  8. PHP原生实现简易的MVC框架

    目录结构: —|controller —|Home.php —|model —|view —|welcome.php —|index.php 基本原理: 首页 index.php 通过获得地址栏中的路 ...

  9. ARTS-S golang函数作为参数传递

    函数作为参数传递在单元测试的时候非常有用,看下面的例子. package main import "fmt" func output(f func(string, string, ...

  10. 简单了解一下K8S,并搭建自己的集群

    距离上次更新已经有一个月了,主要是最近工作上的变动有点频繁,现在才暂时稳定下来.这篇博客的本意是带大家从零开始搭建K8S集群的.但是我后面一想,如果是我看了这篇文章,会收获什么?就是跟着步骤一步一走吗 ...