Excel实战解析之项目进度图(excel做进度图)
466
2022-05-29
文章目录
概述
Dao层接口
ProductDao#selectProductById
ProductDao#updateProduct
ProductImgDao#deleteProductImgById
ProductImgDao#selectProductImgList
Mapper映射文件
ProductDao.xml
ProductImgDao.xml
单元测试
ProductDaoTest
ProductImgDaoTest
Github地址
概述
完成了商品的添加Dao层到View层功能之后,
实战SSM_O2O商铺_28【商品】商品添加之Dao层的实现
实战SSM_O2O商铺_29【商品】商品添加之Service层的实现及重构
实战SSM_O2O商铺_30【商品】商品添加之Controller层的实现
实战SSM_O2O商铺_31【商品】商品添加之View层的实现
我们先来看下商品的编辑,最后做商品列表展示,当然了,可根据个人习惯,调整开发顺序。
说到商品编辑,
首先肯定要根据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
Dao层接口
ProductDao#selectProductById
/** * * * @Title: selectProductById * * @Description: 根据productId查询product * * @param productId * * @return: Product */ Product selectProductById(long productId);
1
2
3
4
5
6
7
8
9
10
11
12
ProductDao#updateProduct
/** * * * @Title: updateProduct * * @Description: 修改商品 * * @param product * * @return: int */ int updateProduct(Product product);
1
2
3
4
5
6
7
8
9
10
11
12
ProductImgDao#deleteProductImgById
/** * * * @Title: deleteProductImgById * * @Description: 删除商品对应的商品详情图片 * * @param productId * * @return: int */ int deleteProductImgById(long productId);
1
2
3
4
5
6
7
8
9
10
11
12
ProductImgDao#selectProductImgList
/** * * * @Title: selectProductImgList * * @Description: 根据productId查询商铺对应的图片详情信息 * * @param productId * * @return: List
1
2
3
4
5
6
7
8
9
10
11
12
Mapper映射文件
ProductDao.xml
说明见注释
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
ProductImgDao.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
单元测试
ProductDaoTest
package com.artisan.o2o.dao; import java.util.Date; import org.junit.Assert; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runners.MethodSorters; 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; @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class ProductDaoTest extends BaseTest { @Autowired ProductDao productDao; @Test public void testA_InsertProdcut() { // 注意表中的外键关系,确保这些数据在对应的表中的存在 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); } @Test public void testB_UpdateProduct() { // 注意表中的外键关系,确保这些数据在对应的表中的存在 ProductCategory productCategory = new ProductCategory(); productCategory.setProductCategoryId(36L); // 注意表中的外键关系,确保这些数据在对应的表中的存在 Shop shop = new Shop(); shop.setShopId(5L); Product product = new Product(); product.setProductName("modifyProduct"); product.setProductDesc("modifyProduct desc"); product.setImgAddr("/mmm/ddd"); product.setNormalPrice("350"); product.setPromotionPrice("300"); product.setPriority(66); product.setLastEditTime(new Date()); product.setEnableStatus(1); product.setProductCategory(productCategory); product.setShop(shop); // 设置productId product.setProductId(2L); int effectNum = productDao.updateProduct(product); Assert.assertEquals(1, effectNum); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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.FixMethodOrder; import org.junit.Ignore; import org.junit.Test; import org.junit.runners.MethodSorters; import org.springframework.beans.factory.annotation.Autowired; import com.artisan.o2o.BaseTest; import com.artisan.o2o.entity.ProductImg; /** * * * @ClassName: ProductImgDaoTest * * @Description: 测试类的执行顺序可通过对测试类添加注解@FixMethodOrder(value) 来指定 * * @author: Mr.Yang * * @date: 2018年6月30日 下午3:28:28 */ @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class ProductImgDaoTest extends BaseTest { @Autowired private ProductImgDao productImgDao; /** * 加入@Ignore 可以不执行该单元测试方法 */ @Test @Ignore public 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
单元测试通过.可以看到是按照方法名的升序顺序执行的,形成一个闭环。
SQL日志如下
JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@5bf8fa12] will not be managed by Spring ==> Preparing: INSERT INTO tb_product_img ( img_addr, img_desc, priority, create_time, product_id ) VALUES ( ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ? ) ==> Parameters: /xxx/xxx(String), 商品详情图片1x(String), 88(Integer), 2018-06-30 21:26:34.455(Timestamp), 3(Long), /yyy/yyyy(String), 商品详情图片2y(String), 66(Integer), 2018-06-30 21:26:34.455(Timestamp), 3(Long) <== Updates: 2 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7a67e3c6] Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1921ad94] was not registered for synchronization because synchronization is not active JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@30af5b6b] will not be managed by Spring ==> Preparing: SELECT product_img_id, img_addr, img_desc, priority, create_time, product_id FROM tb_product_img WHERE product_id=? ORDER BY product_img_id ==> Parameters: 3(Long) <== Columns: product_img_id, img_addr, img_desc, priority, create_time, product_id <== Row: 16, /xxx/xxx, 商品详情图片1x, 88, 2018-06-30 21:26:34.0, 3 <== Row: 17, /yyy/yyyy, 商品详情图片2y, 66, 2018-06-30 21:26:34.0, 3 <== Total: 2 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1921ad94] ProductImg [productImgId=16, imgAddr=/xxx/xxx, imgDesc=商品详情图片1x, priority=88, createTime=Sat Jun 30 21:26:34 BOT 2018, productId=3] ProductImg [productImgId=17, imgAddr=/yyy/yyyy, imgDesc=商品详情图片2y, priority=66, createTime=Sat Jun 30 21:26:34 BOT 2018, productId=3] Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@535779e4] was not registered for synchronization because synchronization is not active JDBC Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@6c0d9d86] will not be managed by Spring ==> Preparing: DELETE FROM tb_product_img WHERE product_id = ? ==> Parameters: 3(Long) <== Updates: 2 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@535779e4]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Github地址
代码地址: https://github.com/yangshangwei/o2o
SQL
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。