快速掌握SpringBoot项目中的domain、mapper、service、controller层作用与书写格式

这篇具有很好参考价值的文章主要介绍了快速掌握SpringBoot项目中的domain、mapper、service、controller层作用与书写格式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

承接上篇文章:http://t.csdn.cn/49QHB

①四个层负责的功能与作用:

1. Domain:包含业务实体,用于传输和封装数据。作用:作为数据载体,用于在各个模块之间传递业务数据。

2. Mapper:实现Domain与数据库表的映射及数据访问逻辑。作用:负责数据访问,将业务实体与数据库表进行映射,实现查询、新增、删除和修改操作。

3. Service:包含复杂的业务逻辑处理。 作用:负责业务逻辑相关处理,通过调用Mapper层的方法访问数据库,然后返回处理结果。Service层隐藏了数据访问细节,提供更加抽象的业务接口。

4. Controller:接收请求和解析参数,调用Service层的业务方法,返回响应。作用:负责请求接收、响应返回和参数解析,通过调用Service层的方法处理业务,然后将结果返回给客户端。所以,Controller层依赖Service层,但Service层不依赖于Controller层。

总结来说:

- Domain:用于数据传输,承载数据。
- Mapper:实现数据库操作,负责数据访问。
- Service:处理业务逻辑,通过Mapper层访问数据库。
- Controller:请求接收/响应返回,通过Service层处理业务逻辑。

②下面以具体代码,演示一般的书写逻辑与格式:

1.首先,创建如图所示的四个文件夹和一个子文件夹

mapper层的作用,后端开发,spring boot,java,spring,后端

2.domain层直接映射到数据库表,首先进行domain层代码的书写

(1)在书写代码前,需要先创建好数据库表

这里我以我已经创建好的 rf_ice_data 表为例进行演示,设计表格的参数如下:

mapper层的作用,后端开发,spring boot,java,spring,后端

 (2)在 domain 层下,创建 RfIceData.java(Class),对应数据表字段可以写出如下代码:

@Data
public class RfIceData {
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    private String devId;
    private Date time;
    private Double temperature;
    private Double latitude;
    private Double longitude;
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    private int isDelete;
    private int projectId;
}

 (3)以此类推,你的项目用到多少个表,就在 domain 下对应写多少个 java 文件

 3.书写Mapper,实现对数据库字段的多种操作

(1)在 mapper 层下创建 RfIceData.java(Interface),书写以下代码

@Mapper
public interface RfIceDataMapper extends BaseMapper<RfIceData> {
}

 (2)其他表,类比(1)进行书写,核心就是继承BaseMapper

4.书写Service,实现业务设计的逻辑部分(这里以条件查询为例)

(1)先写接口,确定逻辑功能的输入输出

public interface IRfDataService {
    /**
     * Description: 获取该设备该时间段内的全部数据批次
     * date: 2023/3/28 20:03
     * @param devId
     * @param startTime
     * @param endTime
     * @author: hzy
     * @since JDK 1.8
     */
    List<RfProject> getProjectDataByTime(String devId, String startTime, String endTime);
}

List为接口返回类型,()内为传入参数

(2)在 impl 内书写接口的实现

@Service
@RequiredArgsConstructor
@Slf4j

public class RfDataServiceImpl implements IRfDataService {

    private final RfIceDataMapper rfIceDataMapper;

    @Override
    public List<RfProject> getProjectDataByTime(String devId, String startTime, String endTime) {
        QueryWrapper<RfProject> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("dev_id", devId)
                .ge("start_time",startTime)
                .le("end_time",endTime)
                .orderBy(true,true,"create_time");
        //rfproject数据填充(为了swagger界面能够显示)
        List<RfProject> rfProjects = rfProjectMapper.selectList(queryWrapper);
        for(RfProject rfProject : rfProjects){
            QueryWrapper<RfSample> queryWrapperSample = new QueryWrapper<>();
            queryWrapperSample.eq("project_id", rfProject.getId());
            QueryWrapper<RfPictureUrl> queryWrapperUrl = new QueryWrapper<>();
            queryWrapperUrl.eq("project_id", rfProject.getId());
            rfProject.setSampleList(rfSampleMapper.selectList(queryWrapperSample));
            rfProject.setUrlList(rfPictureUrlMapper.selectList(queryWrapperUrl));
        }
        return rfProjectMapper.selectList(queryWrapper);
    }
}

业务逻辑涉及数据表的查询,使用 Mybatis-Plus 的好处在于,Mybatis-Plus 提供的 QueryWrapper类可以简化SQL语句的书写。QueryWraper的方法简洁,功能可参考博客:http://t.csdn.cn/gGnCz

5.书写Controller,一般为简单调用service实现逻辑的接口,将结果返回至客户端,由app或前端处理这些数据。至此,后台的任务可以认为初步结束。文章来源地址https://www.toymoban.com/news/detail-775000.html

@RestController
@RequiredArgsConstructor
@RequestMapping(value = "/rf/RfDeviceData")
@Api(tags = {"冰箱app数据接口"},produces = MediaType.APPLICATION_JSON_VALUE)

public class RfDataController extends BaseController {

    private final IRfDataService rfDataService;

    @ApiOperation("获取该设备该时间段内的全部数据批次")
    @PostMapping("/getProjectDataByTime")
    public Map<String, Object> getProjectDataByTime(String devId,String startTime,String endTime){
        List<RfProject> res = rfDataService.getProjectDataByTime(devId, startTime, endTime);
        return success("获取时间段内工程数据成功", res);
    }

到了这里,关于快速掌握SpringBoot项目中的domain、mapper、service、controller层作用与书写格式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包