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