zoukankan      html  css  js  c++  java
  • 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);
                    
            
        }
    }
  • 相关阅读:
    我们可以用JAX-WS轻松实现JAVA平台与其他编程环境(.net等)的互操作
    Eclipse 枚举类报错
    eclipse 遇关键字enum编译问题解决
    接口测试框架开发(二):extentreports报告中文乱码问题
    接口测试框架开发(一):rest-Assured_接口返回数据验证
    使用ant运行testng的testng.xml并且使用testng-results.xsl美化结果
    TestNG简单的学习-TestNG运行
    ExtentReports 结合 TestNg 生成自动化 html 报告 (支持多 suite)
    TestNG+ReportNG+Maven优化测试报告
    IDEA+MAVEN+testNG(reportNG)
  • 原文地址:https://www.cnblogs.com/kebibuluan/p/6861929.html
Copyright © 2011-2022 走看看