使用 Spring Boot + MyBatis开发需要注意的事项以及开发模版

前言:

注意,本篇不适用于有相关开发经验的开发者,作为一个在职开发者,我经常在完成从0-1的模块,也就是从数据库表开始到创建实体类,以及dao层,Service层等业务需要添加相关注解,这样就经常忘掉相关注解导致项目启动不起来,这篇博文算是博主在开发中的纪录或者总结吧,对于有相关开发经验的开发者,你可以移步了,本文对你来说,没得一点收获,仅仅就是博主在自己开发过程中的相关总结了。

我们一般进行开发的时候,会要求先设计数据库,我想数据库设计大部分都是上级给你设计好了吧,我相信大部分情况下各位都是采用上级的设计好的数据库,但是也有时候,上级会要你自己设计,但不管是上级设计好数据还是你自己设计数据库,相关实体类,Dao层,Service层,Service实现层,Dao映射层,以及控制层,这几个地方的注解,以及接口稍微出一点问题,你的项目可能就跑不起来相应的模块,甚至他会说,找不到你所调用的方法。

踩过几次坑,但让我记住,我还真不一定每次都记得,故此,在这里记录一下,算是给我自己一个查询错误的机会。

在Java中,我们在Spring Boot框架中通常使用相关注解来标识不用的层级组件,下面和我一起看一下呗:

Mapper层

Mapper层,或者称为Dao层(数据访问层):
@Mapper:标识Mapper接口,用于与数据库进行交互的数据访问层组件。
@Repository:作为通用的注解,也可以用于标识Mapper接口,表示它是一个仓库组件。

@Mapper
@Repository
public interface YourMapper {
    // Mapper方法定义
}

注意:Spring Boot中我们喜欢将@Mapper放到Spring Boot启动类中,如下:
在这里插入图片描述
如果我们没有在Dao层配置@Mapper,那么我们就需要在启动类里边添加@MapperScan避免产生找不到Mapper文件。

Service层

Service层(业务逻辑层):
@Service:标识Service类,用于实现业务逻辑的组件。

@Service
public class YourService implements YouInterface{
    // Service方法实现
}

控制层

@Controller:标识Controller类,用于处理HTTP请求和响应的组件。
@RestController:与@Controller类似,但它还包含了@ResponseBody注解,用于直接返回响应数据。

@Controller
public class YourController {
    // 控制层方法实现
}

或者:

@RestController
@RequestMapping("/**")
public class YourController {
    // 控制层方法实现
}

Mapper层对应的映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.*.YourMapper">

这里强调一下,namespace需要和YouMapper中的Dao层名称必须一样,否则就算你映射上去了,他也找不到对应的Mapper里边的SQL方法

案例

要在MyBatis中插入一个List对象到数据库中,你可以使用批量插入的方式来实现。

DAO

DAO层: 在DAO层,可以定义与数据库交互的方法,并使用MyBatis的注解或XML配置来实现具体的数据操作。

@Mapper
public interface YourMapper {
    void insertList(List<YourObject> list);
}

DAO映射文件

在Mapper XML文件中编写对应的SQL语句:

<insert id="insertList" parameterType="java.util.List">
    INSERT INTO your_table (column1, column2, ...) VALUES
    <foreach collection="list" item="item" separator=",">
        (#{item.property1}, #{item.property2}, ...)
    </foreach>
</insert>

Service接口

public interface YourService {
    // Service方法定义
    void insertList(List<YourObject> list);
}

就一个单一的接口,其他无任何属性添加,没有添加任何注解。它用于定义Service层的方法契约,具体的业务逻辑实现则由对应的Service实现类来完成。

Service实现层

Service层: 在Service层,可以定义业务逻辑的方法,并调用DAO层的方法来实现数据访问和操作。

@Service
public class YourService implements YouServiceInterface{
    @Autowired
    private YourMapper yourMapper;

	//一般我们在做增删改查的时候需要做事务回滚
	@Override
	@Transactional
    public void insertList(List<YourObject> list) {
		List<Object> list = ...; // 前端传递的List<Object>
		for (Object obj : list) {
		    if (obj instanceof YourObject) {
		        YourObject yourObject = (YourObject) obj;
		        List<Object> list1 = yourObject.getList1();
		        // 对list1进行操作
		    }
		}
        yourMapper.insertList(list);
    }
}

YourService类使用@Service注解标识为Service组件,并通过@Autowired注解注入了YourMapper对象。insertList方法调用了YourMapper中的insertList方法来实现批量插入。

我遍历了前端传递的List<Object>,并判断每个元素是否为YourObject类型。如果是,则将其转换为YourObject对象,并通过getList1()方法获取嵌套的List<Object>

insertList(List<YourObject> list)方法在出现异常时回滚事务,你可以使用Spring的事务注解来实现。

具体来说,可以在你的服务类中添加@Transactional注解,这将会将该方法标记为一个事务。当该方法执行时,如果出现异常,事务将会回滚,确保之前的操作都被撤销。

控制层Controller:

@RestController
@RequestMapping("/your-api")
public class YourController {
    @Autowired
    private YourService yourService;

    @PostMapping("/insert-list")
    public ResponseEntity<String> insertList(@RequestBody List<YourObject> list) {
        yourService.insertList(list);
        return ResponseEntity.ok("Insert success");
    }
}

YourController类使用@RestController注解标识为控制器组件,并使用@RequestMapping注解定义了接口的基础路径。YourController类通过@Autowired注解注入了YourService对象。

insertList方法使用@PostMapping注解标识为POST请求,并使用@RequestBody注解将请求体中的JSON数据映射为List对象。insertList方法调用了YourService中的insertList方法来实现批量插入。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用office打开word文档时候提示错误:0x426-0x0的解决方案

在使用office打开word文档时候提示错误&#xff1a;0x426-0x0。如下图&#xff1a; 昨天还用的好好的&#xff0c;怎么今天就不行了&#xff1f;为什么呢&#xff1f; 更多工作中遇到问题见&#xff1a;凯哥BK 这个错误导致office无法启动通常是由于office软件所依赖的服务无…

vue的表单收集案例

Vue的表单收集案例 这只是最基础的表单收集&#xff0c;并未涉及到element-ui。 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>收集表单数据</title><script type"text/javascript" src"../js…

Hago 的 Spark on ACK 实践

作者&#xff1a;华相 Hago 于 2018 年 4 月上线&#xff0c;是欢聚集团旗下的一款多人互动社交明星产品。Hago 融合优质的匹配能力和多样化的垂类场景&#xff0c;提供互动游戏、多人语音、视频直播、 3D 虚拟形象互动等多种社交玩法&#xff0c;致力于为用户打造高效、多样、…

物理模拟重力 斜抛运动计算 抛物线计算

物理模拟重力 斜抛运动计算 抛物线计算 一、介绍二、原理三、实现如下PhysicsUtil.cs 工具类Missile.cs 四、资源分享 一、介绍 模拟Unity原始重力系统进行重写&#xff0c;可是实现发射到指定目标位置并能继续当前力进行自身的弹力与摩擦继续运动 二、原理 将Unity原始不受控…

word2003 open word2007+

Win 7 C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates 还是不行&#xff0c;重装office2003吧&#xff0c;再安装转换插件&#xff0c;但是再高版本好像没转换工具

【Linux】进程管理

ps&#xff1a;报告当前进程快照。top&#xff1a;显示任务。kill&#xff1a;给一个进程发送信号。shutdown&#xff1a;关机或重启系统。 一个程序可以发动另一个程序被表述为一个父进程可以产生一个子进程&#xff0c;内核维护每个进程的信息&#xff0c;以此来保持事情有序…

【新版】软考 - 系统架构设计师(总结笔记)

个人总结学习笔记&#xff0c;仅供参考&#xff01;&#xff01;&#xff01;! →点击 笔者主页&#xff0c;欢迎关注哦&#xff08;互相学习&#xff0c;共同成长&#xff09; 笔记目录 &#x1f4e2;【系统架构设计系列】系统架构设计专业技能 计算机组成与结构操作系统信…

如何快速实现地源热泵远程监控

地源热泵远程监控解决方案 一、项目背景 山东省潍坊市盛世花园小区地源热泵项目是一个先进的供暖与制冷系统&#xff0c;旨在为整个小区提供高效且节能的温控服务。该系统主要由地下管道网络、地源热泵单元以及室内分配系统组成。 针对现有的地源热泵系统的管理和监控问题&a…

1162字符串逆序

一&#xff1a;题目 二.思路分析 1.如果不用递归&#xff0c;可以输入字符串后&#xff0c;再逆序输出&#xff0c;但是题目要求使用递归 2.使用递归&#xff1a; 2.1输入字符&#xff0c;直到输入的字符是‘&#xff01;’&#xff0c;停止输入&#xff0c;否则继续输入&…

Redis数据一致解决方案

文章目录 前言技术积累查询缓存业务流程更新缓存业务流程 更新缓存问题解决方案写在最后 前言 当前的应用服务很多都有着高并发的业务场景&#xff0c;对于高并发的解决方案一般会用到缓存来降低数据库压力&#xff0c;并且还能够提高系统性能减少请求耗时&#xff0c;比如我们…

AndroidStudio无法新建Java工程解决办法

我用的 AS 版本是 Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 以往新建工程都是 New project >> Empty Activity &#xff0c; 有个选择 Java 还是 Kotlin 语言的选项&#xff0c; 之后会默认生成一个 MainActi…

系列三、安装RocketMQ(单机版)

一、安装RocketMQ&#xff08;单机版&#xff09; 1.1、前置准备 通过前面系列一、MQ简介、系列二、RocketMQ简介的文章我们知道RocketMQ是用Java语言编写的&#xff0c;所以在安装RocketMQ之前&#xff0c;需要保证Linux中的JDK是已经安装好了的&#xff0c;要不然无法安装&a…

java流浪动物保护系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web 流浪动物保护系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql…

3.java——继承及拓展(保姆级别教程,万字解析,匠心制作)

三.继承——节省了共有属性和方法的代码&#xff1a;语法 class Student extends Person 1.继承基础 1.继承首先是面向对象中非常强的一种机制&#xff0c;他首先可以复用代码&#xff08;name ,age&#xff09;&#xff0c;让我们的获得了Person全部功能和属性&#xff0c;只…

使用keytool查看Android APK签名

文章目录 一、找到JDK位置二、使用方法2.1 打开windows命令行工具2.2 查看签名 三、如何给APK做系统签名呢? 一、找到JDK位置 安卓AS之后&#xff0c;可选择继续安装JDK&#xff0c;如本文使用amazon版本默认位置&#xff1a;C:\Users\66176.jdks\corretto-1.8.0_342可通过自…

智能优化算法应用:基于北方苍鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于北方苍鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于北方苍鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.北方苍鹰算法4.实验参数设定5.算法结果6.…

数据库之MySQL的介绍

操作系统&#xff1a; windows&#xff1a;win10、win11、win7、windows Server2016 Linux/Unix &#xff1a;红帽&#xff08;RedHat&#xff09;、Bebian、SUSE MacOS Linux系统&#xff1a;CantOS&#xff08;yum、dnf&#xff09;、Ubuntu&#xff08;apt、apt—get&am…

2024 年 22 款顶级免费数据恢复软件比较 [Windows 和 Mac]

适用于 Windows 和 Mac 用户的最佳数据恢复软件下载列表和比较&#xff0c;可快速恢复丢失的数据、已删除的文件、照片或格式化的分区数据&#xff1a; 数据恢复软件是一种从任何存储介质恢复丢失文件的应用程序。它可以恢复由于病毒攻击、硬盘故障或任何其他原因而意外删除或…

机器人创新实验室任务三参考文档

一、JAVA环境配置 需要在Linux里面下载并且安装java。 sudo apt-get install openjdk-17-jre-headless 打开终端并且运行指令&#xff0c;用apt下载安装java。官方用的好像是java11&#xff0c;我安装的是java17。 如果无法定位软件安装包&#xff0c;可以试试更新一下 sudo …

极智一周 | MoE、FlashAttention、PTQ、MI300禁令、H100利润空间、戴口罩检测 And so on

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多技术分享 大家好&#xff0c;我是极智视界&#xff0c;带来本周的 [极智一周]&#xff0c;关键词&#xff1a;MoE、FlashAttention、PTQ、MI300禁令、H100利润空间、戴口罩检测 And so on。 邀您加入我的知识星球「极智…