SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例

文章目录

  • 数据库说明
  • Entity层
    • 简介
    • 实现
  • DAO层
    • 简介
    • 实例
      • 设计StudentInfoDao 接口
      • 新增配置文件StudentMapper.xml
  • Service层
    • 简介
    • 实例
      • 设计接口StudentInfoService
      • 接口实现类StudentInfoServiceImpl
  • Contorller层
    • 简介
    • 实例
  • 运行
    • 请求测试
    • 错误处理
  • 参考文章

关系:
Entity作为返回值被Dao层使用。
DAO层被Service层调用。
Service层被Controller层调用。

举例:
Controller层 :服务员,把客人(前端)点的菜(数据、请求的类型等)进行汇总什么口味、咸淡、量的多少,交给厨师长(Service层),厨师长则告诉沾板厨师(Dao 1)、汤料房(Dao 2)、配菜厨师(Dao 3)等(统称Dao层)我需要什么样的半成品,副厨们(Dao层)就负责完成厨师长(Service)交代的任务。
项目的文件结构如下图:
SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例_第1张图片

下文将通过实现根据id查询People表信息的功能,梳理各层的格式与规范。

数据库说明

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` bigint(20) NOT NULL COMMENT '用户ID',
  `name` varchar(32) NOT NULL COMMENT '名字',
  `age` int(3) DEFAULT '0' COMMENT '登录次数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
INSERT INTO student(id,name,age)
VALUES (1,'小创',21),(2,'小明',22);

SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例_第2张图片

Entity层

简介

Entity层是实体层,也就是所谓的model,也称为pojo层,是数据库在项目中的类。
domain层:与数据库中的表一一对应起来的JavaBean。
model层:和domain区别是用途不同,model通常代表了不与数据库一一对应的javaBean,封装的数据是给前端的JS脚本使用的 。

实现

SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例_第3张图片

对应数据库student表,id,name,age三个字段。
重写toString方法,定义get,set方法,定义构造函数。

public class StudentInfo {
    private Long id;
    private String name;
    private Integer age;

    @Override
    public String toString() {
        return "StudentInfo{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public StudentInfo(Long id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

DAO层

简介

Data Access Object,数据库访问对象。是持久层,主要与数据库进行交互。DAO层的类和表一 一对应的,建议DAO只做原子操作增删改查。

实例

首先是设计dao层的接口,然后在配置文件中定义此接口的实现类,然后就可以再模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,dao层的数据源配置,以及有关数据库连接参数都在配置文件中进行配置。
SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例_第4张图片
在这里插入图片描述

设计StudentInfoDao 接口

@Mapper
public interface StudentInfoDao {
    StudentInfo selectById(@Param("id") Integer id);
}

新增配置文件StudentMapper.xml


DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.scyproject.dao.StudentInfoDao">
    <select id="selectById" resultType="com.scyproject.domain.StudentInfo">
        SELECT * FROM `student` WHERE id = #{id}
    select>
mapper>

Service层

简介

Service层 业务层 控制业务。
对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事务控制。
service层主要负责业务模块的应用逻辑应用设计。同样是首先设计接口,再设计其实现类,接着在配置文件中配置其实现的关联。这样我们就可以在应用中调用service接口来进行业务处理。具体要调用已经定义的dao层接口,封装service层业务逻辑有利于通用的业务逻辑的独立性和重复利用性。程序显得非常简洁。

实例

这是只是简单地查询操作,不需要用到事务。
SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例_第5张图片

设计接口StudentInfoService

public interface StudentInfoService {
    StudentInfo selectById(Integer id);
}

接口实现类StudentInfoServiceImpl

@Service
public class StudentInfoServiceImpl implements StudentInfoService {

    @Autowired
    StudentInfoDao studentInfoDao;

    @Override
    public StudentInfo selectById(Integer id) {
        return studentInfoDao.selectById(id);
    }
}

在配置文件中配置其实现的关联(这一步在本次实践中没用到)

Contorller层

简介

controller层 控制层 控制业务逻辑
controler负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。
controller层负责具体的业务模块流程的控制,在此层要调用service层的接口来控制业务流程,控制的配置也同样是在Spring的配置文件里进行,针对具体的业务流程,会有不同的控制器。我们具体的设计过程可以将流程进行抽象归纳,设计出可以重复利用的子单元流程模块。这样不仅使程序结构变得清晰,也大大减少了代码量。

实例

新建StudentInfoController 类,接收localhost:xxxx/student/retrieve请求,调用studetService,并返回查询结果Result类。
SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例_第6张图片

@RestController
public class StudentInfoController {
    @Resource
    private StudentInfoService studentInfoService;
    @PostMapping("/student/retrieve")
    public Result selectStudentById(@RequestParam("id") Integer id) {
        System.out.println("id = "+id);
        return Result.success(studentInfoService.selectById(id));
    }
}

运行

请求测试

SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例_第7张图片

错误处理

运行如果报错Invalid bound statement (not found),可以看下配置文件是不是配置对了。

mybatis.mapper-locations: classpath:mapper/*.xml

参考文章

链接:https://www.jianshu.com/p/18c4418e9b99
链接:https://blog.csdn.net/ftfy123/article/details/113762497

你可能感兴趣的:(SpringBoot)