后端项目操作数据库-中枢组件Service调用Mapper实现增删改查-实例

本文主要是介绍后端项目操作数据库-中枢组件Service调用Mapper实现增删改查-实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接上篇 使用MyBatis配置Mapper实现增删改查

1.Service的基本作用

Service在代码中的的作用是调用Mapper、被Controller调用。是后端项目中非常重要的组件。
用于设计业务流程、业务逻辑,以保障数据的完整性、有效性、安全性。

2. Service使用举例——“添加相册”

在项目的根包下创建pojo.dto.AlbumAddNewDTO类,用于封装业务方法所需的参数:

@Data
public class AlbumAddNewDTO implements Serializable {private String name;private String description;private Integer sort;
}

再在项目的根包下创建service.IAlbumService接口,并在接口添加“添加相册”的抽象方法:

public interface IAlbumService {void addNew(AlbumAddNewDTO albumAddNewDTO);
}

再在项目的根包下创建service.impl.AlbumServiceImpl类,实现以上接口,重写接口中声明的抽象方法,具体的实现,应该是:

package com.luoyang.small.service.impl;import com.luoyang.small.mapper.AlbumMapper;
import com.luoyang.small.pojo.dto.AlbumAddNewDTO;
import com.luoyang.small.pojo.entity.Album;
import com.luoyang.small.service.IAlbumService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** 接口实现** @author luoyang* @Date 2023/12/12*/
// 添加在类上,标记当前类是业务逻辑组件类,用法同@Component
@Service
public class IAlbumServiceImpl implements IAlbumService {/*** 添加在属性上,使得Spring自动装配此属性的值* 添加在构造方法上,使得Spring自动调用此构造方法* 添加在Setter方法上,使得Spring自动调用此方法*/@Autowiredprivate AlbumMapper albumMapper;@Overridepublic void addNew(AlbumAddNewDTO albumAddNewDTO) {//检查相册名称是否占用String name = albumAddNewDTO.getName();int countByName = albumMapper.countByName(name);//如果数据已存在还继续插入,我们这边直接报异常,不添加。if (countByName > 0) {throw new RuntimeException();}//创建Album对象Album album = new Album();//复制属性到albumBeanUtils.copyProperties(albumAddNewDTO, album);//执行插入数据albumMapper.insert(album);}
}
以上实现中 不要忘记两个注解@Service @Autowired

@Service添加在类上,标记当前类是业务逻辑组件类

@Autowired 添加在属性上,使得Spring自动装配此属性的值; 添加在构造方法上,使得Spring自动调用此构造方法; 添加在Setter方法上,使得Spring自动调用此方法

以上实现中 countByName为计数——新增数据前检查是否数据已存在

在实现以上业务之前,需要在Mapper中补充功能,用于检查相册名称是否已经被占用,
这边以查看数据库中相册名是否存在为检查方式,需要执行的SQL语句大致是:

#查看当前相册名数量
select count(*) from pms_album where name=?

AlbumMapper.java接口中添加抽象方法:

/*** 根据相册名称统计相册数据的数量* @param name 相册名称* @return 匹配相册名称的相册数据的数量*/
int countByName(String name);

并在AlbumMapper.xml中配置SQL语句:

<!-- int countByName(String name); -->
<select id="countByName" resultType="int">SELECT count(*) FROM pms_album WHERE name=#{name}
</select>

完成后,在AlbumMapperTests中编写并执行测试:

package com.luoyang.small;import com.luoyang.small.mapper.AlbumMapper;
import com.luoyang.small.pojo.entity.Album;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;/*** @author luoyang* @date 2023/11/28*/
@Slf4j
@SpringBootTest
public class AlbumMapperTests {@AutowiredAlbumMapper mapper;@Testvoid insert() {Album album = new Album();album.setName("测试名称001");album.setDescription("测试简介001l啦啦啦啦啦");album.setSort(100); // 注意:由于MySQL中表设计的限制,此值只能是[0,255]区间内的int rows = mapper.insert(album);System.out.println("插入数据完成,受影响的行数:" + rows);}@Testvoid countByName(){String name = "测试名称001";int count = mapper.countByName(name);log.debug("根据名称【{}】统计梳理完成,结果:{}",name,count);}}

测试检查数据库已有名称的数量:1,表示数据已存在;
如果数据已存在还继续插入,我们这边直接报异常,不添加。
在这里插入图片描述

3.Service调用效果展示——编写测试类

完成后,在src/test/java的根包下创建service.AlbumServiceTests测试类*(其中新建service文件夹,相对于src/main/java就不需要导包了)*
在此类中编写并执行测试,如下:

package com.luoyang.small.service;import com.luoyang.small.pojo.dto.AlbumAddNewDTO;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;/*** @author luoyang* @Date 2023/12/12*/
@Slf4j
@SpringBootTest
public class AlbumServiceTests {//不建议声明为实现类型@AutowiredIAlbumService iAlbumService;@Testvoid addNew() {AlbumAddNewDTO albumAddNewDTO = new AlbumAddNewDTO();albumAddNewDTO.setName("测试名称004");albumAddNewDTO.setDescription("测试简介004啦啦啦啦啦");albumAddNewDTO.setSort(100); // 注意:由于MySQL中表设计的限制,此值只能是[0,255]区间内的try {iAlbumService.addNew(albumAddNewDTO);log.debug("添加相册成功!");} catch (Exception e) {log.debug("添加相册失败,{}", e.getMessage());}}
}

在这里插入图片描述
在这里插入图片描述

声明:部分代码来自有网络,文章只供学习参考
创造价值,乐哉分享!

这篇关于后端项目操作数据库-中枢组件Service调用Mapper实现增删改查-实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/498382

相关文章

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1