springboot业务层service开发全过程(以mybatis-plus为例)

news2024/11/16 15:31:20

在配置完数据层Dao/Mapper层的基础上,接下来我们要开始实现业务层的开发。

数据层和业务层的区别:

简单来说业务层是数据层的一个升级,从名字上也可以看出,数据层要想查询一个ID,都是需要定义SelectById这样的名称,但是在业务层直接就是GetById这种,只要结果,就跟主管一样,只要结果,干活的事情交给数据层去做了。

第一部分:在service包下新建实体类和接口

(1)FuelService接口

package com.example.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.domain.Fuel;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ServiceTests {
    @Autowired
    private FuelService fuelService;
    @Test
    void contextLoads1() {
        //测试添加
        Fuel fuel=new Fuel(100L,"周煤",1.1,1.1,1.1,1.1,1.1,1.1);
        fuelService.save(fuel);
    }
    @Test
    void contextLoads2() {
        //测试更新
        Long id=100L;
        Fuel fuel=fuelService.getById(id);
        fuel.setFossilEnergyType("周1煤");
        fuelService.update(fuel);
    }
    @Test
    void contextLoads3() {
        //测试删除
        Long id=100L;
        fuelService.delete(id);
    }
    @Test
    void contextLoads4() {
        //测试根据id查询
        Long id=100L;
        fuelService.getById(id);
    }
    @Test
    void contextLoads5() {
        //测试查询全部
        fuelService.getAll();
    }
    @Test
    void contextLoads6() {
        //分页查询
        //分页
        IPage page=fuelService.getPage(2,5);//查询第二页,每页展示条数据
        page.getCurrent();//第二页
        //获取一页展示多少个数据
        page.getSize();
        //查询总共有多少条数据
        page.getTotal();
        //查询一共能够有多少页
        page.getPages();

        //列表形式,也就是查询到的数据
        page.getRecords();

        //输出
        System.out.println("当前页:"+page.getCurrent());
        System.out.println("每一页展示的数据量:"+page.getSize());
        System.out.println("总数据量"+page.getTotal());
        System.out.println("总页数"+page.getPages());
        System.out.println("所有数据:"+page.getRecords());
    }
    @Test
    void contextLoads7() {
        //条件查询-我们查询fossilEnergyType属性类别数据中含有“煤”的数据条
        String SearchName="煤";
        LambdaQueryWrapper<Fuel> wrapper=new LambdaQueryWrapper<>();
        if(SearchName!=null) {//避免查询的字段为null名字的字段
            wrapper.like(Fuel::getFossilEnergyType, SearchName);//第一个是属性名字,第二个是我们输入要like的内容
        }
        fuelService.getLikeAll(wrapper);
    }

}

(2)FuelServiceImpl实现类

package com.example.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.domain.Fuel;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ServiceTests {
    @Autowired
    private FuelService fuelService;
    @Test
    void contextLoads1() {
        //测试添加
        Fuel fuel=new Fuel(100L,"周煤",1.1,1.1,1.1,1.1,1.1,1.1);
        fuelService.save(fuel);
    }
    @Test
    void contextLoads2() {
        //测试更新
        Long id=100L;
        Fuel fuel=fuelService.getById(id);
        fuel.setFossilEnergyType("周1煤");
        fuelService.update(fuel);
    }
    @Test
    void contextLoads3() {
        //测试删除
        Long id=100L;
        fuelService.delete(id);
    }
    @Test
    void contextLoads4() {
        //测试根据id查询
        Long id=100L;
        fuelService.getById(id);
    }
    @Test
    void contextLoads5() {
        //测试查询全部
        fuelService.getAll();
    }
    @Test
    void contextLoads6() {
        //分页查询
        //分页
        IPage page=fuelService.getPage(2,5);//查询第二页,每页展示条数据
        page.getCurrent();//第二页
        //获取一页展示多少个数据
        page.getSize();
        //查询总共有多少条数据
        page.getTotal();
        //查询一共能够有多少页
        page.getPages();

        //列表形式,也就是查询到的数据
        page.getRecords();

        //输出
        System.out.println("当前页:"+page.getCurrent());
        System.out.println("每一页展示的数据量:"+page.getSize());
        System.out.println("总数据量"+page.getTotal());
        System.out.println("总页数"+page.getPages());
        System.out.println("所有数据:"+page.getRecords());
    }
    @Test
    void contextLoads7() {
        //条件查询-我们查询fossilEnergyType属性类别数据中含有“煤”的数据条
        String SearchName="煤";
        LambdaQueryWrapper<Fuel> wrapper=new LambdaQueryWrapper<>();
        if(SearchName!=null) {//避免查询的字段为null名字的字段
            wrapper.like(Fuel::getFossilEnergyType, SearchName);//第一个是属性名字,第二个是我们输入要like的内容
        }
        fuelService.getLikeAll(wrapper);
    }

}

整体结构为:

(3)测试部分代码

package com.example.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.domain.Fuel;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ServiceTests {
    @Autowired
    private FuelService fuelService;
    @Test
    void contextLoads1() {
        //测试添加
        Fuel fuel=new Fuel(100L,"周煤",1.1,1.1,1.1,1.1,1.1,1.1);
        fuelService.save(fuel);
    }
    @Test
    void contextLoads2() {
        //测试更新
        Long id=100L;
        Fuel fuel=fuelService.getById(id);
        fuel.setFossilEnergyType("周1煤");
        fuelService.update(fuel);
    }
    @Test
    void contextLoads3() {
        //测试删除
        Long id=100L;
        fuelService.delete(id);
    }
    @Test
    void contextLoads4() {
        //测试根据id查询
        Long id=100L;
        fuelService.getById(id);
    }
    @Test
    void contextLoads5() {
        //测试查询全部
        fuelService.getAll();
    }
    @Test
    void contextLoads6() {
        //分页查询
        //分页
        IPage page=fuelService.getPage(2,5);//查询第二页,每页展示条数据
        page.getCurrent();//第二页
        //获取一页展示多少个数据
        page.getSize();
        //查询总共有多少条数据
        page.getTotal();
        //查询一共能够有多少页
        page.getPages();

        //列表形式,也就是查询到的数据
        page.getRecords();

        //输出
        System.out.println("当前页:"+page.getCurrent());
        System.out.println("每一页展示的数据量:"+page.getSize());
        System.out.println("总数据量"+page.getTotal());
        System.out.println("总页数"+page.getPages());
        System.out.println("所有数据:"+page.getRecords());
    }
    @Test
    void contextLoads7() {
        //条件查询-我们查询fossilEnergyType属性类别数据中含有“煤”的数据条
        String SearchName="煤";
        LambdaQueryWrapper<Fuel> wrapper=new LambdaQueryWrapper<>();
        if(SearchName!=null) {//避免查询的字段为null名字的字段
            wrapper.like(Fuel::getFossilEnergyType, SearchName);//第一个是属性名字,第二个是我们输入要like的内容
        }
        fuelService.getLikeAll(wrapper);
    }

}

(1)测试新建

测试代码:


    @Test
    void contextLoads1() {
        //测试添加
        Fuel fuel=new Fuel(100L,"周煤",1.1,1.1,1.1,1.1,1.1,1.1);
        fuelService.save(fuel);
    }

测试结果:

(2)测试修改

测试代码:

@Test
    void contextLoads2() {
        //测试更新
        Long id=100L;
        Fuel fuel=fuelService.getById(id);
        fuel.setFossilEnergyType("周1煤");
        fuelService.update(fuel);
    }

测试结果:

(3)测试删除

测试代码:

  @Test
    void contextLoads3() {
        //测试删除
        Long id=100L;
        fuelService.delete(id);
    }

测试结果:

(4)测试按照id查询

测试代码:

@Test
    void contextLoads4() {
        //测试根据id查询
        Long id=100L;
        fuelService.getById(id);
    }

测试结果:

(5)测试查询全部

测试代码:

 @Test
    void contextLoads5() {
        //测试查询全部
        fuelService.getAll();
    }

测试结果:

(6)测试分页查询

测试代码:

 @Test
    void contextLoads6() {
        //分页查询
        //分页
        IPage page=fuelService.getPage(2,5);//查询第二页,每页展示条数据
        page.getCurrent();//第二页
        //获取一页展示多少个数据
        page.getSize();
        //查询总共有多少条数据
        page.getTotal();
        //查询一共能够有多少页
        page.getPages();

        //列表形式,也就是查询到的数据
        page.getRecords();

        //输出
        System.out.println("当前页:"+page.getCurrent());
        System.out.println("每一页展示的数据量:"+page.getSize());
        System.out.println("总数据量"+page.getTotal());
        System.out.println("总页数"+page.getPages());
        System.out.println("所有数据:"+page.getRecords());
    }

测试结果:

(7)测试条件查询

测试代码:

 @Test
    void contextLoads7() {
        //条件查询-我们查询fossilEnergyType属性类别数据中含有“煤”的数据条
        String SearchName="煤";
        LambdaQueryWrapper<Fuel> wrapper=new LambdaQueryWrapper<>();
        if(SearchName!=null) {//避免查询的字段为null名字的字段
            wrapper.like(Fuel::getFossilEnergyType, SearchName);//第一个是属性名字,第二个是我们输入要like的内容
        }
        fuelService.getLikeAll(wrapper);
    }

测试结果:

文件获取:

①数据库

链接:https://pan.baidu.com/s/1edTUrhnzfp1gkDuq0wptJw?pwd=uxbh 
提取码:uxbh 
--来自百度网盘超级会员V5的分享

②源文件

链接:https://pan.baidu.com/s/1ozBWoj86Z0QDiimpcs6UUw?pwd=2umt 
提取码:2umt 
--来自百度网盘超级会员V5的分享

运行我打包的项目,为了能够正常运行(需要兼容maven以及java版本),具体的调整方法看我博客:http://t.csdnimg.cn/Uovig

好啦,希望能够帮助到大家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963533.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零门槛AI 绘图:教你为客户定制 ComfyUI Serverless API 应用

作者&#xff1a;鸥弋、筱姜 2023年下半年&#xff0c;ComfyUI 以其快速、流畅的图像生成能力&#xff0c;结合多样的自定义节点&#xff0c;迅速在创作者中流行起来。ComfyUI 的亮点就是能够批量化生成图像&#xff0c;一键加载大量工作流&#xff0c;让用户可以轻松实现人像…

代理仓业务好做吗?有没有什么系统可以打理的?

做海外仓代理相对自建海外仓而言&#xff0c;风险较小&#xff0c;更适合货代&#xff0c;但也需要面对一些难题&#xff1a;仓库管理、市场拓展、多仓协同、打通接口等。易境通DWMS系统就可以让海外仓代理变得简单明晰&#xff0c;让刚进入这个领域的小白也可以成功转型&#…

各类网页设计的设计尺寸大揭秘

我们讨论网页的大小时&#xff0c;我们需要明白这不仅仅是一个数字。在一个充满随时变化和创新的数字世界中&#xff0c;网页的建立和设计应考虑设备类型、屏幕大小和分辨率、用户浏览习惯等诸多因素。本文将深入分析这个主题&#xff0c;以帮助您充分理解这种情况&#xff0c;…

tensorRT 自带测试样例 sampleOnnxMNIST 源码分析

该测试样例是进行手写数字识别&#xff0c;使用 Visual Studio 2022 打开 tensorRT安装目录下的 samples 下的 sampleOnnxMNIST 工程( 例如我的是 D:\install\tensorRT\TensorRT-8.6.1.6\samples\sampleOnnxMNIST )&#xff0c;执行输出结果&#xff1a; 成功识别出数字0&#…

ai模特换装软件哪个好用?不知道怎么穿搭就用这几个

最近#紫色跑道的city穿搭#风靡全网&#xff0c;大家纷纷晒出自己的紫色风情。 可一想到衣橱里堆积如山的衣服和钱包的“瘦身计划”&#xff0c;是不是有点小纠结&#xff1f; 别怕&#xff0c;科技来救场&#xff01;那就是“一键换装在线工具”&#xff0c;让你无需剁手&…

【初阶数据结构】11.排序(2)

文章目录 2.3 交换排序2.3.1 冒泡排序2.3.2 快速排序2.3.2.1 hoare版本2.3.2.2 挖坑法2.3.2.3 lomuto前后指针2.3.2.4 非递归版本 2.4 归并排序2.5 测试代码&#xff1a;排序性能对比2.6 非比较排序2.6.1 计数排序 3.排序算法复杂度及稳定性分析 2.3 交换排序 交换排序基本思想…

2024最新 Navicat Premium 17 简体中文激活版详细安装教程(最简单的激活方式)

一、下载地址 下载链接&#xff1a;分享文件&#xff1a;Navicat Premium 17.0.8 (x64) 中文版.zip 二、安装步骤 1、解压后点击运行navicat170_premium_cs_x64.exe 2、开始安装 3、选择安装路径&#xff0c;最好不要放在系统盘C盘&#xff0c;后面两个步骤默认 4、安装中&a…

【小知识】黑白分明的计算机世界——关系表达式,逻辑表达式和三目运算符

【小知识】黑白分明的计算机世界——关系表达式&#xff0c;逻辑表达式和三目运算符 1.逻辑变量2.关系表达式和逻辑表达式2.1.关系表达式2.1.1.例题——a和b的关系2.1.2.浮点数精度误差 2.2.逻辑表达式2.2.1.常见的逻辑运算符2.2.2.优先级2.2.3.注意事项2.2.3.1.在写逻辑表达式…

书生大模型学习笔记 - 连接云端开发机

申请InternStudio开发机&#xff1a; 这里进去报名参加实战营即可获取 书生大模型实战营 InternStudio平台 创建开发机 SSH连接开发机&#xff1a; SSH免密码登录 本地创建SSH密钥 ssh-keygen -t rsa打开以下文件获取公钥 ~/.ssh/id_rsa.pub去InternStudio添加公钥 …

OPenCV高级编程——OpenCV常见的API及绘图知识详解

目录 引言 一、Mat类详解 1. Mat类的基本结构 2. Mat类的数据类型 3. Mat类的创建与初始化 4. Mat类的使用技巧 二、OpenCV核心功能模块 1. 基本的图像读取与显示 2. 图像的保存 3. 矩阵操作 4. 等待键盘输入与销毁窗口 5. 命名窗口 三、图像处理模块 1. 色彩空间…

一个简单的车辆目标检测和跟踪示例

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 介绍 目标检测&#xff1a;目标检测是指在图像或视频帧中识别和定位特定目标&#xff0c;并使用边界框来确定它们的位置。YOLO&#xff08;You Only Look Once&#xff09;是一种高效的单阶段目标检测算法&#xff0c;以…

普冉Puya 超高性价比M0 MCU 工业电子解决方案

普冉半导体(上海)股份有限公司成立于2016年&#xff0c;总部位于上海张江高科&#xff0c;公司目前主要产品包括微控制器芯片、非易失性存储器芯片及模拟产品。产品广泛应用于物联网、智能手机及周边、可穿戴、服务器、光模块、工业控制、汽车电子、安防等领域。公司在深圳、韩…

Spring Boot集成udp通讯

Spring Boot集成udp通讯 加入依赖编辑配置文件配置相关属性具体业务类客户端调试 加入依赖 <!--加入UDP通信所需依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-integration</artifactId&…

GD32 MCU电源复位和系统复位有什么区别

GD32 MCU的复位分为电源复位和系统复位&#xff0c;电源复位又称为冷复位&#xff0c;相较于系统复位&#xff0c;上电复位更彻底&#xff0c;下面为大家详细介绍上电复位和系统复位的实现以及区别。 电源复位包括上电/掉电复位或者从standby模式唤醒产生的复位&#xff0c;电…

HarmonyOS NEXT——奇妙的调用方式

注解调用一句话总结Extend抽取特定组件样式、事件&#xff0c;可以传递参数Style抽取公共样式、事件&#xff0c;不可以传递参数Builder抽取结构、样式、事件&#xff0c;可以传递参数BuilderParams自定义组件中传递UI组件多个BuilderParams自定义组件中传递多个UI组件 Extend…

echarts加载区域地图,并标注点

效果如下&#xff0c;加载了南海区域的地图&#xff0c;并标注几个气象站点&#xff1b; 1、下载区域地图的JSON&#xff1a;DataV.GeoAtlas地理小工具系列 新建nanhai.json&#xff0c;把下载的JSON数据放进来 说明&#xff1a;如果第二步不打勾&#xff0c;只显示省的名字&a…

全新微软语音合成网页版源码,短视频影视解说配音网页版系统-仿真人语音

源码介绍 最新微软语音合成网页版源码&#xff0c;可以用来给影视解说和短视频配音。它是TTS文本转语言&#xff0c;API接口和PHP源码。 这个微软语音合成接口的源码&#xff0c;超级简单&#xff0c;就几个文件搞定。用的是官方的API&#xff0c;试过了&#xff0c;合成速度…

InnoDB存储引擎(1)

InnoDB存储引擎的优点 InnoDB在设计时考虑到了处理大数据量时的性能&#xff0c;支持事务&#xff0c;回滚和崩溃修复的能力&#xff0c;通过多版本并发控制来减少锁定(降低了锁的争用),同时还支持外键的约束&#xff1b;通过缓冲池在内存中缓存数据来提高查询的性能&#xff…

内容营销专家刘鑫炜:驾驭AI为品牌服务,从成为卓越投喂师开始!

在这个信息爆炸、注意力稀缺的时代&#xff0c;品牌内容营销已成为企业连接消费者、塑造品牌形象的关键途径。而人工智能&#xff08;AI&#xff09;技术的融入&#xff0c;更是为内容营销带来了前所未有的变革与机遇。然而&#xff0c;要让AI真正为你的品牌内容营销高效服务&a…

vue3后台管理系统 vue3+vite+pinia+element-plus+axios上

前言 项目安装与启动 使用vite作为项目脚手架 # pnpm pnpm create vite my-vue-app --template vue安装相应依赖 # sass pnpm i sass # vue-router pnpm i vue-router # element-plus pnpm i element-plus # element-plus/icon pnpm i element-plus/icons-vue安装element-…