10-批量操作、事务

1.Service下增加BatchDao类

package com.study.model.service;

import java.util.List;

public interface BatchDao<T> {
    public void batchInsert(List<T> list);
    public void batchUpdate(List<T> list);
}

2.Service下增加AbstractDao类

package com.study.model.service;

import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;

public abstract class AbstractDao implements BatchDao {
    @PersistenceContext
    protected EntityManager em;

    @Transactional
    public void batchInsert(List list) {
        for (int i = 0; i < list.size(); i++) {
            em.persist(list.get(i));
            if (i % 30 == 0) {
                em.flush();
                em.clear();
            }
        }
    }

    @Transactional
    public void batchUpdate(List list) {
        for (int i = 0; i < list.size(); i++) {
            em.merge(list.get(i));
            if (i % 30 == 0) {
                em.flush();
                em.clear();
            }
        }
    }
}

3.创建类CategoryServices并extends AbstractDao

package com.study.model.service;

import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class CategoryServices extends AbstractDao{
    public void insert(String platformName){
        List<String> list=new ArrayList<String>();
        list.set(0,platformName);
        CategoryServices.super.batchInsert(list);
        System.out.println("insert start for"+platformName);
    }
    public void batchUpdate(String platformName){
        List<String> list=new ArrayList<>();
        list.set(0,platformName);
        CategoryServices.super.batchUpdate(list);
        System.out.println("batchUpdate start for"+platformName);
    }
}

4.创建类CategoryController并增加batchUpdate方法

package com.study.model.controller;

import com.study.model.service.CategoryServices;
import io.swagger.annotations.ApiOperation;
import org.apache.log4j.Category;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
@RestController
@RequestMapping(value = "/category")
public class CategoryController {
    @Autowired
    private CategoryServices categoryServices;
    private static final Logger logger= LoggerFactory.getLogger(CategoryController.class);
    @ApiOperation(value="批量插入品类信息", notes="批量插入品类信息")
    @RequestMapping(value="/batchUpdate",method = RequestMethod.POST)
    public int batchUpdate(@RequestBody List<Category> list){
        logger.info("batchUpdate-start:");
        categoryServices.batchUpdate(list);
        return 1;
    }
}

5.在对应需要进行事务管理的方法上增加@Transactional注释

package com.study.model.service;

import com.study.model.entity.Platform;
import com.study.model.repository.PlatformRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.UUID;

@Service
public class PlatformService {

    //持久层
    @Autowired
    private PlatformRepository platformRepository;
    @Autowired
    private CategoryServices categoryServices;
    private static final Logger logger= LoggerFactory.getLogger(PlatformService.class);
    public Platform findByName(String platformName) {
        return platformRepository.findByName(platformName);
    }

    public Platform findUsedByName(String platformName) {
        return platformRepository.findByNameAndIsDeleted(platformName,false);
    }

    public Platform findByNameForBudget(String platformName) {
        return platformRepository.findByNameForBudget(platformName);
    }

    public Page<Platform> findAll(int page, int size){
        Sort sort = new Sort(Sort.Direction.DESC, "id");
        Pageable pageable = new PageRequest(page, size, sort);
        return platformRepository.findAll(pageable);
    }

    public Page<Platform> findByNameForPage(String platformName, Pageable pageable){
        return platformRepository.findByName(platformName,pageable);
    }

    @Transactional
    public int insert(String platformName){
        categoryServices.insert(platformName);
        logger.info("insert-start:");

        Platform platform = new Platform();
        platform.setId(UUID.randomUUID().toString());
        platform.setCode(platformName);
        platform.setName(platformName);
        platform.setCreateTime(new Date());
        platform.setModifyTime(new Date());
        platform.setCreateUser("00000000-0000-0000-0000-000000000001");
        platform.setModifyUser("00000000-0000-0000-0000-000000000001");
        platform.setOrder(0);
        platform.setUseForBudget(false);
        platform.setIsDeleted(false);

        if(platformRepository.countByName(platformName) > 0){
            throw new RuntimeException();
        }
        platformRepository.save(platform);
        //throw new RuntimeException();
        return 1;
    }
}

6.访问:http://localhost:8081/swagger-ui.html,测试调用batchUpdate

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值