mysql一次查询树数据,java封装返回前端

工具类TreeBuild:


public class TreeBuild {

    // 保存参与构建树形的所有数据(通常数据库查询结果)
    public List<TreeNodeDTO> nodeList = new ArrayList<>();

    /**
     *  构造方法
     *  @param nodeList 将数据集合赋值给nodeList,即所有数据作为所有节点。
     */
    public TreeBuild(List<TreeNodeDTO> nodeList){
        this.nodeList = nodeList;
    }

    /**
     *   获取需构建的所有根节点(顶级节点) "0"
     *   @return 所有根节点List集合
     */
    public List<TreeNodeDTO> getRootNode(){
        // 保存所有根节点(所有根节点的数据)
        List<TreeNodeDTO> rootNodeList = new ArrayList<>();
        // treeNode:查询出的每一条数据(节点)
        for (TreeNodeDTO treeNode : nodeList){
            // 判断当前节点是否为根节点,此处注意:若parentId类型是String,则要采用equals()方法判断。
            if ("0".equals(treeNode.getParentId())) {
                // 是,添加
                rootNodeList.add(treeNode);
            }
        }
        return rootNodeList;
    }

    /**
     *  根据每一个顶级节点(根节点)进行构建树形结构
     *  @return  构建整棵树
     */
    public List<TreeNodeDTO> buildTree(){
        // treeNodes:保存一个顶级节点所构建出来的完整树形
        List<TreeNodeDTO> treeNodes = new ArrayList<TreeNodeDTO>();
        // getRootNode():获取所有的根节点
        for (TreeNodeDTO treeRootNode : getRootNode()) {
            // 将顶级节点进行构建子树
            treeRootNode = buildChildTree(treeRootNode);
            // 完成一个顶级节点所构建的树形,增加进来
            treeNodes.add(treeRootNode);
        }
        return treeNodes;
    }

    /**
     *  递归-----构建子树形结构
     *  @param  pNode 根节点(顶级节点)
     *  @return 整棵树
     */
    public TreeNodeDTO buildChildTree(TreeNodeDTO pNode){
        List<TreeNodeDTO> childTree = new ArrayList<TreeNodeDTO>();
        // nodeList:所有节点集合(所有数据)
        for (TreeNodeDTO treeNode : nodeList) {
            // 判断当前节点的父节点ID是否等于根节点的ID,即当前节点为其下的子节点
            if (treeNode.getParentId().equals(pNode.getId())) {
                // 再递归进行判断当前节点的情况,调用自身方法
                childTree.add(buildChildTree(treeNode));
            }
        }
        // for循环结束,即节点下没有任何节点,树形构建结束,设置树结果
        pNode.setChildren(childTree);
        return pNode;
    }
}

实体类:TreeNodeDTO

@Data
public class TreeNodeDTO {
    private String id;
    private String parentId;
    private String name;
    private List<TreeNodeDTO> children = new ArrayList<>();
}

调用Controller:

 @ApiOperation(value="123")
@GetMapping("/areaTree")
public ApiResult<List<TreeNodeDTO>>  areaTree(){
   List<TreeNodeDTO> treeList=Service.getTree();
   TreeBuild treeBuild=new TreeBuild(treeList);
   List<TreeNodeDTO> trees = treeBuild.buildTree();
   return ApiResult.success(trees);
}

============================查询数据库代码===================================

service:

 //获取树
 List<TreeNodeDTO> getTree();

mapper:

 //获取树
List<TreeNodeDTO> getTreeList();

impl:

@Autowired
TreeMapper treeMapper;

 /**    
  * 获取树
  * @return
  */
public List<TreeNodeDTO> getTree(){
   return treeMapper.getTreeList();
}

mapper.xml:

<resultMap id="BaseResultMapTree" type="com.entity.TreeNodeDTO">
        <result column="F_CODE" property="id" />
        <result column="F_PARENT_CODE" property="parentId" />
        <result column="F_NAME" property="name" />
</resultMap>


<select id="getTreeList" resultMap="BaseResultMapTree">
	SELECT F_CODE,F_PARENT_CODE,F_NAME
	FROM 表名 ORDER BY F_PARENT_CODE,F_CODE
</select>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot025网上超市的设计与实现是一个基于Spring Boot和MySQL的在线购物平台。该项目使用了Spring Boot作为后端框架,以及MySQL作为数据库。以下是对该毕业设计项目的简要介绍:项目结构:该网上超市项目采用了分层架构,包括前端界面、后端控制器、服务层、数据访问层和数据库。这种分层架构有助于代码的组织和维护。前端界面:该项目使用HTML、CSS和JavaScript等前端技术构建用户界面。用户可以浏览商品、添加购物车、下订单等操作。后端控制器:使用Spring Boot框架实现了后端控制器,用于处理前端发来的请求。控制器负责调用相应的服务层方法,完成业务逻辑处理。服务层:服务层主要负责处理业务逻辑,如商品的查询、购物车的管理和订单的处理等。服务层通过调用数据访问层的方法,与数据库进行交互。数据访问层:数据访问层使用MyBatis框架,封装了对MySQL数据库的操作。数据访问层提供了商品的查询、购物车的管理和订单的处理等接口。数据库:使用MySQL数据库存储商品信息、用户信息、购物车信息和订单信息等数据。通过数据访问层与数据库进行交互,实现数据的增删改查操作。总之,SpringBoot025网上超市的设计与实现是一个功能完善的在线购物平台,采用了Spring Boot和MySQL等主流技术,具有良好的可扩展性和可维护性。该项目可以作为计算机相关专业毕业设计的参考,也适合初学者学习和实践。
Java中,可以使用字符串的一些方法来实现模糊查询,比如使用contains()方法判断一个字符串是否包含另一个字符串。以下是一个示例代码: ```java List<String> originalList = new ArrayList<>(); // 原始数据集合 List<String> filteredList = new ArrayList<>(); // 模糊查询后的数据集合 // 假设查询关键字为 "abc" for (String data : originalList) { if (data.contains("abc")) { filteredList.add(data); } } // 返回模糊查询的结果 return filteredList; ``` 但是,使用这种方式来实现模糊查询的效率可能不够高,尤其是当数据量较大时。因此,通常还是会使用SQL语句来进行模糊查询。在Java中,可以使用JDBC、MyBatis等库来执行SQL查询,并将查询结果封装Java对象或集合返回前端。以下是一个示例代码: ```java public List<User> fuzzyQueryUsers(String keyword) throws SQLException { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; List<User> userList = new ArrayList<>(); try { conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useSSL=false", "root", "password"); String sql = "SELECT * FROM user WHERE name LIKE ?"; stmt = conn.prepareStatement(sql); stmt.setString(1, "%" + keyword + "%"); rs = stmt.executeQuery(); while (rs.next()) { User user = new User(); user.setId(rs.getInt("id")); user.setName(rs.getString("name")); user.setAge(rs.getInt("age")); userList.add(user); } } finally { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } return userList; } ``` 在这个示例代码中,使用了JDBC库来连接MySQL数据库,并执行了一个带有参数的模糊查询SQL语句。使用PreparedStatement可以避免SQL注入的问题。最后,将查询结果封装成User对象,并添加到集合中返回前端

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值