实战SSM_O2O商铺_28【商品】商品添加之Dao层的实现
文章目录
- 概述
- 重温实体类
- Prouct
- ProductImg
- ProductDao接口
- Mapper配置文件
- ProductImgDao接口
- Mapper配置文件
- 单元测试
- #ProductDaoTest
- ProductImgDaoTest
- Github地址
概述
完成了商品类别的功能后,
实战SSM_O2O商铺_25【商品类别】商品类别列表展示从Dao到View层的开发
实战SSM_O2O商铺_26【商品类别】批量新增商品类别从Dao到View层的开发
实战SSM_O2O商铺_27【商品类别】删除商品类别从Dao到View层的开发
接下来我们继续实现商品部分的功能。
功能点:
1. 商品的添加
2. 商品图片的批量添加(主要是指商品详情部分的图片)
重温实体类
Prouct
package com.artisan.o2o.entity;import java.util.Date;
import java.util.List;public class Product {private Long productId;private String productName;private String productDesc;/*** 简略图*/private String imgAddr;/*** 原价*/private String normalPrice;/*** 折后价*/private String promotionPrice;private Integer priority;private Date createTime;private Date lastEditTime;/*** -1 不可用 0 下架 1 展示*/private Integer enableStatus;/*** 产品对应的详情列表,一对多*/private List<ProductImg> productImgList;/*** 产品所属产品目录*/private ProductCategory productCategory;/*** 产品所属店铺*/private Shop shop;// setter/gettter省略}
ProductImg
package com.artisan.o2o.entity;import java.util.Date;public class ProductImg {private Long productImgId;private String imgAddr;private String imgDesc;private Integer priority;private Date createTime;// 只需要一个productId属性,不需要获取Product的其他属性,所以这里直接使用Long类型的productId,而没有使用Product。private Long productId;// setter/gettter省略}
ProductDao接口
package com.artisan.o2o.dao;import com.artisan.o2o.entity.Product;public interface ProductDao {/*** * * @Title: insertProduct* * @Description: 增加商品* * @param product* * @return: int*/int insertProduct(Product product);
}
Mapper配置文件
<?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.artisan.o2o.dao.ProductDao"><insert id="insertProduct" parameterType="com.artisan.o2o.entity.Product" useGeneratedKeys="true" keyProperty="productId" keyColumn="product_id">INSERT INTOtb_product(product_name,product_desc,img_addr,normal_price,promotion_price,priority,create_time,last_edit_time,enable_status,product_category_id,shop_id)VALUES(#{productName},#{productDesc},#{imgAddr},#{normalPrice},#{promotionPrice},#{priority},#{createTime},#{lastEditTime},#{enableStatus},#{productCategory.productCategoryId},#{shop.shopId})</insert></mapper>
ProductImgDao接口
package com.artisan.o2o.dao;import java.util.List;import com.artisan.o2o.entity.ProductImg;public interface ProductImgDao {/*** * * @Title: batchInsertProductImg* * @Description: 一个商品下可能拥有多个图片,所以这里是批量新增商品图片* * @param productImgList* * @return: int*/int batchInsertProductImg(List<ProductImg> productImgList);
}
Mapper配置文件
<?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.artisan.o2o.dao.ProductImgDao"><insert id="batchInsertProductImg" parameterType="com.artisan.o2o.entity.ProductImg" useGeneratedKeys="true" keyProperty="productImgId" keyColumn="product_img_id">INSERT INTOtb_product_img(img_addr,img_desc,priority,create_time,product_id)VALUES<foreach collection="list" item="productImg" index="index" separator=",">(#{productImg.imgAddr},#{productImg.imgDesc},#{productImg.priority},#{productImg.createTime},#{productImg.productId})</foreach></insert></mapper>
单元测试
注意表之间的外键关系,确保数据之间的约束正确。
否则会引起如下类似错误
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`o2o`.`tb_product_img`, CONSTRAINT `fk_proimg_product` FOREIGN KEY (`product_id`) REFERENCES `tb_product` (`product_id`) ON DELETE CASCADE ON UPDATE CASCADE)
#ProductDaoTest
package com.artisan.o2o.dao;import java.util.Date;import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;import com.artisan.o2o.BaseTest;
import com.artisan.o2o.entity.Product;
import com.artisan.o2o.entity.ProductCategory;
import com.artisan.o2o.entity.Shop;public class ProductDaoTest extends BaseTest {@AutowiredProductDao productDao;@Testpublic void testInsertProdcut() {// 注意表中的外键关系,确保这些数据在对应的表中的存在ProductCategory productCategory = new ProductCategory();productCategory.setProductCategoryId(36L);// 注意表中的外键关系,确保这些数据在对应的表中的存在Shop shop = new Shop();shop.setShopId(5L);Product product = new Product();product.setProductName("test_product");product.setProductDesc("product desc");product.setImgAddr("/aaa/bbb");product.setNormalPrice("10");product.setPromotionPrice("8");product.setPriority(66);product.setCreateTime(new Date());product.setLastEditTime(new Date());product.setEnableStatus(1);product.setProductCategory(productCategory);product.setShop(shop);int effectNum = productDao.insertProduct(product);Assert.assertEquals(1, effectNum);}}
ProductImgDaoTest
package com.artisan.o2o.dao;import java.util.ArrayList;
import java.util.Date;
import java.util.List;import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;import com.artisan.o2o.BaseTest;
import com.artisan.o2o.entity.ProductImg;public class ProductImgDaoTest extends BaseTest {@Autowiredprivate ProductImgDao productImgDao;@Testpublic void testBatchInsertProductImg() {ProductImg productImg1 = new ProductImg();productImg1.setImgAddr("/xiaogongjiang/xxxx");productImg1.setImgDesc("商品详情图片1");productImg1.setPriority(99);productImg1.setCreateTime(new Date());productImg1.setProductId(2L);ProductImg productImg2 = new ProductImg();productImg2.setImgAddr("/artisan/xxxx");productImg2.setImgDesc("商品详情图片2");productImg2.setPriority(98);productImg2.setCreateTime(new Date());productImg2.setProductId(2L);// 添加到productImgList中List<ProductImg> productImgList = new ArrayList<ProductImg>();productImgList.add(productImg1);productImgList.add(productImg2);// 调用接口批量新增商品详情图片int effectNum = productImgDao.batchInsertProductImg(productImgList);Assert.assertEquals(2, effectNum);}}
单元测试正常 ,测试通过
Github地址
代码地址: https://github.com/yangshangwei/o2o
实战SSM_O2O商铺_28【商品】商品添加之Dao层的实现相关推荐
- 实战SSM_O2O商铺_05集成SSM后验证DAO层、Service层、Controller层的配置
文章目录 概述 验证DAO层的配置 接口 SQL映射文件 单元测试类 基类 DAO层单元测试类 验证Service层的配置 接口以及实现类 单元测试类 验证Controller层的配置 控制层 启动服 ...
- 实战SSM_O2O商铺_32【商品】商品编辑之Dao层的实现
文章目录 概述 Dao层接口 ProductDao#selectProductById ProductDao#updateProduct ProductImgDao#deleteProductImgB ...
- 实战SSM_O2O商铺_31【商品】商品添加之View层的实现
文章目录 概述 productoperation.html productoperation.js 联调 检查结果 库表数据: 磁盘上的图片 Github地址 概述 在完成了 实战SSM_O2O商铺_ ...
- 实战SSM_O2O商铺_38【商品类别】解除商品与商品类别的关联
文章目录 概述 Dao层 ProductDao.java ProductDao.xml 单元测试 Service层完善 ProductCategoryServiceImpl#deleteProduct ...
- 实战SSM_O2O商铺_34【商品】商品编辑之Controller层的实现
文章目录 概述 ProductController 单元测试 Github地址 概述 在完成了 实战SSM_O2O商铺_33[商品]商品编辑之Service层的实现之后,我们继续来实现Controll ...
- 实战SSM_O2O商铺_27【商品类别】删除商品类别从Dao到View层的开发
文章目录 概述 Dao层 ProductCategoryDao接口增加接口方法 ProductCategoryDao SQL映射文件 闭环的单元测试 Servie层 接口 接口实现 单元测试 Cont ...
- 实战SSM_O2O商铺_26【商品类别】批量新增商品类别从Dao到View层的开发
文章目录 概述 Dao层 ProductCategoryDao接口 ProductCategoryDao SQL映射文件 单元测试 Service层 ProductCategoryExecution ...
- 实战SSM_O2O商铺_29【商品】商品添加之Service层的实现及重构
文章目录 概述 DTO类 自定义异常 ProductService接口 重构 重构后的接口方法 接口实现类ProductServiceImpl 单元测试 Github地址 概述 步骤如下: 1.处理商 ...
- 实战SSM_O2O商铺_33【商品】商品编辑之Service层的实现
文章目录 概述 Service接口 Service接口实现类 单元测试 Github地址 概述 在完成了 Dao层的部分之后,顺其自然的我们来到了Service层,需要调用Dao层提供的操作数据库的方 ...
最新文章
- 图解Java中那18 把锁
- 用C#编写ActiveX控件(三) 转载
- docker 容器中的 uid 和 gid
- php构造函数里抛出异常_php-在类的构造函数中返回值
- 2020年第十一届蓝桥杯 - 国赛 - Python大学组 - G.重复字符串
- AZURE 日志分析自动告警
- 边工作边刷题:70天一遍leetcode: day 73
- 从头写一个Cucumber测试(二) Cucumber Test
- java 注释标记_如何标记,像老板一样注释内容
- 11月17日站立会议内容
- 九宫格拼图小游戏代码html,js实现九宫格拼图小游戏.pdf
- Spring ldap ODM
- Rapid SCADA中文使用说明书(一)
- 七夕表白攻略:原来数学才是世界上最浪漫的学科!
- CTO说出了我的成长慢的原因,价值10万:“在VUCA时代,必须掌握的12种永久技能。”...
- 怎样记账才能清楚、简单
- 桥接模式和装饰者模式的区别及理解
- C语言怎样判断乘法越界,c语言算术运算符越界问题解决方案
- 【技术推荐】WebLogic 反序列化漏洞深入分析
- Delphi ord 函数