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