▷ springboot各层之间的作用及联系(彻底理解)

前言:找一个海滩,找一个黄昏,看一片夕阳,思一回人生,偶尔也需要停下脚步,沉思自己!
从大一到现在,感觉自己都是一个新的东西接着一个新的东西的学,没有笔记也没有总结,虽然学了一些技术栈,但终究只是学了。理解不透彻,也没有学得精通,更没有熟练掌握!学会总结才是对知识最好的归类! 纸上得来终觉浅,绝知此事要躬行!
具体的web项目:
controller层—>service层(serviceImpl实现service接口)—>mapper层—>mapper.xml文件
解释:controller层调用了service层的具体功能和方法,service层由service对应的接口和实现类组成,serviceImpl实现service的相关接口同时完成相关的业务逻辑处理。service层(serviceImpl)再调用mapper层的接口进行业务逻辑应用的处理。mapper层的接口在对应的xml配置文件中进行配置、实现以及关联,故mapper层的任务就是向数据库发送sql语句,完成数据的处理任务!
pojo层映射数据库,pojo层的一个实体类映射数据库中的一张表。
example:
controller层(AdminController):
public class AdminController {
@Autowired
private IAdminService adminService;
@ApiOperation(value = "获取操作员")
@GetMapping("/")
public List
return adminService.getAllAdmins(keywords);
}
}
Service层:
service接口(IAdminService):
public interface IAdminService extends IService
/**
* 获取操作员
* @param keywords
* @return
*/
List
}
service接口的Impl(AdminServiceImpl):
@Service
public class AdminServiceImpl extends ServiceImpl
@Autowired(required = false)
private AdminMapper adminMapper;
/**
* 获取所有操作员
* @param keywords
* @return
*/
@Override
public List
return adminMapper.getAllAdmins(AdminUtils.getCurrentAdmin().getId(),keywords);
}
Mapper层(AdminMapper):
public interface AdminMapper extends BaseMapper
/**
* 获取所有操作员
* @param id
* @param keywords
* @return
*/
List
}
Mapper.xml配置文件(AdminMapper.xml):
SELECT DISTINCT
a.*,
r.id AS rid,
r.`name` AS rname,
r.nameZh AS rnameZh
FROM
t_admin a
LEFT JOIN t_admin_role ar ON a.id = ar.adminId
LEFT JOIN t_role r ON r.id = ar.rid
WHERE
a.id != #{id}
AND a.`name` LIKE CONCAT('%', #{keywords}, '%' );
ORDER BY
a.id
解释:(这是我一个项目的部分代码,关于各个层的调用关系也只是截取了每个接口或类调用的地方,可能会存在不足之处)
首先是controller层,controller层自动注入了service层的IAdminService接口,并且通过该接口的对象adminService调用了service层中IAdminService接口的getAllAdmins方法。而IAdminServiceImpl自动注入了mapper层的AdminMapper接口,并在其getAllAdmins方法中利用AdminMapper接口的对象调用了AdminMapper中的getAllAdmins方法。Mapper层的AdminMapper中的getAllAdmins方法再与Mapper.xml配置文件中的AdminMapper.xml配置文件通过namespace以及相关id进行关联,从而完成对数据库的操作,完成数据处理任务!
下面是各层的具体含义:(转自这个博主的链接)
controller
控制层,控制业务逻辑service,控制请求和响应,负责前后端交互 controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行
pojo
model是模型的意思,与entity、domain、pojo类似,是存放实体的类,类中定义了多个类属性,并与数据库表的字段保持一致,一张表对应一个model类。 主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。
service
业务逻辑层,完成功能的设计 和dao层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用dao层的接口进行业务逻辑应用的处理。 service的impl是把mapper和service进行整合的文件 封装Service层的业务逻辑有利于业务逻辑的独立性和重复利用性。
mapper
又被成为mapper层,叫数据持久层,先设计接口,然后在配置文件中进行配置其实现的关联。 dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。 数据持久化操作就是指,把数据放到持久化的介质中,同时提供增删改查操作,比如数据通过hibernate插入到数据库中 概览: