为什么要用impl继承service层_JavaWeb service层 dao层 采用接口+impl 的原因

JavaWeb中,service层采用接口+impl设计模式允许根据业务需求选择不同实现,方便切换和扩展。例如,通过@Autowired和@Qualifier注解可以灵活注入serviceImp1或serviceImp2。而在dao层,接口+impl用于适配不同数据库的JDBC差异,如Oracle和MySQL,通过DaoFactory动态创建相应实现,确保代码的数据库无关性。
摘要由CSDN通过智能技术生成

service层 采用接口+impl :

是为了应对可能不同情形下,会存在多套业务逻辑。在调用的时候,根据实际情况去调用对应的serviceImpl

eg:

存在 serviceImp1, serviceImp2,

需要调用serviceImp1时,注入:

@Autowired

@Qualifier("serviceImp1")

private Service service1;

需要调用serviceImp2时,注入:

@Autowired

@Qualifier("serviceImp2")

private Service service2;

dao层 采用接口+impl :

为了适应不同数据库的JDBC实现差异。

如:需要查询一个部门下的所有子部门,系统即要支持Oracle又要支持mysql:

首先定义一个部门接口:

Interface DepartmentDao{

//根据父部门ID查询部门下的所有子部门

public List findDept(int deptId);

}

编写两套接口类,一个是用mysql语句实现的类,另一个是用Oracle实现的类:

class MySqlDepartmentDaoImpl implement DepartmentDao{

//根据父部门ID查询部门下的所有子部门

public List findDept(int deptId){

String sql="mysql的sql语句";

}

}

class OracleDepartmentDaoImpl implement DepartmentDao{

//根据父部门ID查询部门下的所有子部门

public List findDept(int deptId){

String sql="Oracle的sql语句";

}

}

一个Dao工厂,工厂返回部门Dao接口的实例:

class DaoFactory{

public DepartmentDao getDepartmentDao(){

if(使用的是Mysql数据库){

return new MySqlDepartmentDaoImpl();

}else{

return new OracleDepartmentDaoImpl();

}

}

}

如果用户使用的是mysql数据库就会返回new MySqlDepartmentDaoImpl();

反之为new OracleDepartmentDaoImpl();

DepartmentDao deptDao = DaoFactory.getDepartmentDao();

deptDao.findDept(1);

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现通常包含业务逻辑和数据操作。在Spring BootService通常会注入Repository来操作数据,同时处理业务逻辑。 下面是一个简单的Service实现示例: ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public User getUserById(Long id) { Optional<User> optionalUser = userRepository.findById(id); if (optionalUser.isPresent()) { return optionalUser.get(); } else { throw new UserNotFoundException("User not found with id: " + id); } } @Override public List<User> getAllUsers() { return userRepository.findAll(); } @Override public void saveUser(User user) { userRepository.save(user); } @Override public void updateUser(User user, Long id) { Optional<User> optionalUser = userRepository.findById(id); if (optionalUser.isPresent()) { User existingUser = optionalUser.get(); existingUser.setName(user.getName()); existingUser.setEmail(user.getEmail()); userRepository.save(existingUser); } else { throw new UserNotFoundException("User not found with id: " + id); } } @Override public void deleteUser(Long id) { userRepository.deleteById(id); } } ``` 在这个示例,我们注入了一个UserRepository实例来操作User对象的数据访问。getUserById()方法从Repository获取指定ID的User对象并返回。getAllUsers()方法返回所有User对象的列表。saveUser()方法将User对象保存到Repository。updateUser()方法更新指定ID的User对象。deleteUser()方法从Repository删除指定ID的User对象。 @Service注解将这个类标记为Spring Bean,并且它是Spring Boot应用程序的一个Service组件。这个类实现了UserService接口,这个接口定义了服务的所有方法。这个类的方法包含了业务逻辑和数据操作,可以通过Controller调用来处理请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值