SpringBoot+JPA+ElementUi 给级联选择器Cascader返回树形结构数据
2018-03-18 22:46
417 查看
如题,最近项目刚结束,来整理下,不喜勿碰,欢迎大神指教!!!
目前项目中的Cascader使用一般都是写js脚本,现在要求把信息配置在数据库中。直接上代码
信息配置表的设计:
DROP TABLE IF EXISTS `tree_node_configuration`;
CREATE TABLE `tree_node_configuration` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tree_name` varchar(100) NOT NULL COMMENT '名称(标识一棵树)',
`node_code` varchar(50) NOT NULL COMMENT '节点编码',
`father_node_code` varchar(50) DEFAULT NULL COMMENT '父节点编码',
`node_name` varchar(100) DEFAULT NULL COMMENT '节点名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;
实体定义:
@Entity
@Table(name = "TREE_NODE_CONFIGURATION")
public class TreeNodeConfiguration implements java.io.Serializable {
/** 版本号 */
private static final long serialVersionUID = -5207289768631569866L;
/** */
@Id
@Column(name = "ID")
@GeneratedValue
private Long id;
/** 名称(标识一棵树) */
@Column(name = "TREE_NAME")
private String treeName;
/** 节点编码 */
@Column(name = "NODE_CODE")
private String nodeCode;
/** 父节点编码 */
@Column(name = "FATHER_NODE_CODE")
private String fatherNodeCode;
/** 节点名称 */
@Column(name = "NODE_NAME")
private String nodeName;
@Transient
private List<TreeNodeConfiguration> children;
get/set省略,,,,
JPA获取数据:
public interface TreeNodeConfigurationRepository extends JpaRepository<TreeNodeConfiguration, Long>{
List<TreeNodeConfiguration> findByTreeName(String treeName);
TreeNodeConfiguration findByFatherNodeCodeIsNull();
TreeNodeConfiguration findByNodeCode(String nodeCode);
}
ServiceImpl:
public List<TreeNodeConfiguration> getTree(String treeName) {
return TreeNodeConfigurationRepository.findByTreeName(treeName);
}
controller的代码:
@RequestMapping(value = "/api/treeNodeConfiguration/tree",method = RequestMethod.GET)
public List<TreeNodeConfiguration> getTreeNodeConfiguration(){
List<TreeNodeConfiguration> tree = treeNodeConfigurationService.getTree("XXX");//XXX是树的名称
TreeNodeConfiguration root = treeNodeConfigurationService.getRoot();
TreeUtils.createTree(tree, root, "nodeCode", "fatherNodeCode", "children");
List<TreeNodeConfiguration> returnList = new ArrayList<TreeNodeConfiguration>();
returnList.add(root);
return returnList;
}
前端代码:
<el-cascader
style="width:320px"
:options="options"
@change="handleChange"
:props="props">
</el-cascader>
这样给ElementUI传到前端的就是树形结构数据了,只不过是一次性加载的,数据量很大的时候性能肯定不好,ElementUI同样支持动态加载次级选项,有时间再研究
目前项目中的Cascader使用一般都是写js脚本,现在要求把信息配置在数据库中。直接上代码
信息配置表的设计:
DROP TABLE IF EXISTS `tree_node_configuration`;
CREATE TABLE `tree_node_configuration` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`tree_name` varchar(100) NOT NULL COMMENT '名称(标识一棵树)',
`node_code` varchar(50) NOT NULL COMMENT '节点编码',
`father_node_code` varchar(50) DEFAULT NULL COMMENT '父节点编码',
`node_name` varchar(100) DEFAULT NULL COMMENT '节点名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;
实体定义:
@Entity
@Table(name = "TREE_NODE_CONFIGURATION")
public class TreeNodeConfiguration implements java.io.Serializable {
/** 版本号 */
private static final long serialVersionUID = -5207289768631569866L;
/** */
@Id
@Column(name = "ID")
@GeneratedValue
private Long id;
/** 名称(标识一棵树) */
@Column(name = "TREE_NAME")
private String treeName;
/** 节点编码 */
@Column(name = "NODE_CODE")
private String nodeCode;
/** 父节点编码 */
@Column(name = "FATHER_NODE_CODE")
private String fatherNodeCode;
/** 节点名称 */
@Column(name = "NODE_NAME")
private String nodeName;
@Transient
private List<TreeNodeConfiguration> children;
get/set省略,,,,
JPA获取数据:
public interface TreeNodeConfigurationRepository extends JpaRepository<TreeNodeConfiguration, Long>{
List<TreeNodeConfiguration> findByTreeName(String treeName);
TreeNodeConfiguration findByFatherNodeCodeIsNull();
TreeNodeConfiguration findByNodeCode(String nodeCode);
}
ServiceImpl:
public List<TreeNodeConfiguration> getTree(String treeName) {
return TreeNodeConfigurationRepository.findByTreeName(treeName);
}
controller的代码:
@RequestMapping(value = "/api/treeNodeConfiguration/tree",method = RequestMethod.GET)
public List<TreeNodeConfiguration> getTreeNodeConfiguration(){
List<TreeNodeConfiguration> tree = treeNodeConfigurationService.getTree("XXX");//XXX是树的名称
TreeNodeConfiguration root = treeNodeConfigurationService.getRoot();
TreeUtils.createTree(tree, root, "nodeCode", "fatherNodeCode", "children");
List<TreeNodeConfiguration> returnList = new ArrayList<TreeNodeConfiguration>();
returnList.add(root);
return returnList;
}
前端代码:
<el-cascader
style="width:320px"
:options="options"
@change="handleChange"
:props="props">
</el-cascader>
getTree(){ let self = this; this.$axios.get('/api/treeNodeConfiguration/tree').then((res) => { this.options = res.data; }) }
这样给ElementUI传到前端的就是树形结构数据了,只不过是一次性加载的,数据量很大的时候性能肯定不好,ElementUI同样支持动态加载次级选项,有时间再研究
相关文章推荐
- SpringBoot+JPA+ElementUi 给级联选择器Cascader返回树形结构数据
- [置顶] 一位数组返回id和pid通过这两个参数转换为树形结构数据,和树形结构的渲染
- 用递归方式实现带层级表数据的无线级联树形显示,并转换成JsonArray返回前端
- js返回树形结构数据
- oracle 删除级联树形结构数据
- extjs的treepanel 后台并没有按照规定的结构返回数据时解决方案
- 我要从com向应用程序返回一个结构,结构中包括二进制数据,请问用什么方式传替比较好呢?BSTR,VARIANT还是其他什么类型比较好呢
- 递归算法将数据转换为树形结构
- 使用Oracle数据库实现树形结构表的子-父级迭代(递归)查询和删除,通过级联菜单简单举例
- 树形结构在开发中的应用(C# TreeView数据动态绑定)
- spring 返回 JSON乱码问题的解决 及个人 动态加载ztree树结构的json数据代码
- Android ExpandableListview使用gson解析树形结构数据。
- 树形结构的数据存储和数据库表设计
- 实现Comparable接口对树形结构数据进行排序
- 树形结构与父子页数据传递
- SQL之树形结构无限级联删除
- hibernate映射树形结构数据
- Java编程:将具有父子关系的数据库表数据转换为树形结构,支持无限层级
- 我要从com向应用程序返回一个结构,结构中包括二进制数据,请问用什么方式传替比较好呢?BSTR,VARIANT还是其他什么类型比较好呢
- 树形结构的选择器