SSMP整合案例(6) 业务service层逻辑编写

news2025/5/22 20:15:00

之前呢 我们就还是将数据层的结构搭好了
那么 接下来就是业务层
可能有些开发人员会存在一定的误区 将业务层和数据层的函数命名混为一谈

例如 我们有个 users 表
那么 我们要做一个登录功能
那么 业务层的接口毋庸置疑叫 login 接收两个参数 userName userPassword
然后 数据层 这下就有讲究了 可能有些人还是跟他叫 login
这里需要强调的是 业务层重点关注业务 那么 它用来登录 方法名自然要和登录挂钩 login没毛病
但数据层 要重点关注他在数据库中的操作 登录无法是根据用户名和密码获取用户信息 那么数据层最合理的命名应该是 queryUsers 接收两个参数 userName userPassword
当然 你也可以按照个人喜好 这个只是规范 不是强制的 你不遵守 一样代码可以跑起来 跑的好好的 这个只是涉及后期维护的问题

我们在java启动类同目录创建一个包 叫
service
后期业务层逻辑就放在这里就好了
在这里插入图片描述
在他下面创建一个接口 叫 bookService
这个就是我们 book对应在业务层操作的接口

后期函数 业务层 如果带有业务性 那就以业务功能命名 如果只是普通的增删改查 那就 直接用最基本的增删改查命名就好了

bookService参考代码如下

package com.example.bookconfig.service;

import com.example.bookconfig.domain.book;
import java.util.List;

public interface bookService {
    //获取整个表的数据
    List<book> queryList();
    //通过id获取单条数据
    book getById(Integer id);
    //新增数据
    Boolean addBook(book book);
    //修改数据
    Boolean editBook(book book);
    //删除数据
    Boolean deleteBook(Integer id);
}

这里 我们定义了增删查改的基本函数
其实后面我们还要加 分页查 按条件查 但是 先这样吧 后面再加

我们在 service 目录下创建一个包 叫 impl 用来存放我们逻辑层接口的实现类
在这里插入图片描述
然后在下面创建一个 bookServiceImpl 类 用来做 bookService接口的实现类
参考代码如下

package com.example.bookconfig.service.impl;

import com.example.bookconfig.dao.bookDao;
import com.example.bookconfig.domain.book;
import com.example.bookconfig.service.bookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class bookServiceImpl implements bookService {

    @Autowired
    private bookDao bookDao;

    @Override
    public List<book> queryList() {
        return bookDao.selectList(null);
    }

    @Override
    public book getById(Integer id) {
        return bookDao.selectById(id);
    }

    @Override
    public Boolean addBook(book book) {
        return bookDao.insert(book) > 0;
    }

    @Override
    public Boolean editBook(book book) {
        return bookDao.updateById(book) > 0;
    }

    @Override
    public Boolean deleteBook(Integer id) {
        return bookDao.deleteById(id) > 0;
    }
}

这个类的成分就相对复杂一些了 首先
我们用@Service 注解 声明这里是个业务层管理
然后 类用来实现bookService接口 那么 既然实现 就要重写他所有的抽象方法
前面两个没什么好说的 后面我们也只是调用了bookDao通过继承BaseMapper拿到的数据库操作 但是 这里涉及到一个转换类型的操作 就是 BaseMapper 操作数据库添加 修改 删除后 它的Api是返回的是 这段sql影响的行数 那么 我们不用管他返回几 直接判断是不是 0 因为只要不是0 就表示 他执行的结果是成功的

然后 也就别说那么多啦,直接来测试一下吧

我们测试类编写代码如下

package com.example.bookconfig;

import com.example.bookconfig.service.bookService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class BookConfigApplicationTests {

    @Autowired
    private bookService bookService;

    @Test
    void contextLoads() {
        System.out.println(bookService.getById(1));
    }
}

运行结果如下
在这里插入图片描述
这里 我们测试类引入的直接就是 bookService
用的 service 层的逻辑 我们的 根据id查询就没问题了

然后 我这里就不一一测试了

但还是不要偷懒 因为 业务层的东西是要写测试用例的 我私下已经都执行过了 只是不想浪费大家时间

然后 我们在 bookService 接口中加一个分页查询的函数

//分页查询
IPage<book> getPageBook(int page,int pageSize);

这个函数用来做分页查询
我们 bookServiceImpl 写出对应实现的方法

@Override
public IPage<book> getPageBook(int page, int pageSize) {
    IPage IPage = new Page(page,pageSize);
    return bookDao.selectPage(IPage,null);
}

这里 我们直接将 page 和 pageSize 转成 Ipage的格式 然后用来操作selectPage

我们在测试类 编写代码如下

IPage<book> page = bookService.getPageBook(1,5);
System.out.println(page.getRecords());

我们调用getPageBook 从第一页开始查 查5条
运行结果如下
在这里插入图片描述

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

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

相关文章

FAQ常见问题如何从本地转为全线上版?

随着互联网的发展&#xff0c;越来越多的企业开始将常见问题FAQ从本地转移到全线上版&#xff0c;以提高用户体验和减少企业成本。本文将从以下几个方面进行阐述&#xff0c;如何将FAQ从本地转为全线上版。 一、整理FAQ 首先&#xff0c;企业需要对已有的FAQ进行整理&#xf…

极致呈现系列之:Echarts平行坐标系的多维度分析

目录 平行坐标系简介平行坐标系的常用配置项Vue3中创建平行坐标系美化平行坐标系样式美化 平行坐标系简介 平行坐标系是一种将多个维度的数值以平行的直线绘制在坐标系上的可视化方式。通过绘制多条平行直线&#xff0c;并将数据点映射到这些直线上&#xff0c;我们可以直观地…

【小沐学Web】Node.js搭建HTTPS 服务器

文章目录 1、简介1.1 HTTPS协议1.2 Node.js中的HTTPS 2、生成自签名证书2.1 key文件2.2 csr文件2.3 crt文件 4、代码测试4.1 Node.js简介4.2 Node.js的http模块4.3 Node.js的Express模块4.4 Node.js的https模块4.5 Node.js的httpsexpress模块 结语 1、简介 1.1 HTTPS协议 HTTP…

QT6之多线程控制——互斥量和信号量

在程序中,通常竞争使用临界资源&#xff0c;但如果不加限制就很可能出现异常或未达到预期的结果。 临界资源一次仅允许被一个线程使用&#xff0c;它可以是一块内存、一个数据结构、一个文件或者任何其他具有排他性使用的东西。 这些必须互斥执行的代码段称为“临界区(Critical…

使用VmWare安装黑苹果系统

目录 1.介绍2.破解安装VMware3.unlocker解锁虚拟机3.1 关闭VMware相关的进程3.2 执行安装命令 4.VmWare创建虚拟机5. 下载并配置镜像以及虚拟机设置5.1 修改镜像5.2 修改虚拟机安装路径文件内容 6. 选择镜像启动虚拟机7.安装macOS系统7.1 开启此虚拟机7.2 选择语言->简体中文…

TEC半导体热电温控技术在复合相变材料储热性能测试中的应用

摘要&#xff1a;针对定形相变复合材料热性能测试中ASTM C1784动态热流计法和ASTM C518稳态热流计法的高精度可编程快速温度控制问题&#xff0c;本文提出了采用单独两路TEC半导体热电加热制冷模组作为执行机构的解决方案。解决方案中还配备了不同加热功率的TEC控制电源模块、高…

Netty 聊天室项目案例

1. 登入 在连接建立好之后&#xff0c;客户端发送登入&#xff0c;将登入消息封装为LoginRequestMessage这个类的对象&#xff0c; ctx.writeAndFlush(loginRequestMessage);&#xff09;使用ctx发送&#xff0c;注意入站处理器调用写相关方法&#xff0c;会触发出站处理器&am…

金升阳|过压保护是什么意思?过压保护电路的构建

过压保护是指在电路中加入一种保护措施&#xff0c;以避免电路过压而导致器件损坏、安全事故等情况的发生。在实际工程中&#xff0c;过压保护电路通常由过压检测电路和过压保护器件组成。本文将详细介绍过压保护的原理、过压保护电路的构建方法、常见的过压保护器件以及应用实…

【LLMs 入门实战 】第二式:MiniGPT4 模型学习与实战

2023年4月17日&#xff0c;多模态问答模型MiniGPT-4发布&#xff0c;实现了GPT-4里的宣传效果《MiniGPT-4: Enhancing Vision-language Understanding with Advanced Large Language Models》《MiniGPT-4&#xff1a;使用高级大语言模型增强视觉语言理解》 模型介绍模型架构微调…

如何在conda环境中正确地使用pip

导言&#xff1a; 在conda环境下使用pip安装库时&#xff0c;许多时候会出现一些奇怪的现象&#xff0c;即用pip安装完成后在该conda环境下却没有该库。本文将说明该问题出现的原因&#xff0c;修复方式和如何正确地在conda环境中使用pip。 问题现象 复现&#xff1a; 新建环…

1-html

一 HTML 初体验 1 HTML 定义 HTML 超文本标记语言——HyperText Markup Language。 超文本是什么&#xff1f;链接标记是什么&#xff1f; 标记也叫标签&#xff0c;带尖括号的文本 2 标签语法 标签成对出现&#xff0c;中间包裹内容<>里面放英文字母&#xff08;标签…

Vim 自定义配色

本文首发于我的个人博客&#xff0c;欢迎点击访问&#xff0c;无广告节面简洁&#xff01; 最近重新开始学习Vim装上了WSL2&#xff0c;但发现Windows Terminal和vim的组合还是有很多问题需要解决的&#xff0c;由其默认的配色在某些状态下根本看不清字体&#xff0c;所以折腾…

小满vue3笔记(含源码解读)

第一章 1.mvvm架构 2.回顾vue2对比vue3 区别&#xff1a; vue2选项式api vue3组合式api 关于这两个的区别&#xff0c;你可以不准确的理解为&#xff0c;选项式api更贴近原生标准html文件结构&#xff1b; 而组合式api就像在html标签中写css&#xff1b;当然做了优化&…

最新大麦网抢票脚本-Python实战

学习时候的一个小例子&#xff0c;python挺有趣的&#xff0c;希望技术可以更进步 我也不多说啥了直接上图 系统:win10 python 版本:3.8.10 需要安装的库:selenium 安装方法: pip install selenium 抢H5版本也写了&#xff0c;但是速度有点慢2…5 就不发了 不如用autojs写感…

前端vue入门(纯代码)15

【16.Vue的过渡与动画】 1.点击切换按钮&#xff1a;实现某一元素的显示/隐藏 Test.vue文件中 <template><div><!-- 点击事件触发后&#xff0c;isShow取反 --><!-- 通过点击按钮让h1标签出现或者消失 --><button click"isShow !isShow&qu…

哈工大计算机网络课程网络层协议详解之:DHCP协议

哈工大计算机网络课程网络层协议详解之&#xff1a;DHCP协议 文章目录 哈工大计算机网络课程网络层协议详解之&#xff1a;DHCP协议如何获得IP地址&#xff1f;硬编码动态主机配置协议-DHCP&#xff1a;&#xff08;Dynamic Host Configuration Protocol&#xff09; 动态主机配…

设计模式篇(Java):前言(UML类图、七大原则)

编写软件过程中&#xff0c;程序员面临着来自耦合性&#xff0c;内聚性以及可维护性&#xff0c;可扩展性&#xff0c;重用性&#xff0c;灵活性等多方面的挑战&#xff0c;设计模式是为了让程序(软件)&#xff0c;具有更好&#xff1a; 代码重用性 (即&#xff1a;相同功能的…

Web自动化测试平台的设计与落地

目录 前言 一、目标和定位 二、平台特点 三、系统架构 四、相关技术栈 五、UI概览 六、待完善部分 总结&#xff1a; 前言 我最初开始接触Web自动化测试的时候&#xff0c;没有直接的领路人&#xff0c;测试行业知识也远不及如今这么丰富和易获取&#xff0c;当时我对于…

Hello算法学习笔记之搜索

一、二分查找 1.从数组中找到target的索引 注意&#xff1a;while条件是< O&#xff08;logn&#xff09; 二分查找并非适用于所有情况&#xff0c;原因如下&#xff1a; 二分查找仅适用于有序数据。若输入数据无序&#xff0c;为了使用二分查找而专门进行排序&#xff…