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);