版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40788630/article/details/85705717
首先打开项目的购物车,如图所示:
右下角有一个去结算按钮,按照设计,点击去结算按钮需要实现跳转到结算页面
实现此功能的顺序为:dao层(数据库操作层)——service层()——controller(控制层)——jsp层(表现层)
一、dao层
在com.dao包中创建orderDao接口:其接口中包含六个方法,分别是:添加订单、生成订单详情、查询购买数量
其详细代码如下所示:
package com.dao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.web.bind.annotation.RequestMapping;
import com.po.Order;
@RequestMapping("orderDao")
@Mapper
public interface OrderDao {
public int addOrder(Order order);
public int addOrderDetail(Map<String, Object> map);
public List<Map<String, Object>> selectGoodsShop(Integer uid);
public int updateStore(Map<String, Object> map);
public int clear(Integer uid);
public int pay(Integer ordersn);
}
其对应的映射文件如下所示:
<insert id="addOrder" parameterType="Order" keyProperty="id" useGeneratedKeys="true">
insert into orderbasetable (busertable_id, amount, status, orderdate) values (#{busertable_id}, #{amount}, 0, now())
</insert>
<!-- 生成订单详情 -->
<insert id="addOrderDetail" parameterType="map">
insert into ORDERDETAIL (orderbasetable_id, goodstable_id, SHOPPINGNUM) select #{ordersn}, goodstable_id, SHOPPINGNUM from CARTTABLE where busertable_id = #{uid}
</insert>
<!-- 查询商品购买量,以便更新库存使用 -->
<select id="selectGoodsShop" parameterType="Integer" resultType="map">
select shoppingnum gshoppingnum, goodstable_id gid from carttable where busertable_id=#{uid}
</select>
<!-- 更新商品库存 -->
<update id="updateStore" parameterType="map">
update GOODSTABLE set GSTORE=GSTORE-#{gshoppingnum} where id=#{gid}
</update>
<!-- 清空购物车 -->
<delete id="clear" parameterType="Integer">
delete from carttable where busertable_id=#{uid}
</delete>
<!-- 支付订单 -->
<update id="pay" parameterType="Integer">
update orderbasetable set status=1 where id=#{ordersn}
</update>
三、实现事务层(service层)
其接口如下所示:
package com.service.before;
import javax.servlet.http.HttpSession;
import org.springframework.ui.Model;
public interface OrderService {
public String orderSubmit(Model model,HttpSession session,Double amount);
public String pay(Integer ordersn);
}
其接口实现类:
package com.service.before;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import com.dao.OrderDao;
import com.po.Order;
import com.util.MyUtil;
@Service("orderService")
@Transactional
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderDao orderDao;
@Override
public String orderSubmit(Model model, HttpSession session, Double amount) {
Order order = new Order();
order.setAmount(amount);
order.setBusertable_id(MyUtil.getUserId(session));
//生成订单,并将主键返回order
orderDao.addOrder(order);
//生成订单详情
Map<String, Object> map = new HashMap<String, Object>();
map.put("ordersn", order.getId());
map.put("uid", MyUtil.getUserId(session));
orderDao.addOrderDetail(map);
//更新商品库存
//更新商品库存1.查询商品购买量,以便更新库存使用
List<Map<String, Object>> list = orderDao.selectGoodsShop(MyUtil.getUserId(session));
//更新商品库存2.根据商品购买量更新库存
for (Map<String, Object> map2 : list) {
orderDao.updateStore(map2);
}
//清空购物车
orderDao.clear(MyUtil.getUserId(session));
model.addAttribute("ordersn", order.getId());
return "before/orderdone";
}
@Override
public String pay(Integer ordersn) {
orderDao.pay(ordersn);
return "befeore/paydone";
}
}
三、控制层实现
package com.controller.before;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.service.before.OrderService;
@Controller
@RequestMapping("/order")
public class OrderController extends BaseBeforeController{
@Autowired
private OrderService orderService;
/**
* 提交订单
*/
@RequestMapping("/orderSubmit")
public String orderSubmit(Model model, HttpSession session,Double amount) {
return orderService.orderSubmit(model, session, amount);
}
/**
* 支付订单
*/
@RequestMapping("/pay")
public String pay(Integer ordersn) {
return orderService.pay(ordersn);
}
}
四、jsp层
由于jsp文件太长就不一一列举
五、测试
将项目发送到tomcat上之后:
点击去结算:
点击提交订单:
点击银联图案进行支付: