Cómo convertir el árbol almacenado en la base de datos en una lista de árboles (tomando el árbol de easyui como ejemplo)
Este artículo toma como ejemplo la creación de una lista de árbol del marco frontal de Yiui. El marco de fondo es Spring MVC+JPA.
Primero, veamos cómo se almacena el árbol en la base de datos:
La estructura del árbol es clara de un vistazo. Este es un árbol que representa departamentos.
La siguiente es la clase de entidad:
/**
* El departamento al que pertenece el usuario de la clase de departamento (aquí departamento es una palabra relativamente abstracta)
* Utilice codificación de prefijo, agregando tres dígitos a cada nivel, por ejemplo, nivel 1 001, nivel 2 001001, nivel 3 001001001
* @author Administrador
*
*/
@Entidad
clase pública Departamento {
ID de cadena privada; //ID de departamento
private String pid; //id del padre
texto de cadena privado; //nombre del departamento
lista privada
@Id
public String getId() {
return id;
}
public void setId(String id ) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setId(String id) {
esto.
public void setPid(String pid) {
this.pid = pid;
}
public String getText() {
devolver texto;
}
public void setText(String text) {
this.text = text;
}
@OneToMany
Lista pública< Departamento> getChildren () {
return niños;
}
public void setChildren(List
esto .children = Children;
}
}Dado que estamos usando easyui, para mostrar el mapa de árbol correctamente, debemos incluir los atributos id y text.
La siguiente es una clase de control, que se utiliza para leer datos de la base de datos, generar una Lista y luego devolver la Lista al front-end y convertirla en datos de estilo json en el front-end. Los puntos clave a entender son dos métodos: getTree() y buildTree().
Estos dos métodos generan árboles de forma recursiva. El principio básico de implementación es atravesar una capa del árbol, obtener los nodos secundarios (una lista) de cada nodo y luego establecerlo como atributo del nodo principal en
<. p>@Controller@RequestMapping("/department")
clase pública DepartmentController {
cadena final estática privada DEPARTEMNTMANAGE = "module/jsp/system/ departmentManage.jsp";
@ Resource(name="departmentServiceImpl")
servicio de departamento privado servicio de departamento;
/**
* Obtenga la página de gestión del departamento.
* @return
*/
@RequestMapping("/getPage.do")
public String getUserManagePage(){
return DEPARTEMENTMANAGEMENT.
}
/**
* Obtener la lista de árbol de departamentos
*/
@RequestMapping(value = "/getTree.do", método = RequestMethod.POST)
@ ResponseBody // Esta anotación indica que el valor de retorno omite la parte de procesamiento de la vista y se escrito directamente .SF.json.JSON.
sf.json.JSONArray jsonArray = net.sf.json.JSONArray.fromObject(buildTree(root));
System.out .println(jsonArray.toString());
return buildTree(raíz);
}
Lista pública< Departamento> buildTree(Lista<.Department> raíz){
for(int i=0;i List buildTree(children); root.get(i).setChildren(children); } devuelve raíz ; } } Los métodos de consulta findById y findByPid aquí son métodos JPA basados en datos de Spring. Las siguientes son clases relacionadas: Interfaz pública DepartmentDao extiende el repositorio<. Departamento, Entero>{ Lista pública< Departamento> findByPid(String pid); Lista pública< Departamento> findById(String id); } interfaz pública DepartmentService { Lista pública< Departamento> findByPid(String pid); Lista pública<.Department> findById(String id); } @Service("departmentServiceImpl") clase pública DepartmentServiceImpl implementa DepartmentService{ @Autowired DepartmentDao privado departmentDao ; @Override lista pública return departamentalDao.findByPid(pid); } @Override lista pública return departamentoDao.findById(id); } } La llamada de front-end es la siguiente: $(function(){ $('# tt').tree( { url: 'departamento/obtener Tree.do', loadFilter: function(data){ if (data.d){ return data.d; p> } else { devolver datos. } } }); ; Estos son los datos de estilo json devueltos por el backend al frontend, como se muestra a continuación: [ { "children": [; p> { "niños": [ { "niños": [], "id" : "001001 ", "pid": "001", "text": "Sector Uno" }, { "niños": [], "id". "001002", "pid": "001", "text":"Rama 2" } ], "id":"001", "pid" :"0", "text":"Rama 1" },