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); }
}
JavaWeb网上图书商城完整项目--day02-26.查询所有分类功能之DAO层实现的更多相关文章
- JavaWeb网上图书商城完整项目--day02-4.regist页面提交表单时对所有输入框进行校验
1.现在我们要将table表中的输入的参数全部提交到后台进行校验,我们提交我们是按照表单的形式提交,所以我们首先需要在table表外面添加一个表单 <%@ page language=" ...
- JavaWeb网上图书商城完整项目--24.注册页面的css样式实现
现在框架已经做好了,即下来我们要对页面进行装饰了,第一步给每一个元素添加id 1.最外面的div添加id为divMain 2.第二个div添加id为divTitle,里面的span对应的id为span ...
- JavaWeb网上图书商城完整项目--day02-28.查询所有分类功能之left页面使用Q6MenuBar组件显示手风琴式下拉菜单
首先页面去加载的时候,会去加载main.js文件,我们在加载left.jsp.top.jsp body.jsp,现在我们修改main.jsp的代码,让它去请求的时候去访问的是不在直接去访问left.j ...
- JavaWeb网上图书商城完整项目--26.注册页面之验证码换一张实现
我们现在要实现点击换一张的时候实现验证码的修改 我们首先在html添加函数点击事件: <%@ page language="java" contentType="t ...
- JavaWeb网上图书商城完整项目--过滤器解决中文乱码
我们知道,如果是POST请求,我们需要调用request.setCharacterEncoding(“utf-8”)方法来设计编码:如果是GET请求,我们需要自己手动来处理编码问题.如果我们使用了En ...
- JavaWeb网上图书商城完整项目--13.项目所需环境的搭建
1.首先安装mysql 创建项目所需的数据库,直接运行项目提供的goods.sql文库 2.myeclipse创建一个web project ,项目的名称是goods 把视频中提供的项目原型下的提供的 ...
- JavaWeb网上图书商城完整项目--BaseServlet
1.以前进行操作的时候,例如我们进行登陆操作我们使用LoginServlet进行处理,进行注册操作我们使用RegisterServlet,很多业务的操作的时候我们就要定义很多个Servlet 有了Ba ...
- JavaWeb网上图书商城完整项目--day02-21.退出功能的实现
1.当用户点击退出的时候,跳转到登陆页面 当用户点击退出的时候,需要将session中保存的登陆的用户销毁掉 当用户点击退出的时候,调用UserServlet的quit方法 退出按钮在top.jsp中 ...
- JavaWeb网上图书商城完整项目--day02-17.登录功能页面实现
1.当在登陆页面点击登陆按钮的时候,会调用UserServlet的login方法,我们要在login.jsp中进行配置 2.要在login.jsp中处理Servlet在后台业务操作之后forward到 ...
- JavaWeb网上图书商城完整项目--day03-1.图书模块功能介绍及相关类创建
1 前两天我们学习了user用户模块和图书的分类模块,接下来我们学习图书模块 图书模块的功能主要是下面的功能: 2 接下来我们创建对应的包 我们来看看对应的数据库表t_book CREATE TABL ...
随机推荐
- AdaBoost理解
AdaBoost是一种准确性很高的分类算法,它的原理是把K个弱分类器(弱分类器的意思是该分类器的准确性较低),通过一定的组合(一般是线性加权进行组合),组合成一个强的分类器,提高分类的准确性. 因此, ...
- 50个SQL语句(MySQL版) 问题五
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- pip安装Python库速度慢的解决方法
最近在写大数据文本挖掘的考查报告,需要用到 jieba切词,于是在pycharm中安装 jieba 库 首先是在 File—settings中通过搜索安装,然而安了五分钟之后还是失败了 于是通过终端输 ...
- 移动端border:1px问题解决方案
了解设备像素和css像素的因该知道,通常我们在写移动端时,是按照设计稿标注的像素除以设备的DPR来写真实的像素, 比如在iPhone6上,我们写的20px字体世界上在视觉效应上有20px; 所以当我们 ...
- Source Insight无限试用期修改方法
修改路径:C:\ProgramData\Source Insight\4.0\si4.lic 字段: Date="2020-01-20" Expiration="2020 ...
- Java实现蓝桥杯VIP算法训练 奇变的字符串
试题 算法训练 奇变的字符串 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 将一个字符串的奇数位(首位为第0位)取出,将其顺序弄反,再放回原字符串的原位置上. 如字符串" ...
- Java实现 LeetCode 201 数字范围按位与
201. 数字范围按位与 给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入 ...
- 【CSS】电脑、移动端公用样式
电脑端: /* Public */ @charset "utf-8"; html, body, div, p, ul, ol, li, dl, dt, dd, h1, h2, h3 ...
- 涨见识了,在终端执行 Python 代码的 6 种方式!
原作:BRETT CANNON 译者:豌豆花下猫@Python猫 英文:https://snarky.ca/the-many-ways-to-pass-code-to-python-from-the- ...
- Vue好书推荐
1.Vue.js实战 从基础知识到ui组件封装和剖析,层层推进,最后两个案例实战.适合零基础入门,学完可就业.(推荐看这本) 交流地址(pdf原件):链接(点击跳转):提取码:7IsG 2.vue.j ...