Java电商项目-2.实现后台商品查询,上下架及删除

扩展-链接:表白小游戏教程(零基础也能学会)

到Github获取源码请点击此处

一. 使用Mybatis分页插件完成商品的分页查询

  • 在第一章中我们已经搭建好了环境, 并且在配置Mybatis的时候已经配置好了分页插件.

在这里插入图片描述

  • 下面实现商品查询的分页显示
  • 由于最终后台要返回的Json数据包含查询的集合数据和商品条目总数, 我们为此封装一个Java Bean.
  • 首先在ashop-common模块下建包, 并创建PageResult类.

在这里插入图片描述

/**
 * 封装DataGrid控件需要的数据模型
 */
public class PageResult<T> implements Serializable {
    private List<T> rows;//rows和total是EasyUI的命名规范
    private long total;
	/*省略 get / set 方法...*/
}

 

  • 现在我们要编写获取商品列表信息的代码, 这段代码将会通过Dubbo远程发布, web模块通过调用这些远程服务获取商品列表信息.
  • 接下来到service模块中定义获取商品列表的service接口

在这里插入图片描述

public interface ItemService {
    /**
     * 实现商品信息的分页查询
     */
    public PageResult<TbItem> selectItemList(Integer page, Integer rows);
}
  • 温馨提示: 如果PageResult不能导包, 查看pom文件是否有对common模块进行依赖.
  • 然后在实现类模块中创建对应的实现类.
@Service
public class ItemServiceImpl implements ItemService {

    //注入mapper接口代理对象
    @Autowired
    private TbItemMapper tbItemMapper;

    @Override
    public PageResult<TbItem> selectItemList(Integer page, Integer rows) {

        //执行分页操作
        Page ps = PageHelper.startPage(page, rows);
        //创建example对象
        TbItemExample example = new TbItemExample();
        //执行数据库查询操作
        List<TbItem> list = tbItemMapper.selectByExample(example);
        PageResult<TbItem> result = new PageResult<>();
        result.setRows(list);
        result.setTotal(ps.getTotal());
        return result;
    }
}

 

  • 接下来需要到Dubbo配置文件中发布Dubbo服务.

在这里插入图片描述

  • 然后编写测试程序, 发布服务

在这里插入图片描述

 

  • 接着编写web模块代码, 这里再次回顾调用的思路: 首先会我们查询商品列表的服务会在ashop-rpc-service-impl模块进行发布, 而web模块则会调用已经发布的服务, 处理来自浏览器的请求并进行响应.
  • 首先在web模块的dubbo配置文件中配置一个远程服务代理对象

在这里插入图片描述

  • 然后在web模块中创建service接口及其实现类
public interface ManagerItemService {
    /**
     * 完成商品的分页查询
     */
    public PageResult<TbItem> selectItemListService(Integer page, Integer rows);
}

@Service
public class ManagerItemServiceImpl implements ManagerItemService {

    @Autowired
    private ItemService itemServiceProxy;

    @Override
    public PageResult<TbItem> selectItemListService(Integer page, Integer rows) {
        return itemServiceProxy.selectItemList(page, rows);
    }
}
  • 然后编写controller类, 处理商品信息的分页查询请求.
@Controller
public class PageController {
    /**
     * 加载商城后台系统的首页
     */
    @RequestMapping("/")
    public String showIndex(){
        return "index";
    }

    /**
     * 加载其他的jsp视图
     */
    @RequestMapping("{page}")
    public String showPage(@PathVariable String page){
        return page;
    }
}
  • 以上工作做好后, 按下面步骤执行:
  1. 序列化TbItem的pojo类, 我由于没有进行序列化, 导致后面报错了
  2. 对整体项目进行install(install前可以先clean一下)
  3. 先编写的测试程序启动, 发布Dubbo服务, 然后启动Tomcat, 接着就能正常访问了.

在这里插入图片描述

  • 在这过程中自己犯了个错误, 导致mybatis出错.
  • 出错原因是mapper.xml文件和mapper接口没有在同一个文件夹中. 后来通过查看target文件发现没有mapper.xml文件, 上网查了查如果使用idea需要在pom.xml文件中配置搬运mapper.xml文件.
    <!--Eclipse中会自动把mapper.xml文件放到target目录下, 但是idea不会, 所以要手动配置-->
    <build>
        <resources>
            <resource>
                <directory>${basedir}/src/main/resources</directory>      <!--  //发布该目录下的文件 -->
                <includes>
                    <include>**/*.xml</include>            <!-- //发布所有以xml结尾的文件 -->
                </includes>
            </resource>
        </resources>
    </build>

 

二. 商品的上下架实现

接下来的商品上下架和删除的思路和商品的查询是类似的, 可以通过这三个功能练习一下, 以下的描述可能没有上面讲述商品查询时严谨

  • 首先创建一个Java Bean封装商品上下架的响应信息
/**
 * 封装客户端发送上架, 下架, 删除商品请求后, 需要响应的数据模型.
 */
public class AshopResult implements Serializable {
    private Integer status; //响应状态
    private Object data;    //响应数据
    private String msg;     //响应消息

    /**
     * 静态方法, 返回AshopResult对象
     */
    public static AshopResult ok(){
        return new AshopResult(null);
    }

    public AshopResult() {
    }

    public AshopResult(Object data) {
        this.data = data;
        this.status = 200;
        this.msg = "ok";
    }

    public AshopResult(Integer status, String msg) {
        this.status = status;
        this.msg = msg;
    }

    public AshopResult(Integer status, Object data, String msg) {
        this.status = status;
        this.data = data;
        this.msg = msg;
    }
	// get / set ...
}
  • 然后在ashop-rpc-service模块的ItemService接口中添加修改商品状态的方法
/**
 * 完成商品上下架状态的修改
 * @param itemIds   修改的商品集合
 * @param flag  true: 上架, false: 下架
 * @return
 */
public AshopResult updateItemStatus(List<Long> itemIds, boolean flag);
  • 然后到service实现类中重写该方法
    @Override
    public AshopResult updateItemStatus(List<Long> itemIds, boolean flag) {
        //创建TbItem对象
        TbItem item = new TbItem();
        item.setStatus((byte) (flag ? 1 : 2));
        //动态产生where条件
        TbItemExample example = new TbItemExample();
        Criteria c = example.createCriteria();
        c.andIdIn(itemIds);//产生这样的效果: where id in(3, 4, 5...)
        tbItemMapper.updateByExample(item, example);
        return AshopResult.ok();
    }
  • 至此我们完成了更改商品状态这一远程服务的编写, 下面我们编写客户端更改商品信息的代码.
  • controller
    /**
     * 处理商品上架请求
     * @param ids
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "item/reshelf", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public AshopResult reshelfItem(Long[] ids){
        return managerItemService.reshelfItem(ids);
    }

    /**
     * 处理商品下架请求
     * @param ids
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "item/instock", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public AshopResult instockItem(Long[] ids){
        return managerItemService.instockItem(ids);
    }
  • 对应的service接口实现类:
    @Override
    public AshopResult reshelfItem(Long[] ids) {
    	//把Long型数组转为list集合
        ArrayList<Long> list = new ArrayList<>();
        for(int i = 0; i < ids.length; i++){
            list.add(ids[i]);
        }
        //调用远程服务
        return itemServiceProxy.updateItemStatus(list, true);
    }

    @Override
    public AshopResult instockItem(Long[] ids) {
        ArrayList<Long> list = new ArrayList<>();
        for(int i = 0; i < ids.length; i++){
            list.add(ids[i]);
        }
        return itemServiceProxy.updateItemStatus(list, false);
    }

 

三. 实现商品删除操作

  • 照葫芦画瓢, 首先提供远程服务, 在service模块的ItemService接口中添加删除商品信息的方法

在这里插入图片描述

  • 然后编写对应的实现类完成删除, 代码和修改商品上下架差不多

在这里插入图片描述

  • 完成这两步后, 远程服务接口已经写好, 现在编写客户端后台代码, 同样是编写service接口和对应的实现类

在这里插入图片描述

  • 最后编写controller, 提供处理请求的方法.

在这里插入图片描述

  • 到此为止, 商品的上下架以及删除功能已经完成.

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值