I. dao level
1. Write interface ProductCategoryDao
public interface ProductCategoryDao { /** * Batch new product category * @param productCategoryList * @return */ int batchInsertProductCategory(List<ProductCategory> productCategoryList); }
2. Write mapper implementation
Label for batch insertion
The incoming collection is a list because it is a list,
item is the property name of the iteration
index specifies a name to indicate the location of each iteration during the iteration
Separator indicates what symbol is used as separator between each iteration
<!-- Batch insertion --> <insert id="batchInsertProductCategory" parameterType="java.util.List"> INSERT INTO tb_product_category(product_category_name,priority,create_time,shop_id) VALUES <foreach collection="list" item="productCategory" index="index" separator=","> ( #{productCategory.productCategoryName}, #{productCategory.priority}, #{productCategory.createTime}, #{productCategory.shopId} ) </foreach> </insert>
3, test
public class ProductCategoryDaoTest extends BaseTest{ @Autowired private ProductCategoryDao productCategoryDao; @Test public void testBatchInsertProductCategory() { ProductCategory productCategory = new ProductCategory(); productCategory.setProductCategoryName("Commodity category 1"); productCategory.setPriority(1); productCategory.setCreateTime(new Date()); productCategory.setShopId(1L); ProductCategory productCategory2 = new ProductCategory(); productCategory2.setProductCategoryName("Commodity category 2"); productCategory2.setPriority(2); productCategory2.setCreateTime(new Date()); productCategory2.setShopId(1L); List<ProductCategory> productCategoryList = new ArrayList<ProductCategory>(); productCategoryList.add(productCategory); productCategoryList.add(productCategory2); int effectedNum = productCategoryDao.batchInsertProductCategory(productCategoryList); assertEquals(2, effectedNum); } }
II. service layer
1. Write interface
public interface ProductCategoryService { /** * Batch add product category * @param productCategoryList * @return * @throws ProductCategoryOperationException */ ProductCategoryExecution batchAddProductCategory(List<ProductCategory> productCategoryList) throws ProductCategoryOperationException; }
2. Write interface implementation class
Remember to annotate @ Transactional transaction, because it is used in exception
@Service public class ProductCategoryServiceImpl implements ProductCategoryService{ @Autowired private ProductCategoryDao productCategoryDao; @Override @Transactional public ProductCategoryExecution batchAddProductCategory(List<ProductCategory> productCategoryList) throws ProductCategoryOperationException { if(productCategoryList!=null && productCategoryList.size() > 0) { try { int effectedNum = productCategoryDao.batchInsertProductCategory(productCategoryList); if(effectedNum <= 0) { throw new ProductCategoryOperationException("Store category creation failed"); } else { return new ProductCategoryExecution(ProductCategoryStateEnum.SUCCESS); } } catch (Exception e) { throw new ProductCategoryOperationException("batchAddProductCategory error:"+ e.getMessage()); } }else { return new ProductCategoryExecution(ProductCategoryStateEnum.EMPTY_LIST); } } }
III. write controller
Be careful
1. The front-end input is list, so the method in RequestMapping is POST
2. In addproductcategories, @ RequestBody is used to receive the List from the front end
@Controller @RequestMapping("/shopadmin") public class ProductCategoryManagementController { @Autowired private ProductCategoryService productCategoryService; @RequestMapping(value = "/addproductcategorys", method = RequestMethod.POST) @ResponseBody private Map<String, Object> addProductCategorys(@RequestBody List<ProductCategory> productCategoryList, HttpServletRequest request) { Map<String, Object> modelMap = new HashMap<String, Object>(); Shop currentShop = (Shop) request.getSession().getAttribute("currentShop"); for (ProductCategory pc : productCategoryList) { pc.setShopId(currentShop.getShopId()); } if (productCategoryList != null && productCategoryList.size() > 0) { try { ProductCategoryExecution pe = productCategoryService.batchAddProductCategory(productCategoryList); if (pe.getState() == ProductCategoryStateEnum.SUCCESS.getState()) { modelMap.put("success", true); } else { modelMap.put("success", false); modelMap.put("errMsg", pe.getStateInfo()); } } catch (Exception e) { modelMap.put("success", false); modelMap.put("errMsg", e.toString()); return modelMap; } } else { modelMap.put("success", false); modelMap.put("errMsg", "Please enter at least one product category"); } return modelMap; } }