你不得不知道的MyBatis基础知识之重写OrderService(5)


  凭借我们在上一节做好的订单Mapper,以及本节新添加的OrdersDetailsMapper和JyInfoMapper来完成对OrderService的重写

准备工作

OrdersDetailsMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lazy.mappers.OrdersDetailsMapper">
    <insert id="addOrdersDetails" useGeneratedKeys="true" keyProperty="oddid" keyColumn="oddid">
        INSERT INTO orderdetails(orderid, pid, pnum) VALUES
        <foreach collection="details" item="item" separator=",">
            (#{item.orderid.orderid},#{item.pid.pid},#{item.pnum})
        </foreach>
    </insert>

</mapper>

OrdersDetailsMapper.java

package com.lazy.mappers;

import com.lazy.domain.OrderDetails;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface OrdersDetailsMapper {
    int addOrdersDetails(@Param("details") List<OrderDetails> details);
}


JyInfoMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lazy.mappers.JyInfoMapper">
    <insert id="addJyInfo">
        INSERT INTO jyinfo(JYCODE, JYTYPE, JYMONEY) VALUES (#{jycode},#{jytype},#{jymoney})
    </insert>

</mapper>

OrdersDetailsMapper.java

package com.lazy.mappers;

import com.lazy.domain.JyInfo;

public interface JyInfoMapper {
    int addJyInfo(JyInfo info);
}


重写OrderService

package com.lazy.service;

import com.lazy.domain.*;
import com.lazy.mappers.JyInfoMapper;
import com.lazy.mappers.OrdersDetailsMapper;
import com.lazy.mappers.OrdersMapper;
import com.lazy.tools.DBHelper;
import com.lazy.tools.OrderTools;
import com.lazy.utils.MybatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class OrderService {

    /**
     *  1. 生成订单流水
     *  2. 插入订单表
     *  3. 插入订单明细
     *  4. 插入交易明细表
     *
     *  以上都是一个事务
     *
     *  Order
     *  OrderDetails
     *  Product
     *  Users
     *  JyInfo
     * **/

    private SqlSession sqlSession = MybatisUtil.getSqlSession();
    public boolean createUsersOrder(Users users, Map<Products,Integer> cart){
        // 1. 生成订单流水
        String orderid = OrderTools.createOrderCode();
        // 2. 生成订单对象
        Orders orders = new Orders();
        orders.setOrderid(orderid);
        orders.setUid(users);
        // 3. 生成获得价格
        float totalPrice = 0f;
        List<OrderDetails> details = new ArrayList<>();
        Set<Products> keys = cart.keySet();
        for (Products p: keys){
            Integer num = cart.get(p);
            totalPrice = totalPrice + p.getPprice() * num.intValue();
            OrderDetails detail = new OrderDetails();
            detail.setOrderid(orders);
            detail.setPid(p);
            detail.setPnum(num.intValue());
            details.add(detail);
        }
        orders.setDetails(details);
        orders.setOrderprice(totalPrice);
        // 创建JyInfo对象
        JyInfo jyInfo = new JyInfo();
        jyInfo.setJycode(OrderTools.createOrderCode());
        jyInfo.setJytype(1);
        jyInfo.setJymoney(totalPrice);

        // 调用持久层操作
        OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);
        OrdersDetailsMapper ordersDetailsMapper = sqlSession.getMapper(OrdersDetailsMapper.class);
        JyInfoMapper jyInfoMapper = sqlSession.getMapper(JyInfoMapper.class);
        int flag = ordersMapper.addOrder(orders);
        int flag2 = ordersDetailsMapper.addOrdersDetails(details);
        int flag3 = jyInfoMapper.addJyInfo(jyInfo);
        if((flag+flag2+flag3) == 2+details.size()){
            sqlSession.commit();
            return true;
        }else {
            sqlSession.rollback();
        }

        return false;
    }
}

效果图展示

效果图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TomLazy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值