实战SSM_O2O商铺_28【商品】商品添加之Dao层的实现
生活随笔
收集整理的這篇文章主要介紹了
实战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商铺_27【商品类别】
- 下一篇: 实战SSM_O2O商铺_29【商品】商品