- 首先肯定要根据productId查到对应Product相关的信息,既然这里是Dao层的开发,所以需要在Dao层需要开发一个 selectProductById 方法
- 商品信息有商品缩略图和详情图片,这里我们先约定好:如果用户传入了新的商品缩略图和详情图片,就将原有的商品缩略图和详情图片删除掉
- 商品缩略图的地址存放在tb_product的img_addr字段,所以只需要更新改表即可。 所以对应Dao层应该有个方法updateProduct
- 图片缩略图还涉及磁盘上的文件的删除,需要根据productId获取到Product ,然后获取Product的imgAddr属性,复用selectProductById 解渴
- 详情图片的地址存放在tb_product_img中,根据product_id可以查找到对应商品下的全部详情图片,所以对应Dao层应该有个方法deleteProductImgById
- 图片详情还涉及磁盘上的文件的删除,需要根据productId获取到
List<ProductImg>
,然后遍历该list,获取集合中每个ProductImg的imgAddr地址,所以还需要有个selectProductImgList方法
ProductDao层
1 /** 2 * 通过productId查询唯一的商品信息 3 * @param productId 4 * @return 5 */ 6 Product queryProductById(long productId); 7 8 /** 9 * 更新商品信息 10 * @param product 11 * @return 12 */ 13 int updateProduct(Product product);
ProductDao映射文件
<?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.ryanxu.o2o.dao.ProductDao"> <resultMap id="productMap" type="com.ryanxu.o2o.entity.Product"> <id column="product_id" property="productId" /> <!-- property对应实体类中的属性名 column 对应库表中的字段名 --> <result column="product_name" property="productName" /> <result column="product_desc" property="productDesc" /> <result column="img_addr" property="imgAddr" /> <result column="normal_price" property="normalPrice" /> <result column="promotion_price" property="promotionPrice" /> <result column="priority" property="priority" /> <result column="create_time" property="createTime" /> <result column="last_edit_time" property="lastEditTime" /> <result column="enable_status" property="enableStatus" /> <!-- 一对一使用association product中的属性为productCategory, 通过数据库中的product_category_id关联起来的 类型为 com.ryanxu.o2o.entity.ProductCategory --> <association property="productCategory" column="product_category_id" javaType="com.ryanxu.o2o.entity.ProductCategory"> <!-- 对应ProductCategory中的属性 和 tb_product_category的字段 --> <id column="product_category_id" property="productCategoryId" /> <result column="product_category_name" property="productCategoryName" /> </association> <!-- 一对一使用association product中的属性为shop, 通过数据库中的shop_id关联起来的 类型为com.ryanxu.o2o.entity.Shop --> <association property="shop" column="shop_id" javaType="com.ryanxu.o2o.entity.Shop"> <id column="shop_id" property="shopId" /> <!-- 对应Shop中的属性 和 tb_shop的字段 ,如果是符合对象,使用xx.xxx的方式 --> <result column="owner_id" property="owner.userId" /> <result column="shop_name" property="shopName" /> </association> <!-- 一对多使用collection product中的属性为productImgList,并且是通过库表中的product_id关联起来的, 保存的类型为com.ryanxu.o2o.entity.ProductImg --> <collection property="productImgList" column="product_id" ofType="com.ryanxu.o2o.entity.ProductImg"> <id column="product_img_id" property="productImgId" /> <result column="img_addr" property="imgAddr" /> <result column="img_desc" property="imgDesc" /> <result column="priority" property="priority" /> <result column="create_time" property="createTime" /> <result column="product_id" property="productId" /> </collection> </resultMap> <insert id="insertProduct" parameterType="com.ryanxu.o2o.entity.Product" useGeneratedKeys="true" keyProperty="productId" keyColumn="product_id"> INSERT INTO tb_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> <select id="queryProductById" resultMap="productMap" parameterType="Long"> <!-- 具体的sql --> SELECT p.product_id, p.product_name, p.product_desc, p.img_addr, p.normal_price, p.promotion_price, p.priority, p.create_time, p.last_edit_time, p.enable_status, p.product_category_id, p.shop_id, pm.product_img_id, pm.img_addr, pm.img_desc, pm.priority, pm.create_time FROM tb_product p <!-- 左连接LEFT JOIN,(即使该商品没有商品详情图片,也要查询出来该商铺) --> LEFT JOIN tb_product_img pm ON p.product_id =pm.product_id WHERE p.product_id = #{productId} ORDER BY pm.priority DESC </select> <update id="updateProduct" parameterType="com.ryanxu.o2o.entity.Product"> UPDATE tb_product <set> <!-- 注意后面的逗号 --> <if test="productName !=null ">product_name = #{productName},</if> <if test="productDesc !=null ">product_desc = #{productDesc},</if> <if test="imgAddr !=null ">img_addr = #{imgAddr},</if> <if test="normalPrice != null ">normal_price = #{normalPrice},</if> <if test="promotionPrice != null ">promotion_price = #{promotionPrice},</if> <if test="priority != null">priority = #{priority},</if> <if test="createTime != null">create_time = #{createTime},</if> <if test="lastEditTime != null">last_edit_time = #{lastEditTime},</if> <if test="enableStatus != null ">enable_status = #{enableStatus},</if> <!-- 注意如果是引用的复杂对象的写法 --> <if test="productCategory != null and productCategory.productCategoryId != null ">product_category_id = #{productCategory.productCategoryId}, </if> </set> WHERE product_id = #{productId} AND shop_id=#{shop.shopId} </update> </mapper>
ProductImgDao
/** * 根据productId查询商铺对应的图片详情信息 * @param productId * @return */ List<ProductImg> queryProductImgList(long productId); /** * 批量添加商品详情图片 * @param productImgList * @return */ int batchInsertProductImg(List<ProductImg> productImgList); /** * 删除指定商品下的所有详情图 * @param productId * @return */ int deleteProductImgByProductId(long productId);
ProductImgDao映射文件
<?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.ryanxu.o2o.dao.ProductImgDao"> <insert id="batchInsertProductImg" parameterType="java.util.List"> INSERT INTO tb_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> <delete id="deleteProductImgByProductId"> <!-- 具体的sql --> DELETE FROM tb_product_img WHERE product_id = #{productId} </delete> <select id="queryProductImgList" resultType="com.ryanxu.o2o.entity.ProductImg"> SELECT product_img_id, img_addr, img_desc, priority, create_time, product_id FROM tb_product_img WHERE product_id=#{productId} ORDER BY product_img_id </select> </mapper>