购物车模块

购物车模块

## 建表

  • 创建购物车的表
create table t_cart(id int primary key auto_increment,  //主键
                   	goods_id varchar(200),   //商品的id
                    uid int,  				//用户的id
                    num int, 				//商品的数量
                    created_user varchar(50),  
                    created_time datetime,
                    modified_user varchar(50),
                    modified_time datetime
                   )default charset=utf8;

显示购物车

定义值对象(XXXVo)

  • 当我们需要查询多张表的数据的时候,我们此时仅仅使用一个实体类来接收肯定是不行的,我们需要定义一个值对象来接收查询的多张表数据
  • 实现多表连接查询的结果接收
/**
 * 购物车的值对象
 * 用于接收多表连接查询的结果
 * @author chenjiabing
 */
public class CartVo implements Serializable {
	private static final long serialVersionUID = 8904622535687816912L;
	private Integer id;    //主键 购物车表中的主键
	private String goodsId;  //商品的id
	private Integer uid;  //用户id
	private String image;  //图片地址
	private String title;  //商品标题
	private Integer price; //商品价格
	private Integer num;  //数量
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getGoodsId() {
		return goodsId;
	}
	public void setGoodsId(String goodsId) {
		this.goodsId = goodsId;
	}
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public String getImage() {
		return image;
	}
	public void setImage(String image) {
		this.image = image;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public Integer getPrice() {
		return price;
	}
	public void setPrice(Integer price) {
		this.price = price;
	}
	public Integer getNum() {
		return num;
	}
	public void setNum(Integer num) {
		this.num = num;
	}
	@Override
	public String toString() {
		return "CartVo [id=" + id + ", goodsId=" + goodsId + ", uid=" + uid
				+ ", image=" + image + ", title=" + title + ", price=" + price
				+ ", num=" + num + "]";
	}
	
}

持久层

CartMapper.java

/**
 * 根据uid查询购物车中的所有商品
 * @param uid  用户id
 * @return   查询的结果
 */
List<CartVo> selectCartByUid(Integer uid);

CartMapper.xml

<!-- 
		List<CartVo> selectCartByUid(Integer uid);
	 -->
	 <select id="selectCartByUid" resultType="cn.tedu.store.bean.CartVo">
	 		select 
	 		c.id as id,
	 		c.uid as uid,
	 		goods_id as goodsId,
	 		image,
	 		title,
	 		c.num as num,
	 		price
	 		from t_cart c,t_goods g
	 		where c.uid=#{uid} and c.goods_id=g.id
	 </select>

批量删除购物车中的商品

持久层

  • 根据传入的id批量删除商品,用sql语句如下:delete from t_cart where id in (1,2,3,4,4),因此参数应该是一个数组

接口中定义方法

  • 数组必须使用@Param()来指定
/**
 * 根据id删除购物车中的商品
 * @param ids
 */
void deleteCartById(@Param("ids")Integer[] ids);

配置文件中配置

  • 使用<forEach>遍历数组中的元素
<!-- 
 	void deleteCartById(@Param("ids")Integer[] ids);
 	批量删除
  -->
  <delete id="deleteCartById" parameterType="java.lang.Integer">
  		delete from t_cart 
  		where
  		id in
  		<!-- 
  			遍历数组ids
  			collection:需要遍历的数组
  			item: 数组中的每一个值
  			open : 开始的内容
  			close: 结束的内容
  			separator :每个元素的分割符
  			最后拼接的就是  (id,id,id,id,id)
  		 -->
  		<foreach collection="ids" item="id" open="(" separator="," close=")">
  			#{id}
  		</foreach> 
  </delete>

控制器层

  • 使用一个数组接收传递过来的id
/**
 * 批量删除商品
 * @param Itemids  数组,其中全是id
 * @return
 */
@RequestMapping("/moveCartBatch.do")
public String moveCartBatch(Integer[] Itemids){
	System.out.println(Itemids);
	cartService.moveCartById(Itemids);
	return "redirect:../cart/showCart.do";
}

MySQL存储过程

创建存储过程

delimiter $$
	create procedure deleteCart(pid int)
	begin
		delete from t_cart where id=pid;
	end $$

删除存储过程

drop procedure 存储过程名称
比如: drop procedure deleteCart;

调用

call deleteCart(5);

使用存储过程删除一行数据

  • CartMapper.java中定义方法
/**
 * 调用存储过程 deleteCart(pid int)删除数据
 * @param id
 */
void deleteCartByIdProcdure(Integer id);
  • CartMapper.xml中定义节点
<!-- 
	  	void deleteCartByIdProcdure(Integer id);
	  	使用存储过程删除
	   -->
	   
	   	<delete id="deleteCartByIdProcdure">
	   		{call deleteCart(#{id})}
	   	</delete>

## 修改购物车的数量

持久层

创建存储过程

delimiter $$
create procedure updateNum(pid int,pnum int)
begin
	update t_cart set num=pnum where id=pid;
end $$

定义接口

写配置文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

go语言的sql包原理与用法分析

go的sql包是在pkg/database中,里面的两个包sql和sql/driver可以一起看。建议看这个两个包之前可以先看看sql文件夹下的doc.txt。...

2994
来自专栏跟着阿笨一起玩NET

【C#】Entity Framework 增删改查和事务操作

  方法二:方法一中每次都需要对所有字段进行修改,效率低,而且麻烦,下面介绍修改部分字段

921
来自专栏编码小白

ofbiz view渲染处理机制

1.1.1.1  初始化        ControlServlet.java 这是一个servlet,其配置文件在web.xml里 <servle...

3666
来自专栏xiaoheike

Hibernate save, saveOrUpdate, persist, merge, update 区别

hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思。我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保...

1403
来自专栏Hongten

JSP 九大内置对象

① out - javax.servlet.jsp.jspWriter    out对象用于把结果输出到网页上。

4032
来自专栏PHP在线

mysql学习笔记

InnoDB引擎与MyISAM引擎 mysql是关系型数据库。其中的存储引擎可以show engines来查看。我的版本是5.6.26的,查看版本用selec...

2845
来自专栏Golang语言社区

go语言的sql包原理与用法分析

本文实例讲述了go语言的sql包原理与用法。分享给大家供大家参考,具体如下: go的sql包是在pkg/database中,里面的两个包sql和sql/driv...

4446
来自专栏python学习路

三、模型(一)

当我们的程序涉及到数据库相关操作时,我们一般都会这么做: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调...

4079
来自专栏学习力

《Java从入门到放弃》JavaSE入门篇:练习——单身狗租赁系统

3894
来自专栏耕耘实录

Linux三大剑客之awk

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

1524

扫码关注云+社区

领取腾讯云代金券