0


SpringBoot项目中controller层、service层、mapper层、entity层、dto层、vo层理解

SpringBoot框架继承了Spring中基本功能,但在项目层级结构上又有些不同,本文着重对SpringBoot项目中后端的基本层级结构做了梳理。

项目的具体开发规范建议学习Java开发手册(嵩山版),本文不作一一赘述。

Controller层:

本层定义接口并调用service层接口方法完成业务逻辑。

功能:

接受前端请求,调用service,接受service返回的数据,之后响应给客户端。

Service层:

service层为业务服务,调用mapper层并提供给controller层使用,间接和数据库打交道。

项目结构包括两部分,接口文件和接口实现类文件,接口文件中定义在controller层中调用的service层方法;接口实现类文件中完成service层接口中定义的方法的实现。

注意:这里接口实现类中方法的实现是指业务逻辑的实现,可能有些方法并不能在实现类里完成真正意义上的实现,还需要在mapper层文件完成其真正意义上的实现(主要是和数据库交互)。

Mapper层:

mapper层为操作数据库的一层。

mapper层分为两部分,mapper接口层和mapper.xml层。

mapper接口层:

定义在service接口中没有完成真正实现,需要通过书写SQL语句才能完成其功能的方法。

mapper.xml层:

(1)配置通用查询映射结果:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nayun.cultourism.mapper.CultureTourismSituationMapper">

    <!-- 通用查询映射结果-->
    <resultMap id="cultureTourismResultMap" type="com.nayun.cultourism.entity.CultureTourismSituation">
        <result column="id" property="id"/>
        <result column="name" property="name"/>
        <result column="annual_flow" property="annualFlow"/>
        <result column="position" property="position"/>
        <result column="illustration" property="illustration"/>
        <result column="pic_url" property="picUrl"/>
        <result column="creat_user" property="createUser"/>
        <result column="creat_dept" property="creatDept"/>
        <result column="creat_time" property="creatTime"/>
        <result column="update_user" property="updateUser"/>
        <result column="update_time" property="updateTime"/>
        <result column="status" property="status"/>
        <result column="is_deleted" property="isDeleted"/>
        <result column="address" property="address"/>
    </resultMap>

注意:

  • namespace 和 resultMap 的 type 要指向正确的地址,namespace指向mapper文件,type指向实体类。
  • column为数据库中的表字段,property为实体类中属性名(一一对应)。

关于column以及property命名:

  • column为数据库表字段名,小写,各单词之间用下划线分割。
  • property为实体类中属性名,命名一般符合驼峰形。

(2)完成mapper接口中方法的SQL语句实现:

在这个模块中就是书写具体的SQL语句了,将查询结果映射在方法中的resultMap中,id为在mapper接口中定义的方法名。

<!--查询所有景点数据-->
    <select id="findAll" resultMap="cultureTourismResultMap">
        select * from cockpit_tourist_spots where is_deleted = 0
    </select>

    <select id="getList" resultMap="cultureTourismResultMap">
        select * from cockpit_tourist_spots where is_deleted = 0
        <if test="cultureTourismSituation.name != null and cultureTourismSituation.name != ''">
            and name LIKE CONCAT('%',#{cultureTourismSituation.name},'%')
        </if>
    </select>

Entity层:

也就是所谓的model,也称为pojo层,是数据库在项目中的类,该文件包含实体类的属性和对应属性的set、get方法。

实体类中属性同数据库表字段一一对应,对于相应的set、get方法一般不需要书写,实体类上引入@Data注解,会自动为实体类注入get、set以及toString方法,减少代码量。

VO层:

视图对象,用于展示层,把某个指定页面的所有数据封装起来,方便前端获取数据,后端将前端需要 的数据做整合,打包成一个类。

使用场景:

如果在前端页面需要展示经过某些数据库操作才能展示的特定数据,一般在vo层中把操作过程中涉及的数据进行封装,方便前端获取。并在controller层定义对应接口时把返回类型规定为vo类。

DTO层:

数据对象传输层,负责屏蔽后端实体层,将UI要的数据进行重新定义和封装。因为后端在实际业务场景中需要存储大量数据,而用户需要的数据只是一部分,为了快速获取用户需要的数据,应该把用户经常用到的数据在dto层中进行封装,在调用服务层时,只需要调用一次便可完成所有的逻辑操作。

运行流程:

  1. 控制层接收前端请求,调用对应的业务层接口方法
  2. 业务层实现类去实现业务层接口
  3. 业务层实现类的方法内调用数据层的接口
  4. 数据层实现文件(mapper.xml)实现数据层接口
  5. 然后处理结果层层返回

总的来说这样每层做什么的分类只是为了使业务逻辑更加清晰,写代码更加方便,所以有时候也需要根据具体情况来,但是大体的都是这样处理的,因为它其实就是提供一种规则,让你把相同类型的代码放在一起,这样就形成了层次,从而达到分层解耦、复用、便于测试和维护的目的。

标签: spring boot java spring

本文转载自: https://blog.csdn.net/qq_44973310/article/details/126849368
版权归原作者 naruto_biubiubiu 所有, 如有侵权,请联系我们删除。

“SpringBoot项目中controller层、service层、mapper层、entity层、dto层、vo层理解”的评论:

还没有评论