饿了吗前后端分离Sverlet版本

用了什么技术?

  • 前端:Vue,AJAX
    -后端:Servlet
    MVC流程:客户端向服务端发送请求,首先经过前端控制器DispatcherServlet,利用反射机制,通过前端发送过来的地址,截取类名和方法名,通过Class.forName获取到类,再通过getMethod()和invoke()调用类中的方法,最后把json返回给前台
  • Service事务管理:beginTransaction()开启事务,commitTransaction()提交事务
  • JSON数据转换:用到jackson里面的objectMapper,通过里面的writerValueAsString()将结果集转成json格式返回给前端

这个项目有几张表,表之间有什么关联关系?

  • 有 用户表,商家表,食品表,购物车表,订单表,订单明细表,配送信息表
  • 数据库:一对多和多对一的映射
    一对多体现在:一个商家有多个食品,一个订单有多个明细
    多对一体现在:多个订单来自于同一个商家,多个购物车里有同一个食品,多个明细里面有同一个食品
  • gitee:代码版本管理工具

后端核心业务

生成订单

1.通过商家Id,获取当前商家信息(businessDao.getBusinessById),
查询购物车列表listcart,获取到当前用户购物车中的数据(cartDao.listCart方法)
遍历ListCart,计算总价(数量*单价+配送费)
2.创建订单,返回订单的编号(ordersDao.createOrders())
3.将信息批量添加到订单明细表里

  • 首先订单明细有很多条记录,是一个集合,
    我们需要遍历ListCart,for循环里new一个订单明细对象,把属性加进去,最后都放到List集合里
    最后((orderDetail.saveOrderDetail()))
    如何批量添加:需要动态拼接sql "insert into orderDetail(orderId,foodId,quantity values)"
    每遍历一次拿到一个明细
for(OrderDetail od:list){
sql.append("od.getOrderId()+"","+od.getFoodId()+'',"+od.getQuantity()+"),")
}

4.清空购物车removecart

跨域问题怎么解决的?

  • 不符合同源策略:协议,ip,端口号有一个不一样就不同源
  • 解决方式:后端在filter里用cors,配置请求头,让前后端请求地址一样
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容