SpringBoot工程下商品子系统分析及实现

Posted 六一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot工程下商品子系统分析及实现相关的知识,希望对你有一定的参考价值。

1.业务描述:
将数据库中的商品信息从数据库查询出来,然后进行删除、修 改、添加等操作。

2.技术架构设计:整体依旧基于“分而治之”的设计思想,采用MVC分层对业务进行技术实现。

3.基于特定架构下技术选型:
1)SpringBoot 管理依赖,提供基础配置,实现开箱即用
2)HikariCP 定义连接池
3)MyBatis 实现数据的持久操作
4)Spring IOC 实现资源整合
5)Spring Web 模块实现请求响应处理
6)Thymeleaf 基于此对象实现html模板解析

4.核心API(接口和类)的设计
1)pojo (Goods)
2)dao (GoodsDao,GoodsMapper.xml)
3)service(GoodsService,GoodsServiceImpl)
4)controller (GoodsController)

商品信息的查询并呈现:

1)Goods (id,name,remark,createdTime)
2)GoodsDao (@Mapper):List findGoods();

3)GoodsMapper.xml(mapper/goods/GoodsMapper.xml)
4)GoodsService,GoodsServiceImpl (@Service)
5)GoodsController(@Controller): String doFindGoods(){return goods;}
6)goods.html (templates/modules/)

第一步:定义商品pojo对象Goods,基于此对象封装商品数据。

public class Goods {
    private Integer id;
    private String name;
    private String remark;
    private Date createdTime;

    @Override 
    public String toString() {
    return "Goods{" +
    "id=" + id +
    ", name=\'" + name + \'\\\'\' +
    ", remark=\'" + remark + \'\\\'\' +
    ", createdTime=" + createdTime +
    \'}\';
}
public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getRemark() { 
    return remark; 
}
public void setRemark(String remark) { 
    this.remark = remark; 
}
public Date getCreatedTime() { 
    return createdTime; 
}
public void setCreatedTime(Date createdTime) {         this.createdTime = createdTime; 
}
}

第二步:定义GoodsDao接口及查询方法

package com.cy.pj.goods.dao;
@Mapper
public interface GoodsDao{
    List<Goods> findGoods(String name);
}

第三步:定义GoodsMapper.xml文件并添加查询SQL映射

...
<mapper namespace="com.cy.pj.goods.dao.GoodsDao">
    <select id="findGoods" resultType="com.cy.pj.goods.pojo.Goods">
    select *
    from tb_goods
        <where>
             <if test="name!=null and name!=\'\'">
                 name like concat ("%",#{name},"%")
             </if>
         </where> 
    </select>
</mapper>

第四步:定义GoodsService接口及查询方法
定义GoodsService接口及查询方法

package com.cy.pj.goods.service;
public interface GoodsService{
    List<Goods> findGoods(String name);
}

定义GoodsService接口实现类GoodsServiceImpl并重写相关方法

package com.cy.pj.goods.service.impl;
@Service
public class GoodsServiceImpl implements GoodsService{
    @Autowired
    private GoodsDao goodsDao;
    public List<Goods> findGoods(String name){
        return goodsDao.findGoods(name);
    }
  }

第五步:定义GoodsController类及处理查询请求的方法

package com.cy.pj.goods.controller;
@Controller
@RequestMapping("/goods/")
public class GoodsController{
    @Autowired
    private GoodsService goodsService;

    @RequestMapping("doFindGoods")
    public String doFindGoods(String name,Model model){
    List<Goods> list=goodsService.findGoods(name);
    model.addAttribute("list",list);
    return "goods";
  }
}

查询客户端分析及实现
第一步:定义goods.html页面,用于呈现从服务端返回的数据

<table>
    <thead>
        <tr>
            <th>id</th>
            <th>name</th>
            <th>remark</th>
            <th>createdTime</th>
            <th>operation</th>
        </tr>
    </thead>

    <tbody>
        <tr th:each="g:${list}">
            <td th:text="${g.id}">1</td>
            <td th:text="${g.name}">A</td>
            <td th:text="${g.remark}">A..</td>
            <td th:text="${#dates.format(g.createdTime, \'yyyy/MM/ddHH:mm\')}">2020/12/30</td>
                <td><buttonth:onclick="doDeleteById([[${g.id}]])">delete</button>
                <button th:onclick="doFindById([[${g.id}]])">update</button>
            </td>
        </tr>
    </tbody>
</table>

第二步:注册查询按钮click事件,基于此事件进行商品信息查询

<form th:action="@{/goods/doFindGoods}" method="get">
    <input type="text" name="name">
    <input type="submit" value="查询">
</form>   

商品子系统删除业务实现

业务分析
客户端点击删除按钮时,基于id删除数据中的商品信息

删除服务端实现
第一步:在GoodsDao中添加删除方法

@Delete("delete from tb_goods where id=#{id}") int deleteById(Integer id);

第二步:在GoodsService接口及实现类中删除方法

public int deleteById(Integer id){
    int rows=goodsDao.deleteById(id);
    return rows;

第三步:在GoodsController中添加处理删除请求的方法

@RequestMapping("doDeleteById")
public String doDeleteById(Integer id,Model model){
    goodsService.deleteByreturn             
    "redirect:/goods/doFindGoods";Id(id);

商品添加页面设计及呈现

业务分析
在商品列表页面上点击添加按钮时,进入商品添加页面.

添加服务端实现
在GoodsController中添加返回商品添加页面的方法

@GetMapping("doGoodsAddUI")
public String doGoodsAddUI(){
    return "goods-add";

添加客户端设计实现
第一步:商品列表页面添加按钮事件及事件处理函数

<button onclick="doLoadGoodsAddUI()">添加商品</button>
function doLoadGoodsAddUI(){ location.href=`${rootUrl}/goods/doGoodsAddUI`; }

第三步:创建商品添加页面(goods-add.html),关键代码如下:

<form th:action="@{/goods/doSaveGoods}" method="post">
    <ul>
        <li>name</li> 
        <li><input type="text" name="name"></li> 
        <li>remark</li> 
        <li><textarea rows="5" cols="50" name="remark"></textarea></li> 
        <li><input type="submit" value="Save Goods"></li>
    </ul>
</form>

商品子系统添加业务实现

业务分析:
在页面上输入商品,输入完成,点击保存按钮将商品信息添加到数据库.

服务端设计实现
第一步:GoodsDao接口中添加保存商品信息的方法及映射

@Insert("insert into tb_goods (name,remark,createdTime) values (#{name},# {remark},now())")
int insertGoods(Goods goods);

第二步: GoodsService接口及实现类中添加保存商品信息的方法

public int saveGoods(Goods goods){
    return goodsDao.insertGoods(goods);
}    

第三步:GoodsController中添加保存商品信息的方法

@PostMapping("doSaveGoods")
pulbic String doSaveGoods(Goods goods,Model model){
    goodsService.saveGoods(goods);
    return "redirect:/goods/doFindGoods";
}

商品修改页面及数据呈现

业务分析
在商品列表页面点击修改按钮时,基于当前行记录的id,查询商品信息,并将商品信息呈现在页面上.

服务端设计及实现
第一步:GoodsDao接口中添加基于id执行查询的方法j及映射.

@Select("select * from tb_goods where id=#{id}") Goods findById(Integer id);

第二步:GoodsService接口及实现类中添加基于id执行查询的方法.

public Goods findById(Integer id){
    //......
    return goodsDao.findById(id);
}

第三步:GoodsController类中添加处理基于商品id执行查询的方法

@GetMapping("/doFindById/{id}")
public String doFindById(@PathVariable Integer id,Model model){
    Goods goods=goodsService.findById(id);
    model.addAttribute("goods",goods);
    return "goods-update";  

客户端设计及实现
第一步:在goods列表页面,添加更新按钮并注册点击事件.

<button th:onclick="doFindById([[${g.id}]])">update</button>
function doFindById(id){
location.href=`${rootUrl}/goods/doFindById/${id}`

第二步:创建goods-update.html页面并基于此页面呈现修改数据

<form th:action="@{/goods/doUpdateGoods}" method="post">
    <ul>
        <li><input type="hidden" name="id" th:value="${goods.id}"></li>
        <li>name</li>
        <li><input type="text" name="name" th:value="${goods.name}"></li>
        <li>remark</li>
        <li><textarea rows="5" cols="50" name="remark" th:text="${goods.remark}"></textarea></li>
        <li><input type="submit" value="Update Goods"></li>
     </ul>
</form>           

商品数据更新设计及实现

业务分析
在修改页面,点击修改按钮时将表单数据提交到服务端进行更新

服务端设计及实现
第一步:GoodsDao接口中添加修改方法及SQL映射

@Update("update tb_goods set name=#{name},remark=#{remark} where id=#{id}")
int updateGoods(Goods goods);

第二步:GoodsService接口及实现类添加商品更新方法

public int updateGoods(Goods goods){ 
    return goodsDao.updateGoods(goods); 
}

第三步:GoodsController中添加处理商品更新请求的方法

@RequestMapping("doUpdateGoods")
public String doUpdateGoods(Goods goods,Model model){ 
    goodsService.updateGoods(goods); 
    return "redirect:/goods/doFindGoods"; 
}

客户端设计及实现
点击update goods 按钮将表单数据提交到服务端。

以上是关于SpringBoot工程下商品子系统分析及实现的主要内容,如果未能解决你的问题,请参考以下文章

用例建模 Use Case Modeling

SpringBoot 工程中的响应标准设计及实现

Java+Springboot+Mybatis+Mysql+Bootstrap+Maven实现网上商城系统

淘淘商城01——工程介绍及搭建

Java项目:网上商城系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)

java版Spring Cloud+SpringBoot+mybatis+uniapp b2b2c 之分析商品管理强化商品互联网特性及线上商品生命周期管理