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;
    }

}
时间: 2024-10-16 15:14:27

010商城项目:商品类目的选择——Dao,Service.Action层的分析的相关文章

046医疗项目-模块四:采购单模块—采购单审核(Dao,Service,Action三层)

当医院把采购单提交之后,由监管单位进行采购单审核,由卫生院及卫生局进行审核.卫生局可以审核所有医院创建的采购单,卫生院只审核本辖区医院创建的采购单. 操作流程: 点击"采购单审核" 显示如下: 具体实施如下: Dao层: 分为两个: 查找cgd表中的数据以及数据的数量来实现分页. 我们查找cdg数据的SQL语句: select useryy.mc useryymc, yycgd.*, (select info from dictinfo where typecode = '010' a

044医疗项目-模块四:采购单模块—采购单保存(Dao,Service,Action三层)

我们上上一篇文章(042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中)做的工作是把数据插入到了数据库,我们这篇文章做的是042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中这里没有写采购量,我们这篇文章做的就是把采购量写进入,也就是Updata之前的那个记录.这样采购单里面的记录就完整了. 如下: Dao层:用的是逆向工程生成的:yycgdmxMapper.updateByPrimaryKeySelective(yycgdmx_updat

047医疗项目-模块四:采购单模块—采购单审核提交(Dao,Service,Action三层)

我们之前把采购单都审核了,这篇文章说的就是审核之后提交. 其实就是改变(update)采购单的审核状态. 需求: 用户要先查看采购单的内容. 查看采购单页面:页面布局同采购单修改页面. 选择审核结果.填写 审核意见进行提交 . 约束条件: 采购单状态为审核中方可提交审核. 审核结果(审核通过.审核不通过)必须选择. 审核意见是否必填根据用户需求来定,本系统采用不必填 . 数据库操作: 更新采购单状态为审核通过或审核不通过. DAo层: 使用逆向工程生成的Mapper: yycgdMapper.u

048医疗项目-模块四:采购单模块—采购单受理(Dao,Service,Action三层)

需求: 我们之前把采购单交给监督单位审核了,审通过的采购单就要受理.供货商决定采购单发不发货. 如下: 这张单子里面的就是采购单详细表,这儿查出来的数据就只是特定于这个供货商的采购单详细表,一个区域里面只有一个供货商,有好几个医院,每个医院有好多个采购单.那么就是一个供货商有好几个采购单.供货商要看着每一个采购单的明细表才会去处理这个数据要不要发货. 我们先写Mapper: 我们写sql时要参考: Mapper.xml如下: <!-- 采购单药品明细查询列表 --> <select id

DAO/service/Action分层的作用

软件开发的分层结构对软件的质量很重要,如果一个小的项目来说 Service层似乎用处不是很大,但如果到了一定大的程序了,那么这service 层进会体现出价值.你仔细看 dao 和service 层两个层,的引用 类你会发现,在dao中 会用很多的dateSource 数据库的一些类,什么JDBC包里面的类,但是到了service 里就基本上没有了,当你在Action中再调用service的时候,就完全没有了和数据库有关的任何类了,而如果你直接调用dao的话Action中就会存在大量的数据库类.

model ,orm,dao,service,持久层 ,mvc 这些名词在java中的概念?

这些概念不针对某个特定的编程语言. view层:结合control层,显示前台页面. control层:业务模块流程控制,调用service层接口. service层:业务操作实现类,调用dao层接口. dao层:数据业务处理,持久化操作 model层:pojo,OR maping,持久层 借别人一张图,希望题主能理清楚层间关系:  企业应用开发中,可以将系统分为三层:表示层.业务层.持久层,就是所谓的三层架构.三层各有各的架构模式.其中表示层常用架构就是MVC,业务层常用架构模式分为事务脚本模

DAO service action分别什么作用

首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操作,在这里可以编写自己需要的代码(比如简单的判断).Action层:引用对应的Service层,在这里结合Struts的配置文件,跳转到指定的页面,当然也能接受页面传递的请求数据,也可以做些计算处理.以上的Hibernate,Struts,都需要注入到Spring的配置文件中,Spring把这些联系

006商城项目:该项目的路径访问问题

我们先看一下这个项目的部署路径. 打开taotao-manager的pom.xml看到: Tomcat插件的部署路径是: <!-- 添加插件 --> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port

商城项目:商品列表ajax加载,ajax加入购物车

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProductLists.aspx.cs" Inherits="Hidistro.UI.Web.Vshop.ProductLists" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">