010商城项目:商品类目的选择——Dao,Service.Action层的分析
我们现在开始写商品类选择这个功能:
先看效果:

当我们点击”新增商品”---->”选择目录”然后从数据库中查出来数据并显示了。
我们分析数据库的那张表:
它是一个树形结构:
如下:

这是整个表的数据。
我们写一条sql查询语句:

查出来的是最顶层的目录。
我们再根据其中一条数据的id来查他的下面的目录:
比如查id=74的数据

查出来的就是家电数据。
我们在查大家电下面的数据:

所以整个表就是一课数。
我们看怎么实现:
页面上我们使用Easyui的tree结构:
EasyUI tree数据结构
数据结构中必须包含:
Id:节点id
Text:节点名称
State:如果不是叶子节点就是close,叶子节点就是open。Close的节点点击后会在此发送请求查询子项目。
我们在后台查到数据之后返回给前台的json数据中需要这些参数。
流程:我们在前台单击”选择目录”来到这里:
// 初始化选择类目组件
initItemCat : function(data){
$(".selectItemCat").each(function(i,e){
var _ele = $(e);
if(data && data.cid){
_ele.after("<span style='margin-left:10px;'>"+data.cid+"</span>");
}else{
_ele.after("<span style='margin-left:10px;'></span>");
}
_ele.unbind('click').click(function(){
$("<div>").css({padding:"5px"}).html("<ul>")
.window({
width:'500',
height:"450",
modal:true,
closed:true,
iconCls:'icon-save',
title:'选择类目',
onOpen : function(){
var _win = this;
$("ul",_win).tree({
url:'/item/cat/list',
animate:true,
onClick : function(node){
if($(this).tree("isLeaf",node.target)){
// 填写到cid中
_ele.parent().find("[name=cid]").val(node.id);
_ele.next().text(node.text).attr("cid",node.id);
$(_win).window('close');
if(data && data.fun){
data.fun.call(this,node);
}
}
}
});
},
onClose : function(){
$(this).window("destroy");
}
}).window('open');
});
});
},
所以前台的请求是:url:'/item/cat/list',
好的。
Dao层:就用逆向工程的Mapper好了:
我们来写Service层:
package com.taotao.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.taotao.mapper.TbItemCatMapper;
import com.taotao.pojo.TbItemCat;
import com.taotao.pojo.TbItemCatExample;
import com.taotao.service.ItemCatService;
@Service
public class ItemCatServiceImpl implements ItemCatService { @Autowired
private TbItemCatMapper itemCatMaper;//用逆向工程自动生成的类。 @Override
public List<TbItemCat> getItemCatList(Long parentId) { TbItemCatExample tbItemExample=new TbItemCatExample();
TbItemCatExample.Criteria criteria=tbItemExample.createCriteria();
criteria.andParentIdEqualTo(parentId);
List<TbItemCat> list=itemCatMaper.selectByExample(tbItemExample); return list;
} }
Action层:
@Controller
@RequestMapping("/item/cat")
public class ItemCatController {
@Autowired
private ItemCatService itemcatservice; @SuppressWarnings({ "unchecked", "rawtypes" })
@RequestMapping("/list")
public @ResponseBody List categoryList( @RequestParam(value="id",defaultValue="0") Long parentId)
{
List catList=new ArrayList();
List<TbItemCat> list=itemcatservice.getItemCatList(parentId);
/*
* 因为我们要返回给前台的数据格式要求是id,text,state所以这里取出数据再用Map封装一层。
*/
for(TbItemCat tbItemCat:list)
{
Map node=new HashMap<>();
node.put("id", tbItemCat.getId());
node.put("text", tbItemCat.getName()); node.put("state", tbItemCat.getIsParent()?"closed":"open");
catList.add(node); } return catList; } }
页面的参数传过来的名字叫做“id”.所以我们在这里做一个转换,并且刚开始的时候是没有值得,所以设一个默认值0。
@RequestParam(value="id",defaultValue="0") Long parentId 调试:
成功!!
我们看下返回的结果json数据:
[{"id":1,"text":"图书、音像、电子书刊","state":"closed"},{"id":74,"text":"家用电器","state":"closed"},{"id":161,"text":"电脑、办公","state":"closed"},
{"id":249,"text":"个护化妆","state":"closed"}
,{"id":290,"text":"钟表","state":"closed"},
{"id":296,"text":"母婴","state":"closed"},{"id":378,"text":"食品饮料、保健食品","state":"closed"},{"id":438,"text":"汽车用品","state":"closed"},
{"id":495,"text":"玩具乐器","state":"closed"},{"id":558,"text":"手机","state":"closed"},{"id":580,"text":"数码","state":"closed"},
{"id":633,"text":"家居家装","state":"closed"},{"id":699,"text":"厨具","state":"closed"},{"id":749,"text":"服饰内衣","state":"closed"},
{"id":865,"text":"鞋靴","state":"closed"},{"id":903,"text":"礼品箱包","state":"closed"},
{"id":963,"text":"珠宝","state":"closed"},
{"id":1031,"text":"运动健康","state":"closed"},
{"id":1147,"text":"彩票、旅行、充值、票务","state":"closed"}] 当我们点击其中一个选项时,就把这个id传入到后台重行查数据了。所以名字是id
当然上面的做法不好,怎么在COntrall层用Map去封装呢。我们直接建一个pojo类就可以了啊。
如下:
POJO类:
package com.taotao.common.pojo;
public class CategoryData {
private long id;
private String text;
private String state;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
Action层:
@Controller
@RequestMapping("/item/cat")
public class ItemCatController {
@Autowired
private ItemCatService itemcatservice; @SuppressWarnings({ "unchecked", "rawtypes" })
@RequestMapping("/list")
public @ResponseBody List<CategoryData> categoryList( @RequestParam(value="id",defaultValue="0") Long parentId)
{ List<CategoryData> list=itemcatservice.getItemCatList(parentId);
/*
* 因为我们要返回给前台的数据格式要求是id,text,state所以这里取出数据再用Map封装一层。
*/ return list; } }
好了;效果一样的.
Service层:
@Service
public class ItemCatServiceImpl implements ItemCatService { @Autowired
private TbItemCatMapper itemCatMaper;//用逆向工程自动生成的类。 @Override
public List<CategoryData> getItemCatList(Long parentId) { List<CategoryData> listCAT=new ArrayList<CategoryData>(); TbItemCatExample tbItemExample=new TbItemCatExample();
TbItemCatExample.Criteria criteria=tbItemExample.createCriteria();
criteria.andParentIdEqualTo(parentId);
List<TbItemCat> list=itemCatMaper.selectByExample(tbItemExample);
for(TbItemCat tbItemCat:list)
{
CategoryData categoryData=new CategoryData();
categoryData.setId(tbItemCat.getId());
categoryData.setText(tbItemCat.getName());
categoryData.setState(tbItemCat.getIsParent()?"closed":"open"); listCAT.add(categoryData);
}
return listCAT;
} }
010商城项目:商品类目的选择——Dao,Service.Action层的分析的更多相关文章
- JAVAEE——宜立方商城03:商品类目选择、Nginx端口或域名区分虚拟机、Nginx反向代理、负载均衡、keepalived实现高可用
1. 学习计划 第三天: 1.商品类目选择(EasyUI的tree实现) 2.图片上传 a) 图片服务器FastDFS(Nainx部分) 2. 商品类目选择 2.1. 原型 2.2. 功能分析 展示商 ...
- 001淘淘商城项目:项目的Maven工程搭建
开始一个新的项目,特此记录,资料全部来源于传智播客,感谢. 我们要做一个类似电商的项目.用maven做管理. maven里面主要分为三种工程: 1:pom工程:用在父级工程,聚合工程中 2:war工程 ...
- 010医疗项目-模块一:用户添加的实现(Dao,Service,Action,增加页面调试,提交页面调试)
要实现的效果:
- ZZJ_淘淘商城项目:day01(RESTful Web Service、SVN)
淘淘商城项目是很适合初级Java程序员练习的实战项目,本次复习是另一位张老师教授的课,内容上与之前入老师版taotao商城比较有些新东西加了进来. 因此有必要记录下那些直到现在还可供参考的技术亮点分享 ...
- 048医疗项目-模块四:采购单模块—采购单受理(Dao,Service,Action三层)
需求: 我们之前把采购单交给监督单位审核了,审通过的采购单就要受理.供货商决定采购单发不发货. 说明: 我们要查的就是登录的供货商的要提供的采购药品,我们查看的是采购单详细表,至于查询条件我们用的是就 ...
- 046医疗项目-模块四:采购单模块—采购单审核(Dao,Service,Action三层)
当医院把采购单提交之后,由监管单位进行采购单审核,由卫生院及卫生局进行审核.卫生局可以审核所有医院创建的采购单,卫生院只审核本辖区医院创建的采购单. 操作流程: 点击"采购单审核" ...
- 044医疗项目-模块四:采购单模块—采购单保存(Dao,Service,Action三层)
我们上上一篇文章(042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中)做的工作是把数据插入到了数据库,我们这篇文章做的是042医疗项目-模块四:采购单模块-采购单明细添加 ...
- 047医疗项目-模块四:采购单模块—采购单审核提交(Dao,Service,Action三层)
我们之前把采购单都审核了,这篇文章说的就是审核之后提交. 其实就是改变(update)采购单的审核状态. 需求: 用户要先查看采购单的内容. 查看采购单页面:页面布局同采购单修改页面. 选择审核结果. ...
- 043医疗项目-模块四:采购单模块—采购单明细查询(Dao,Service,Action三层)
前一篇文章我们做的是在医院的角度上添加在采购单里面添加药品.这一篇文章是查看我们添加的采购单信息. 我们先看一下要实现的效果:当: 按下确认添加时,会在这里 显示出刚才添加的数据. 好,我们就来做这个 ...
随机推荐
- Handler系列之创建子线程Handler
上一篇我介绍了Handler机制的工作原理,默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handl ...
- JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
- Python(八)进程、线程、协程篇
本章内容: 线程(线程锁.threading.Event.queue 队列.生产者消费者模型.自定义线程池) 进程(数据共享.进程池) 协程 线程 Threading用于提供线程相关的操作.线程是应用 ...
- C++程序员如何转Java
C++程序员如何转Java 忙里偷闲,到了这个时间终于得空写一篇早想写的文章.其实本文的标题有些不太准确,C++程序员写Java代码不是说就非得转行写Java,抛弃C++,而只是多了一个选择而已.两 ...
- 用SignalR 2.0开发客服系统[系列3:实现点对点通讯]
前言 交流群:195866844 目录: 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 用SignalR 2.0开发客服系统[系列2:实现聊天室] 真的很感谢大家的支持,今天发表系列3 ...
- 一点做用户画像的人生经验(一):ID强打通
1. 背景 在构建精准用户画像时,面临着这样一个问题:日志采集不能成功地收集用户的所有ID,且每条业务线有各自定义的UID用来标识用户,从而造成了用户ID的零碎化.因此,为了做用户标签的整合,用户ID ...
- CSS布局 - 三栏布局
CSS布局技术可谓是前端技术中最基础的技术,就是因为基础,所以我认为要更加熟练,深入的去掌握,去梳理. 一. 传统 ---> 浮动实现的三栏布局 采用浮动实现的三栏布局有以下特点及注意事项: · ...
- Linux网络相关配置
一.修改网卡相关配置 Linux网络参数是在/etc/sysconfig/network-scripts/ifcfg-eth0中设置,其中ifcfg-eth0表示是第一个网卡,如果还有另外一块网卡,则 ...
- python学习笔记1:python入门
关于版本的选择 按照网上的说法,如果python是为了在工作中使用,选择2.7版本的.这里我选择2.7.9版本的来进行学习: Python是什么? 是一种高级的计算机程序设计语言.应用范围比较广,go ...
- 使用命令 gradle uploadArchives 的异常: Unable to initialize POM pom-default.xml: Failed to validate POM for project
在使用:gradle uploadArchives 命令对项目进行上传maven时,常常遇到如下报错: 这时候要仔细的检查一下build.gradle文件中的dependencies内容,很多时候是由 ...