创建业务层Service接口及实现类

标准做法: 定义一个接口,然后再一个或多个类去实现, 疑问来了:为什么我们要维护两份同构代码,而不直接使用一个类呢?

创建业务层Service接口及实现类的规范 1、接口及实现类命名方式,接口XXXService,实现类:XXXServiceImpl。 2、实现类XXXServiceImpl需添加注解@Service,并指明名称,如@Service(“companyService”); 3、在实现类中,通过注解@Autowired,注入数据仓库层Repository接口; 4、当实现的接口涉及数据库数据的删除或修改时,方法上一定要添加注解@Transactional,否则会执行不成功

业务层代码示例: (1)接口

package com.jcj.mydemo.service;
import com.jcj.mydemo.domain.Company;
import javax.transaction.Transactional;
import java.util.List;

public interface CompanyService {
          
   
    //保存
    void save(Company company);   // Company实体类

    //根据UUID删除记录,删除和更新要加上@Transactional
    @Transactional
    void delete(String uuid);

    //修改
    @Transactional
    void update(Company company);

    //查询全部数据
    List<Company> findAll();

    //执行原生sql语句查询
    List<Company> findByNativeSQL(String companyname);
}

(2)接口的实现类

package com.jcj.mydemo.service.impl;
import com.jcj.mydemo.domain.Company;
import com.jcj.mydemo.repository.CompanyRepo;
import com.jcj.mydemo.service.CompanyService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.transaction.Transactional;
import java.util.List;

@Service("companyService")
public class CompanyServiceImpl implements CompanyService {
          
    
    @Resource
    private CompanyRepo companyRepo;   
    
    @Override
    public void save(Company company) {
          
   
        companyRepo.save(company);
    }

    @Override
    public void delete(String uuid) {
          
   
        companyRepo.deleteById(uuid);
    }

    @Transactional
    @Override
    public void update(Company company) {
          
   
        companyRepo.save(company);
    }

    @Override
    public List<Company> findAll() {
          
   
        return companyRepo.findAll();
    }

    @Override
    public List<Company> findByNativeSQL(String companyname) {
          
   
        return companyRepo.findByNativeSQL(companyname);
    }
}
经验分享 程序员 微信小程序 职场和发展