1. 构建JT-MANAGE为服务生产者

1.1 定义接口的实现

1.2 编辑YML配置文件

1.3编辑服务消费者

2. 实现商品动静获取

2.1 业务需要

1.当用户点击商品按钮时,跳转到商品的展示页面 item.jsp
2.依据itemId号 查问item表/itemDesc表
3.将数据在页面中进行展示

2.2 编辑ItemController

@Controllerpublic class ItemController {    //启动时是否校验有服务提供者    @Reference(check=false)    private DubboItemService itemService;    /**     * 依据商品ID查问商品信息     * 1.URL地址:http://www.jt.com/items/562379.html     * 2.参数:   562379 restFul格调     * 3.返回值: String     * 4.页面取值操作     *      ${item.title }          获取商品信息   同步取值     *      ${itemDesc.itemDesc }   获取商品详情信息     */    @RequestMapping("/items/{itemId}")    public String findItemById(@PathVariable Long itemId, Model model){        //1.获取商品相干信息        Item item = itemService.findItemById(itemId);        ItemDesc itemDesc = itemService.findItemDescById(itemId);        //2.将数据传递到页面中        model.addAttribute("item",item);        model.addAttribute("itemDesc",itemDesc);        //跳转到商品展示页面        return "item";    }}

2.3 编辑ItemService

@Service(timeout = 3000)public class DubboItemServiceImpl implements DubboItemService {    @Autowired    private ItemMapper itemMapper;    @Autowired    private ItemDescMapper itemDescMapper;    @Override    public Item findItemById(Long itemId) {        return itemMapper.selectById(itemId);    }    @Override    public ItemDesc findItemDescById(Long itemId) {        return itemDescMapper.selectById(itemId);    }}

2.4 商品展示成果测试

3. 购物车实现

3.1 新建Cat POJO对象

3.2 创立JT-CART我的项目

3.2.1 创立JT-CART我的项目

3.2.2 增加继承/依赖/插件

 <parent>        <artifactId>jt</artifactId>        <groupId>com.jt</groupId>        <version>1.0-SNAPSHOT</version>    </parent>    <!--增加jar包文件依赖-->    <dependencies>        <dependency>            <groupId>com.jt</groupId>            <artifactId>jt-common</artifactId>            <version>1.0-SNAPSHOT</version>        </dependency>    </dependencies>    <!--所有业务零碎,必须增加build标签-->    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build>

3.2.3 构建Dubbo Cart我的项目

3.2.4 编辑YML配置文件

server:  port: 8094  servlet:    context-path: /spring:  datasource:    #引入druid数据源    #type: com.alibaba.druid.pool.DruidDataSource    #driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true    #链接的是数据库代理    #url: jdbc:mysql://192.168.126.129:8066/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true    username: root    password: root  mvc:    view:      prefix: /WEB-INF/views/      suffix: .jsp#mybatis-plush配置mybatis-plus:  type-aliases-package: com.jt.pojo  mapper-locations: classpath:/mybatis/mappers/*.xml  configuration:    map-underscore-to-camel-case: truelogging:  level:     com.jt.mapper: debug#对于Dubbo配置dubbo:  scan:    basePackages: com.jt    #指定dubbo的包门路  application:              #利用名称    name: provider-cart    #一个接口对应一个服务名称 如果是多个实现类则利用名称统一  registry:    address: zookeeper://192.168.126.129:2181?backup=192.168.126.129:2182,192.168.126.129:2183  protocol:  #指定协定    name: dubbo  #应用dubbo协定(tcp-ip)  web-controller间接调用sso-Service    port: 20882  #每一个服务都有本人特定的端口 不能反复.` 

3.3 实现购物车列表展示

3.3.1 业务需要

当用户点击购物车按钮时,应该跳转到购物车列表页面中,要求依据userId 查问购物车列表数据.
同时跳转页面为 cart.jsp

3.3.2 编辑CartController

@Controller@RequestMapping("/cart")public class CartController {    @Reference(check = false)    private DubboCartService cartService;    /**     * 展示购物车列表数据     * url地址:http://www.jt.com/cart/show.html     * 参数:   必须获取userId=7L     * 返回值:  cart.jsp     * 页面取值参数: ${cartList}     */     @RequestMapping("/show")     public String findCartList(Model model){         long userId = 7L;   //临时写死,前期保护         List<Cart> cartList = cartService.findCartList(userId);         model.addAttribute("cartList",cartList);         return "cart";    }}

3.3.3 编辑CartService

@Servicepublic class DubboCartServiceImpl implements DubboCartService{    @Autowired    private CartMapper cartMapper;    @Override    public List<Cart> findCartList(long userId) {        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();        queryWrapper.eq("user_id", userId);        return cartMapper.selectList(queryWrapper);    }}

3.3.4 页面成果展示

3.4 购物车数量批改

3.4.1 业务剖析

1).页面URL剖析

2).页面JS剖析

$(".increment").click(function(){//+            var _thisInput = $(this).siblings("input");            _thisInput.val(eval(_thisInput.val()) + 1);            $.post("/cart/update/num/"+_thisInput.attr("itemId")+"/"+_thisInput.val(),function(data){                TTCart.refreshTotalPrice();            });        }); 

3.4.2 编辑CartController

 /**     *  业务需要: 实现商品数量的更新操作     *  url:http://www.jt.com/cart/update/num/1474391990/10     *  参数: userId=7/itemId/num     *  返回值: void     *     *  用法: 如果restFul参数名称与对象的属性名称统一,则能够应用对象的形式接管     */    @RequestMapping("/update/num/{itemId}/{num}")    @ResponseBody //1.json返回   2.示意ajax申请完结    public void updateCartNum(Cart cart){        long userId = 7L;        cart.setUserId(userId);        cartService.updateCartNum(cart);    } 

3.4.3 编辑CartService

3.5 购物车新增操作

3.5.1 业务剖析

阐明: 当用户查问商品之后进行加购时,应该跳转(重定向)到购物车展示页面.
注意事项:
同一个用户反复增加雷同的数据时,只批改商品的数量.

3.5.2 页面剖析

1).页面URL剖析

2).页面参数剖析

3).页面JS剖析
3.1 form标签

3.2 表单提交

3.5.3 编辑CartController

/**     * 实现购物车入库操作     * url地址:http://www.jt.com/cart/add/1474391990.html     * 参数:   cart form表单提交     * 返回值: 重定向到购物车列表页面     */    @RequestMapping("/add/{itemId}")    public String saveCart(Cart cart){        long userId = 7L;        cart.setUserId(userId);        cartService.saveCart(cart);        return "redirect:/cart/show.html";    } 

3.5.4 编辑CartService

//如果用户反复加购,则只做数量的批改    //依据userId和itemId 判断数据是否有值    @Override    @Transactional    public void saveCart(Cart cart) {        QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();        queryWrapper.eq("user_id", cart.getUserId());        queryWrapper.eq("item_id", cart.getItemId());        Cart cartDB = cartMapper.selectOne(queryWrapper);        if(cartDB == null){ //示意数据库中没有记录,间接入库            cartMapper.insert(cart);        }else{  //数据库中有记录 只改数量            int num = cart.getNum() + cartDB.getNum();            //1.手写sql 2.简洁封装            Cart cartTemp = new Cart();            cartTemp.setId(cartDB.getId()).setNum(num);            cartMapper.updateById(cartTemp);        }    } 

3.6 购物车删除操作

3.6.1 页面剖析

业务逻辑: 当删除购物车时,应该删除数据库记录,之后将页面重定向到购物车列表页面.

3.6.2 编辑CartController

 /**     * 实现购物车删除操作     * 1.url地址: http://www.jt.com/cart/delete/1474392004.html     * 2.参数:    1474392004 itemId     * 3.返回值:  String   重定向到列表页面     */     @RequestMapping("/delete/{itemId}")     public String deleteCart(Cart cart){         Long userId = 7L;         cart.setUserId(userId);         cartService.deleteCart(cart);         return "redirect:/cart/show.html";     }

3.6.3 编辑CartService

 @Override    public void deleteCart(Cart cart) { //userId/itemId         //依据对象中不为null的属性当做where条件.        cartMapper.delete(new QueryWrapper<>(cart));    }