JavaWeb网上图书商城完整项目--day02-26.查询所有分类功能之DAO层实现

我们按照表示的设计

 

以及:

复制代码
package com.weiyuan.goods.category.domain;

import java.util.List;

public class Category {

    private String cid;//主键
    private String cname;//分类的名称
    private String desc;//分类的描述
    private Category parent ;//父分类,对应表的pid字段,pid是一个外键
    private List<Category> children;//子分类
    public String getCid() {
        return cid;
    }
    public void setCid(String cid) {
        this.cid = cid;
    }
    public String getCname() {
        return cname;
    }
    public void setCname(String cname) {
        this.cname = cname;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public Category getParent() {
        return parent;
    }
    public void setParent(Category parent) {
        this.parent = parent;
    }
    public List<Category> getChildren() {
        return children;
    }
    public void setChildren(List<Category> children) {
        this.children = children;
    }
    @Override
    public String toString() {
        return "Category [cid=" + cid + ", cname=" + cname + ", desc=" + desc
                + ", parent=" + parent + ", children=" + children + "]";
    }
    
}
复制代码

我们来获得数据模型层的代码:

复制代码
package com.weiyuan.goods.category.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.apache.commons.dbutils.handlers.MapListHandler;

import com.weiyuan.goods.category.domain.Category;

import cn.itcast.commons.CommonUtils;
import cn.itcast.jdbc.TxQueryRunner;

public class CategoryDao {
      //操作数据库
        private TxQueryRunner qr = new TxQueryRunner();
        

        /**
         * 查询出所有的一级分类
         * @throws SQLException 
         * */
    public List<Category> findAll() throws SQLException{
        //对应一级分类是对应的数据库表中的pid字段的值是null
        String sql = "select * from t_category where pid is null";
        List<Map<String, Object>> list = qr.query(sql, new MapListHandler());
        //获得所有的父节点元素
        List<Category> listCategory = toListCategory(list);
        //查找每一个父分类的子节点元素
        for(Category parent:listCategory){
            List<Category> childrenCategory = getChildrenCategory(parent.getCid());
            parent.setChildren(childrenCategory);
        }
        return listCategory;
    }
    
    //编写一个函数将List<Map<String, Object>>封装成一个List<Category>对象
    public List<Category> toListCategory(List<Map<String, Object>> mapList){
        List<Category> categories = new ArrayList();
        for(Map<String, Object> obj:mapList){
            Category c = toCategory(obj);
            categories.add(c);
        }
        
        return categories;
    }

    private Category toCategory(Map<String, Object> obj) {
        // TODO Auto-generated method stub
        Category bean = CommonUtils.toBean(obj, Category.class);
        String pid = (String) obj.get("pid");
        if(pid != null){//说明存在父节点
            Category parent = new Category();
            parent.setCid(pid);
            bean.setParent(parent);
            
        }
        return bean;
    }
    
    /*获得一级分类的子分类*/
    public List<Category> getChildrenCategory(String cid) throws SQLException{
        
        String sql = "select * from t_category where pid =?";
        List<Map<String, Object>> list = qr.query(sql, new MapListHandler(),cid);
        return toListCategory(list);
                
        
    }
}
复制代码

 

posted on   luzhouxiaoshuai  阅读(1028)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示