SSMP整合案例(3) 创建数据层并在测试类中运行数据库增删查改操作

news2024/11/24 17:51:04

上文 SSMP整合案例(2) Spring Boot整合Lombok简化实体类开发我们已经开发完了实体类
我们就可以做数据层了
目前来讲 数据层技术 使用了最大的自然是 MyBatis 但其实MyBatis-Plus在国内很多中小企业还是使用的挺多的

这次 我们主要是通过MyBatis-Plus和Druid来做这件事情
这两个工具的坐标呢 我们之前是已经导进去了
在这里插入图片描述
然后 找到项目配置文件 application.yml
添加如下数据库配置代码

spring:
  datasource:
    druid:
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test
      username: root
      password: root
mybatis-plus:
  global-config:
    db-config:
      id-type: auto

在这里插入图片描述

这里这个不要直接复制 首先 前面的没什么 但 URL 我只想的是本地 3306端口 如果你没设置过 一般都是一样的 然后 指定后面的 下面的test数据库
类型 我们设置的 MySql
然后 下面 用户名和密码 因为我一直没动过 所以都是默认的 root
下面的配置 则是在告诉他 我们的id使用数据自增的特性

然后 做数据层接口
在启动类同目录下 创建 dao包
在这里插入图片描述
下面创建一个接口 叫 bookDao
参考代码如下

package com.example.bookconfig.dao;

import com.example.bookconfig.domain.book;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface bookDao {
    @Select("select * from book where id = #{id}")
    book getById(Integer id);
}

我们想用 @Mapper 声明MyBatis
然后 写了一个函数 用Select挂了sql上去 函数接收一个 参数id 数字类型 sql的意思大体就是通过id寻找对应的一条数据

但是 现在我们数据库的book显然没有数据啊 那么 我们就来给他加一条 还是打开MySql管理工具
进入查询 输入并运行sql

INSERT INTO `book`(`type`,`name`,`description`)
VALUES(1,"小猫猫","超级可爱");

在这里插入图片描述
这就是个添加语句 因为 id是一个主键自动增长的字段 我们不用管 所以 type 1 name 小猫猫 description 超级可爱
运行成功后 我们再次查看book表
可以看到 这条数据就加进去了
在这里插入图片描述
然后 我们来到测试类
在这里插入图片描述

编写代码如下

package com.example.bookconfig;

import com.example.bookconfig.dao.bookDao;
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 bookDao bookDao;

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

这里 调用了 我们刚刚写的bookDao接口中的getById方法查询了id等于1的数据
我们右键运行测试类
在这里插入图片描述
运行结果如下
在这里插入图片描述
也是成功帮我找到了这条数据

当然 我们这里只是试一下能不能跑起来 Mp不会这么开发 他让我自己这样写sql太麻烦了 很多东西它都帮你封装好了
我们直接将bookDao接口 的代码修改如下

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.bookconfig.domain.book;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface bookDao extends BaseMapper<book> {

}

我们自己通过继承BaseMapper接口 来使用其中的函数 然后 泛型为 操作book实体类 你不指定实体类 你肯定要告诉他你要操作哪个表 哪个类对吧
他就会通过你给他的类 去寻找同名的表

这里 我们按住Ctrl 鼠标点进去看一下
在这里插入图片描述
这个接口中就自带这么多操作
在这里插入图片描述
我们测试类直接将getById 改成 selectById就好了
在这里插入图片描述
运行结果如下
在这里插入图片描述
很明显 根据id查询就OK了 然后 我们来测试一下其他几个方法
先是添加
我们在测试类编写如下代码

package com.example.bookconfig;

import com.example.bookconfig.dao.bookDao;
import com.example.bookconfig.domain.book;
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 bookDao bookDao;

    @Test
    void contextLoads() {
        book book = new book();
        book.setType(0);
        book.setName("母猪的产后护理");
        book.setDescription("深度研究母猪产后护理的高级哲学以及母猪的历史价值");
        bookDao.insert(book);
    }
}

简单说 我们定义了一个book对象 通过set方法 将他的几个值都给了内容
还是那句话 id不需要管 因为是有自增属性的
然后 通过BaseMapper提供的insert方法将对象的内容插入到数据库中去 我们运行完代码查看数据库

这条数据就成功进来了
在这里插入图片描述
然后 我们在测试类中编写如下代码

book book = new book();
book.setId(1);
book.setType(0);
book.setName("java从入门到放弃");
book.setDescription("讲述当代打工人从入学被坑到弃坑投奔其他行业的悲惨经历");
bookDao.updateById(book);

BaseMapper更改数据的方式叫updateById
因为他要根据id做更改 所以 我们还是要用set将id赋值 告诉他改第几条
然后 我们记好数据库中 id为1数据的内容
在这里插入图片描述
我们运行代码 再去数据库中查看book表 数据如下 很明显已经修改成功了
在这里插入图片描述
然后 我们编写代码如下

bookDao.deleteById(2);

没错 根据id删除的方法叫 deleteById
我们将id为2 就是我们刚加进去的数据给他干掉
运行代码然后 去数据库刷新 book表
很明显 第二条数据就被干掉了
在这里插入图片描述
不过这样 不太方便我们看查询全部数据的效果 我们重新执行一次添加的代码将数据加回来
在这里插入图片描述
这样就会好一点

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

System.out.println(bookDao.selectList(null));

selectList是用来查询全部的方法 但是 这个要写条件 但我们就想查全部 那就直接 传个null给他
运行结果如下
在这里插入图片描述
可以看到 他是查询到了全部的数据

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

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

相关文章

5款界面简洁无广告的轻量级小软件

今天的主题是简洁&#xff0c;轻便&#xff0c;都是轻量级的小软件&#xff0c;界面都是非常简洁&#xff0c;而且无广告的。 文件同步——Syncthing Syncthing是一款用于同步和分享文件的工具。它可以让你在不同的设备上同步你的文件夹&#xff0c;并提供多种功能和选项来设…

鱼眼相机成像模型以及基于OpenCV标定鱼眼镜头(C++)

opencv系列 文章目录 opencv系列一、鱼眼镜头模型二、投影函数等距投影模型等立体角投影模型正交投影模型体视投影模型 三、OpenCV中的鱼眼相机模型四、标定&#xff08;C&#xff09;实现使用的函数采集标定图像标定代码标定结果 一、鱼眼镜头模型 鱼眼镜头一般是由十几个不同…

新能源充电桩4G无线物联网解决方案|4G路由器ZR2000

日常生活中新能源汽车已随处可见&#xff0c;新能源也逐渐普遍&#xff0c;绿色出行、低碳生活的环保概念也随着科普深入人心&#xff0c;新能源汽车必备的充电桩行业随之崛起&#xff0c;为保证用户体验及运营管理&#xff0c;充电桩需要通过网络实现数据传输、远程监控、位置…

19-递归的理解、场景

一、递归 &#x1f32d;&#x1f32d;&#x1f32d;在函数内部&#xff0c;可以调用其他函数。如果一个函数在内部调用自身本身&#xff0c;这个函数就是递归函数 核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解 一般来说&#xff0c;递归…

Azure-FunctionApp入门实战

介绍 FuntionApp 是微软云推出的一款serverless产品服务&#xff0c;作为coder可以无需关心程序部署所需的infra信息&#xff0c;只需要focus自己的业务代码实现即可 使用场景 是不是所有的业务都可以使用serverless产品呢&#xff1f;理论上是可以的&#xff0c;但是从实际…

初识mysql数据库之mysql数据库安装(centos)

目录 一、卸载不需要的环境 二、安装mysql yum源 三、安装mysql 四、登录mysql 1. 直接登录 2. 设置免密码登录 五、配置my.cnf 六、mysql登录时的一些选项介绍 一、卸载不需要的环境 要注意&#xff0c;在安装mysql数据库时&#xff0c;最好将用户切换为root&#xf…

Maven配置仓库、阿里云镜像、环境变量(史上最全最详细)

Maven配置仓库、阿里云镜像、环境变量&#xff08;史上最全最详细&#xff09; 一、前言 为了解决在maven的pom.xml文件中填入了某个依赖以后&#xff0c;maven却一直在转圈&#xff0c;非常慢的情况&#xff0c;我们需要进行配置阿里云镜像&#xff0c;这样会提升开发速度。…

Yolov5/Yolov7优化:引入Soft-NMS,提升密集遮挡场景检测精度

1.Soft-NMS介绍 论文地址:https://arxiv.org/pdf/1704.04503.pdf NMS需要优化的参数: IoU 的阈值是一个可优化的参数,一般范围为0~0.5,可以使用交叉验证来选择最优的参数。 R-CNN会从一张图片中找出n个可能是物体的矩形框,然后为每个矩形框为做类别分类概率: 就…

解密车载SOA架构原理,构建汽车通信的核心技术

车载SOA架构原理 车载SOA架构&#xff08;Service-Oriented Architecture&#xff0c;面向服务的架构&#xff09;是一种设计思想&#xff0c;旨在构建可扩展、灵活和可维护的车载系统。以下是车载SOA架构的一些原理和特点&#xff1a; 服务导向&#xff1a;车载SOA架构将车载…

探索ChatGPT:了解语言模型在对话系统中的应用

第一章&#xff1a;引言 在当今数字化时代&#xff0c;人工智能技术的迅猛发展使得对话系统成为一个备受关注的领域。随着语言模型的进步&#xff0c;像ChatGPT这样的模型正在改变我们与计算机进行交流的方式。本文将探索ChatGPT作为一种语言模型在对话系统中的应用&#xff0…

数据结构——顺序表(万字讲解)

单向链表&#xff08;又名单链表、线性链表&#xff09;是链表的一种&#xff0c;其特点是链表的链接方向是单向的&#xff0c;对链表的访问要通过从头部开始&#xff0c;依序往下读取。 //单链表的打印 void SLTPrint(SLTNode* phead) {SLTNode* cur phead;while (cur){pri…

python:使用Scikit-image库对单波段遥感图像做纹理特征提取(texture)

作者:CSDN @ _养乐多_ 本文将介绍使用Scikit-image库对单波段遥感图像做纹理特征提取的代码。包括:计算灰度共生矩阵(greycomatrix),计算局部二值模式(LBP)特征,计算方向梯度直方图(HOG)特征,使用Gabor滤波器提取纹理特征,计算图像纹理能量,在不同尺度上计算图像…

Android问题笔记-集成AndroidUSBCamera开源框架出现 “libjpeg-turbo1500.so“ not found

点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例点击跳转>软考全系列 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&…

【干货】Android系统定制基础篇:第十五部分(Android支持鼠标右键返回、GPIO 控制方案、属性标识USB摄像头的VID与PID)

1、修改 frameworks/native/services/inputflinger/InputReader.cpp 如下&#xff1a; diff --git a/frameworks/native/services/inputflinger/InputReader.cpp b/frameworks/native/services/inputflinger/Inp index 7207a83..2721800 100755 --- a/frameworks/native/servi…

数字图像处理 基于matlab、opencv计算图像的梯度方向和梯度幅值

一、图像的梯度 1、简述 图像可以被视为标量场(即二维函数)。 通过微分将标量场转换为矢量场。 梯度是一个向量,描述了在x或y方向上移动时,图像变化的速度。我们使用导数来回答这样的问题,图像梯度的大小告诉图像变化的速度,而梯度的方向告诉图像变化最…

两轮车造爆款,爱玛的时尚战略胜算几何?

市场越卷&#xff0c;爆款的意义越大。 电动车行业就是这样&#xff08;本文仅指两轮电动车&#xff0c;如电动自行车、电动摩托车等出行工具&#xff09;&#xff0c;在CR2>45%、CR8>80%的市场格局下&#xff0c;行业竞争早已进入巷战阶段。 对头部的几个品牌&#xf…

leetcode 2090. K Radius Subarray Averages(半径为k的子数组的平均)

k半径长度的子数组表示以数组下标 i 为中心&#xff0c;[i-k, ik]范围内的子数组。 返回和数组nums一样长度的数组res&#xff0c;res[i] [i-k, ik]范围内的元素和 / 元素个数2k1 如果 i-k 或者 ik 超出了数组范围&#xff0c;res[i] -1. 思路&#xff1a; 如果[i - k, ik]…

荔枝集团出席扬帆出海PAGC 探讨AI在音频场景落地技术

近年来&#xff0c;中国企业的身影正不断活跃在全球商业版图上&#xff0c;无论是新兴技术的运用还是创新模式的尝试&#xff0c;其全球化的步履不停。近日,由扬帆出海主办的 2023产品与增长大会(简称PAGC)在广州广交会展馆召开&#xff0c;共同探索未来出海趋势和机遇&#xf…

6月20日作业

我实现的功能&#xff0c;执行一次应用程序led灯 亮&#xff0c;再次执行应用程序led灯灭。 内核模块&#xff1a; #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h&…

中职网络搭建(服务器)—Linux LVM(标准答案)

题目要求如下 使用fdisk-l查看磁盘信息 我们添加的磁盘分别是sdb和sdc Fdisk /dev/sdb 依次输入n,p,1&#xff0c;回车,2G &#xff08;新建2G的主分区&#xff09; 依次输入n,e,2&#xff0c;回车&#xff0c;回车&#xff08;使用剩余的全部空间建立扩展分区&#xff09; 依…