SpringBoot-项目4-购物车(添加入购物车,购物车列表,购物车商品数量加减操作)

64. 购物车-创建数据表

# 注意:没有添加相应的not null约束
CREATE TABLE t_cart (
  cid INT AUTO_INCREMENT COMMENT '购物车数据id',
  uid INT COMMENT '用户id',
  pid INT COMMENT '商品id',
  num INT COMMENT '商品数量',
  price BIGINT(20) COMMENT '加入时商品价格(以便做促销,降价了有个差值)',
  created_user VARCHAR(20) COMMENT '创建人',
  created_time DATETIME COMMENT '创建时间',
  modified_user VARCHAR(20) COMMENT '最后修改人',
  modified_time DATETIME COMMENT '最后修改时间',
  PRIMARY KEY (cid)
) DEFAULT CHARSET=utf8mb4;

65. 购物车-创建实体类

cn.demo.store.entity包中创建Cart类:

/**
 * 购物车数据的实体类
 */
public class Cart extends BaseEntity {
   

  private static final long serialVersionUID = -9051846958681813039L;

  private Integer cid;
  private Integer uid;
  private Integer pid;
  private Integer num;
  private Long price;
    
  // 添加get,set...等方法
  
}

66. 购物车-加入购物车-持久层

(a) 规划需要的SQL语句

将商品添加到购物车,可能会产生新的购物车数据,也可能是将原有购物车数据中商品数量进行增加!可以判断该用户的购物车中有没有该商品:

select * from t_cart where uid=? and pid=?;

当该用户从来没有把该商品加入到购物车中时,需要插入新的购物车数据,在插入购物车数据时,需要执行的SQL语句大致是:

insert into t_cart (除了cid以外的字段列表) values (值列表);

当该用户的购物车中已经有该商品了,如果反复将该商品加入到购物车,应该只增加商品的数量,即修改原有数据的数量:

update t_cart set num=?, modified_user=?, modified_time=? where cid=?;

(b) 设计抽象方法

cn.demo.store.mapper中创建CartMapper接口,并添加抽象方法:

/**
 * 处理购物车数据的持久层接口
 */
public interface CartMapper {
   

  /**
   * 插入购物车数据
   * @param cart 购物车数据
   * @return 受影响的行数
   */
  Integer insert(Cart cart);

  /**
   * 修改购物车中商品的数量
   * @param cid 购物车数据id
   * @param num 新的数量
   * @param modifiedUser 最后修改人
   * @param modifiedTime 最后修改时间
   * @return 受影响的行数
   */
  Integer updateNumByCid(
      @Param("cid") Integer cid, 
      @Param("num") Integer num,
      @Param("modifiedUser") String modifiedUser, 
      @Param("modifiedTime") Date modifiedTime
  );

  /**
   * 查询某用户在购物车添加的某商品的详情
   * @param uid 用户的id
   * @param pid 商品的id
   * @return 匹配的购物车详情,如果该用户没有将该商品添加到购物车,则返回null
   */
  Cart findByUidAndPid(
      @Param("uid") Integer uid, 
      @Param("pid") Integer pid
  );

}

© 配置映射并测试

src/main/resources/mappers/下创建CartMapper.xml文件,并配置映射:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="cn.tedu.store.mapper.CartMapper">

  <!-- 插入购物车数据 -->
  <!-- Integer insert(Cart cart) -->
  <insert id="insert" useGeneratedKeys="true" keyProperty="cid">
    INSERT INTO t_cart (
      uid, pid, num, price, 
      created_user, created_time, modified_user, modified_time
    ) VALUES (
      #{uid}, #{pid}, #{num}, #{price}, 
      #{createdUser}, #{createdTime}, #{modifiedUser}, #{modifiedTime}
    )
  </insert>
  
  <!-- 修改购物车中商品的数量 -->
  <!-- Integer updateNumByCid(
      @Param("cid") Integer cid, 
      @Param("num") Integer num,
      @Param("modifiedUser") String modifiedUser, 
      @Param("modifiedTime") Date modifiedTime
  ); -->
  <update id="updateNumByCid">
    UPDATE
      t_cart
    SET
      num=#{num},
      modified_user=#{modifiedUser},
      modified_time=#{modifiedTime}
    WHERE
      cid=#{cid}
  </update>
  
  <!-- 查询某用户在购物车添加的某商品的详情 -->
  <!-- Cart findByUidAndPid(
      @Param("uid") Integer uid, 
      @Param("pid") Integer pid
  ); -->
  <select id="findByUidAndPid" resultType="cn.tedu.store.entity.Cart">
    SELECT * FROM t_cart WHERE uid=#{uid} AND pid=#{pid}
  </select>

</mapper>

src/test/javacn.demo.store.mapper下创建CartMapperTests测试类,编写并执行单元测试:

@RunWith(SpringRunner.class)
@SpringBootTest 
public class CartMapperTests {
   
  
  @Autowired
  private CartMapper mapper;

  @Test
  public void insert() {
   
    Cart cart = new Cart();
    cart.setUid(1);
    cart.setPid(2);
    cart.setNum(3);
    cart.setPrice(4L);
    Integer rows = mapper.insert(cart);
    System.err.println("rows=" + rows);
    System.err.println(cart);
  }

  @Test
  public void updateNumByCid() {
   
    Integer cid = 1;
    Integer num = 10;
    String modifiedUser 
  • 28
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值