{"id":4110,"date":"2021-11-29T10:54:05","date_gmt":"2021-11-29T02:54:05","guid":{"rendered":"http:\/\/123.57.164.21\/?p=4110"},"modified":"2021-11-29T10:54:05","modified_gmt":"2021-11-29T02:54:05","slug":"cloud-native-%e4%b8%8e-spring-cloud_%e5%85%a5%e9%97%a8_3_crud%e4%b9%8bservice%e5%b1%82","status":"publish","type":"post","link":"https:\/\/92it.top\/?p=4110","title":{"rendered":"Cloud native \u4e0e Spring Cloud_\u5165\u95e8_3_CRUD\u4e4bservice\u5c42"},"content":{"rendered":"\n<h5 class=\"wp-block-heading\">Service \u63a5\u53e3<a href=\"https:\/\/doc-jrecloud-dev.roks-iip-48-2029222ed72d9643e3d07091333056f5-0000.jp-tok.containers.appdomain.cloud\/docs\/intermediate\/crud-service#service-\u63a5\u53e3\">\u200b<\/a><\/h5>\n\n\n\n<p><code>service\/ProductService.java<\/code><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public interface ProductService {\n    Product findById(Integer id);\n\n    PageInfo&lt;Product> search(ProductSearchInput input);\n\n    Integer create(ProductInput record);\n\n    int batchInsert(List&lt;Product> list);\n\n    int update(Integer productId, ProductInput record);\n\n    void deleteByIds(List&lt;String> ids);\n\n    ResponseEntity&lt;InputStreamResource> exportCsv(ProductSearchInput searchInput);\n\n    void importCsv(InputStream is);\n\n}<\/pre>\n\n\n\n<h5 class=\"wp-block-heading\">Service \u5b9e\u73b0<\/h5>\n\n\n\n<p><a href=\"https:\/\/doc-jrecloud-dev.roks-iip-48-2029222ed72d9643e3d07091333056f5-0000.jp-tok.containers.appdomain.cloud\/docs\/intermediate\/crud-service#service-\u5b9e\u73b0\">\u200b<\/a><code>service\/ProductServiceImpl.java<\/code><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@Service\n@Slf4j\npublic class ProductServiceImpl implements ProductService {\n    @Resource\n    private ProductMapper productMapper;\n\n    public PageInfo&lt;Product> search(ProductSearchInput input) {\n        PageHelper.startPage(input.getPage(), input.getLimit());\n        List&lt;Product> records = productMapper.search(input.getKeyword());\n        return new PageInfo&lt;Product>(records);\n    }\n\n    @Override\n    public Product findById(Integer productId) {\n        return productMapper.selectByPrimaryKey(productId);\n    }\n\n    @Override\n    public Integer create(ProductInput input) {\n        Product record = new Product();\n        BeanUtil.copyProperties(input, record);\n        record.setCreateTime(new Date());\n        record.setUpdateTime(new Date());\n\n        productMapper.insertSelective(record);\n        Integer productId = record.getProductId();\n        return productId;\n    }\n\n    @Override\n    public int batchInsert(List&lt;Product> list) {\n        return productMapper.batchInsert(list);\n    }\n\n    @Override\n    public int update(Integer productId, ProductInput input) {\n        Product record = new Product();\n        BeanUtil.copyProperties(input, record);\n        record.setProductId(productId);\n        record.setUpdateTime(new Date());\n        return productMapper.updateByPrimaryKeySelective(record);\n    }\n\n    @Override\n    public void deleteByIds(List&lt;String> ids) {\n        List&lt;Integer> deletedIds = ids.stream().map(Integer::parseInt).collect(Collectors.toList());\n        if (!deletedIds.isEmpty()) {\n            productMapper.deleteByIds(deletedIds);\n        }\n    }\n\n    @Override\n    public ResponseEntity&lt;InputStreamResource> exportCsv(ProductSearchInput input) {\n        \/\/ replace this with your header (if required)\n        String[] csvHeader = {\"Id\", \"Name\", \"Weight\"};\n\n        \/\/ replace this with your data retrieving logic\n        List&lt;Product> products = productMapper.search(input.getKeyword());\n\n        List&lt;Object[]> records = new ArrayList&lt;>();\n        for (Product product : products) {\n            records.add(new Object[]{product.getProductId(), product.getName(), product.getWeight()});\n        }\n        ResponseEntity&lt;InputStreamResource> res = CsvUtil.export(csvHeader, records, \"product.csv\");\n\n        return res;\n\n    }\n\n    @Override\n    public void importCsv(InputStream is) {\n        try {\n            Reader reader = new InputStreamReader(is);\n            List&lt;CSVRecord> records = CSVFormat.EXCEL.parse(reader).getRecords();\n\n            List&lt;Product> products = new ArrayList&lt;>();\n            for (CSVRecord record : records) {\n                Product product = new Product();\n                \/\/ skip product id\n                product.setName(record.get(1));\n                product.setWeight(Integer.parseInt(record.get(2)));\n                product.setCreateTime(new Date());\n                product.setUpdateTime(new Date());\n\n                products.add(product);\n            }\n            productMapper.batchInsert(products);\n\n        } catch (Exception e) {\n            log.error(\"Error import csv.\", e);\n            throw new RuntimeException(e.getMessage());\n        }\n    }\n\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Service \u63a5\u53e3\u200b service\/ProductService.java Service \u5b9e\u73b0 \u200bser [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[],"_links":{"self":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/4110"}],"collection":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4110"}],"version-history":[{"count":1,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/4110\/revisions"}],"predecessor-version":[{"id":4111,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/4110\/revisions\/4111"}],"wp:attachment":[{"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}