创建业务层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); } }