Red de conocimiento informático - Material del sitio web - Cómo convertir el árbol almacenado en la base de datos en una lista de árboles (tomando el árbol de easyui como ejemplo)

Cómo convertir el árbol almacenado en la base de datos en una lista de árboles (tomando el árbol de easyui como ejemplo)

Muchas veces, almacenaremos un árbol en la base de datos. Cuando la interfaz necesite mostrar la lista de árboles, leerá el árbol y lo mostrará.

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 hijos //utilizado para almacenar nodos secundarios

@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 niños) {

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 Children = DepartmentService.findByPid(root .get(i).getId() //Consulta los hijos de un nodo (obtener un); lista)

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 findById (ID de cadena) {

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": [

{

"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"

},