SpringBoot整合Mybatis并实现数据库增删改查

news2024/11/20 20:17:43

写在前面

Mybatis一个基于Java的持久层框架,它通过XML或注解的方式,将SQL语句和Java方法进行映射,使得开发者可以轻松地进行数据库操作。下面我会演示mybatis的配置与使用并实现数据库的增删改查。

1.准备测试数据

使用mybatis实现对数据库的增删改查之前,我们先创建一个数据库,,然后在数据库中新建一张表。我准备的数据(person表)如下(SQL Server):
在这里插入图片描述

2.创建SpringBoot项目

使用IDEA新建一个springboot项目:
在这里插入图片描述
在创建项目时导入依赖,也可以在项目创建后手动导入:
在这里插入图片描述

3.导入mybatis依赖

如果在创建项目时已导入依赖可以跳过这一步。
pom.xml文件中导入mybatis依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter-test</artifactId>
    <version>3.0.3</version>
    <scope>test</scope>
</dependency>

导入sql server的依赖:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <scope>runtime</scope>
</dependency>

如果想要使用其他版本的mybatis依赖,请前往https://mvnrepository.com/

4.如何使用mybatis

4.1 配置mybatis

4.1.1 配置数据源

application.properties中配置数据库:

spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://localhost:1433;database=数据库名称
spring.datasource.username=sa
spring.security.user.password=123456

也可以在application.yamlapplication.yml文件中配置数据库:

spring:
  datasource:
    driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
    url: jdbc:sqlserver://localhost:1433;database=数据库名称
    username: sa
    password: 123456

4.1.2 相关配置

#配置映射文件路径(使用xml配置文件映射SQL语句时设置),此处的mapper是自己在resources目录下创建的子目录
mybatis.mapper-locations=classpath:/mapper/*.xml

4,2 使用mybatis

4.2.1 创建实体类(entity)

在启动类的所在目录下创建实体类:
在这里插入图片描述
Person类中:

@Data
public class Person {
    //Person类中的字段要与数据库对应
    private int id;
    private String name;
    private int age;
    private String gender;
}

4.2.2 创建mapper

在启动类的所在目录下创建mapper:
在这里插入图片描述
创建PersonMapper对应的xml文件,使用MybatisX插件创建xml文件,这个插件可以在idea的plugins中下载。
PersonMapper文件中将光标放在接口名上按下alt + enter后选择[MybatisX] Generate mapper of xml后如下图选择路径:
在这里插入图片描述
PersonMapper.xml中情况:
在这里插入图片描述

4.2.3 定义查询方法并编写SQL语句

PersonMapper中定义查询所有Person信息的方法:
在这里插入图片描述

① xml形式

在方法名处按下alt + enter后选择Generate statement,在xml文件中自动生成对应的映射语句:
在这里插入图片描述
<select>标签中编写SQL语句:

select * from person
② 注解形式

直接在方法的上面使用@Select注解:

@Select("select * from person")

4.2.4 创建controller并调用mapper

在启动类的所在目录下创建controller:
在这里插入图片描述
PersonController中:

@RestController
public class PersonController {
    @Autowired
    PersonMapper personMapper;
    
    @GetMapping("/allPerson")
    public List<Person> getAllPerson() {
        return personMapper.getAllPerson();
    }
}

4.2.5 在启动类中添加@MapperScan注解

在启动类添加@MapperScan注解可以使容器扫描到mapper:

@MapperScan(basePackages = "com.example.demo.mapper")

4.2.5 启动项目并使用controller

结果如下:
在这里插入图片描述

5.实现数据库的增删改查

5.1 查询

上面演示了获取全部person数据,这里举例通过id查询数据,我们可以模仿这个例子实现其他方式的查询。
定义查询方法并编写SQL语句

//使用@Param("id")接收前端传来的参数
@Select("select * from person where id = #{id}")
Person getPersonById(@Param("id") int id);

调用:

@GetMapping("/byId/{id}")
    public Person getPersonById(@PathVariable("id") int id) {
        return personMapper.getPersonById(id);
    }

结果:
在这里插入图片描述

5.2 新增

定义新增方法并编写SQL语句:

//由于id设置了自增,所以这里不需要传入id
@Insert("insert into person values (#{name},#{age},#{gender})")
void addPerson(Person person);

调用:

@GetMapping("/add")
    public void addPerson(@RequestParam("name") String name, 
                          @RequestParam("age") int age,
                          @RequestParam("gender") String gender) {
        Person person = new Person();
        person.setName(name);
        person.setAge(age);
        person.setGender(gender);
        personMapper.addPerson(person);
    }

使用:
在这里插入图片描述
查询所有person:
在这里插入图片描述

5.3 修改

这里我通过id修改person的信息,我们可以模仿这个例子通过名字来修改person信息,也可以修改person一个或多个字段信息。
定义修改方法并编写SQL语句:

//通过id修改person信息
@Update("update person set name = #{name}, age = #{age}, gender = #{gender} where id = #{id}")
void updatePerson(Person person);

调用:

@GetMapping("/update")
    void updatePerson(@RequestParam("id") int id,
                      @RequestParam("name") String name,
                      @RequestParam("age") int age,
                      @RequestParam("gender") String gender) {
        Person person = new Person();
        person.setId(id);
        person.setName(name);
        person.setAge(age);
        person.setGender(gender);
        personMapper.updatePerson(person);
    } 

使用:
在这里插入图片描述
修改前:
在这里插入图片描述
修改后:
在这里插入图片描述

5.4 删除

这里我通过姓名删除person信息,我们也可以通过其他字段删除person信息
定义删除方法并编写SQL语句:

@Delete("delete from person where name = #{name}")
void deletePersonByName(@Param("name") String name);

调用:

@GetMapping("/del")
    void deletePerson(@RequestParam("name") String name) {
        personMapper.deletePersonByName(name);
    }

使用:
在这里插入图片描述

删除前:
在这里插入图片描述
删除后:
在这里插入图片描述

写在后面

通过springboot整合mybatis,我们不仅可以进行简单的增删改查操作,还可以进行一些更高级的信息查询操作。通过接收前端传回来的信息对数据库进行相应的操作,可以让我们查询数据库更加方便快捷。

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

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

相关文章

Java银系统/超市收银系统/智慧新零售/ERP进销存管理/线上商城/h5/小程序

>>>系统简述&#xff1a; 神点收银系统支持B2B2C多商户模式&#xff0c;系统基于前后端分离的架构&#xff0c;后端采用Java SpringBoot Mysql Mybatis Plus&#xff0c;前端基于当前流行的Uniapp、Element UI&#xff0c;支持小程序、h5。架构包含&#xff1a;会员端…

AI智能写作工具,AI写作助手大全

随着人工智能技术的快速发展&#xff0c;AI智能写作工具助手已成为学术研究、内容创作和商业文案等领域的重要辅助工具。它们不仅能够提高写作效率&#xff0c;还能激发创意灵感&#xff0c;为各行各业的专业人士提供了强大的支持。下面小编将为大家全面介绍目前市场上备受瞩目…

Mac(M1芯片)安装多个jdk,Mac卸载jdk

1.jdk下载 oracle官方链接&#xff1a;oracle官方下载链接 2.安装 直接下一步&#xff0c;下一步就行 3.查看是否安装成功 出现下图内容表示安装成功。 4.配置环境变量 open -e .bash_profile 路径建议复制过去 #刷新环境变量 source ~/.bash_profile 5.切换方法 6.jdk…

HTML+CSS 彩色浮雕按钮

效果演示 实现了一个彩色按钮特效&#xff0c;包括一个按钮&#xff08;button&#xff09;和一个前景色&#xff08;::before&#xff09;。按钮具有四种不同的颜色&#xff0c;当鼠标悬停在按钮上时&#xff0c;前景色会出现渐变效果&#xff0c;并且按钮的颜色、文本阴影和边…

【研究】AI大模型需要什么样的硬件?

关注AI大模型 x 硬件的两条思路 从22年11月OpenAI推出ChatGPT至今&#xff0c;我们看到Chatbot应用的能力不断增强&#xff0c;从最初的文字问答&#xff0c;迅速向具有自主记忆、推理、规划和执行的全自动能力的AI Agent发展。我们认为端侧智能是大模型发展的重要分支。建议投…

昇思25天学习打卡营第二天|张量

张量 Tensor 张量&#xff08;Tensor&#xff09;是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数&#xff0c;这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 &#x1d45b;&#x1d45b; 维空间内&#xff0c;有  &#x1…

北尔Beijer软件iXDeveloper2触摸屏和使用说明手侧

北尔Beijer软件iXDeveloper2触摸屏和使用说明手侧

Python笔记 文件的写,追加,备份操作

一、文件的写操作 案例演示&#xff1a; # 1.打开文件 f open(python.txt,w)# 2.文件写入 f.write(hello world)# 3.内容刷新 f.flush() 注意&#xff1a; 直接调用write&#xff0c;内容并为真正的写入文件&#xff0c;二十会积攒在程序的内存中&#xff0c;称之为缓冲区…

SpringBoot控制反转和依赖注入

目录 一、内聚和耦合 二、分层解耦 三、具体实现 四、bean的组件扫描 五、bean注入 一、内聚和耦合 在了解分层解耦的概念之前我们我们要去先了解一下内聚和耦合。内聚&#xff1a;通常将的是软件中各个模块之间的功能联系。耦合衡量软件各个模块之间的依赖、关联的程度。一…

Lua网站开发之文件表单上传

这个代码示例演示如何上传文件或图片&#xff0c;获取上传信息及保存文件到本地。 local fw require("fastweb") local request require("fastweb.request") local response require("fastweb.response") local cjson require("cjson&q…

30-33、SpringBoot项目部署\属性配置方式\多环境开发(一个文件)\多环境分组(多个文件)

1、打包插件:和springboot的版本保持一致 根pom <build><plugins><!--打包插件--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.1.3</versi…

期末复习题中的问题

一、编程中&#xff08;包括函数&#xff09;的问题 1. malloc 头文件是stdlib.h 二、第二次写复习题的不会的 三、程序填空 总结&#xff1a; 删除节点m >>>>要有一个指针来遍历找到这个m >>>> 用另一个指针指向这个指针的下一 个 >>&…

【机器参数】安装适合的nvidia驱动

背景&#xff1a;我现在nvidia-smi没有显示&#xff0c;我的目标是让nvidia-smi正常显示 参考&#xff1a; nchttps://www.cnblogs.com/carle-09/p/11504544.html 可能是驱动版本不对&#xff0c;所以我重新去nvidia官网下载了驱动。 Official Drivers | NVIDIA 得到了NVID…

线性代数、矩阵计算

一、线性代数 1、对于向量&#xff0c;若a是标量&#xff0c;为a的绝对值乘以b的向量长度。 2、点乘 3、范数&#xff1a;向量或者矩阵的长度 L1范数&#xff1a;&#xff08;对向量&#xff09;每个元素的绝对值求和 L2范数&#xff1a;&#xff08;对向量&#xff09;torch.…

Cortex-M Fault

Cortex-M CPU 会在系统发生故障时引发异常。非法内存写入和读取、访问未通电的外设、执行无效指令、除以零以及其他问题都可能导致此类异常。通常在所有情况下都会引发 HardFault 异常。对于某些故障&#xff0c;可以启用不同的异常来专门处理这些情况。 Cortex-M 故障异常 …

Unity数据持久化3——Json

概述 基础知识 Json文件格式 Json基本语法 练习 可以搜索&#xff1a;Json在线&#xff0c;复制代码进去解析是否写错了。 Excel转Json C#读取存储Json文件 JsonUtility using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine;[Sy…

PCM、WAV,立体声,单声道,正弦波等音频素材

1&#xff09;PCM、WAV音频素材&#xff0c;分享给将要学习或者正在学习audio开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 常用的Audio PCM WAV不同采样率&#xff0c;不同采样深度&#…

Mac安装多版本node

Mac下使用n模块去安装多个指定版本的Node.js&#xff0c;并使用命令随时切换。 node中的n模块是&#xff0c;node专门用来管理node版本的模块&#xff0c;可以进行node版本的切换&#xff0c;下载&#xff0c;安装。 1.安装n npm install -g n 2.查看版本 n --version 3.展…

sql:between and日期毫秒精度过多导致的查询bug

复现 一般情况下&#xff0c;前端传的日期值大多都是yyyy-MM-dd HH:mm:ss(标准格式)&#xff0c;比如2024-06-25 10:49:50&#xff0c;但是在测试环境&#xff0c;测试人员测出了一个带毫秒的日期&#xff1a;比如2024-06-25 10:49:50.9999999 这种情况下会出现查询bug SELEC…

《昇思25天学习打卡营第2天 | 张量 Tensor》

《昇思25天学习打卡营第2天 | 张量 Tensor》 《昇思25天学习打卡营第2天 | 张量 Tensor》 《昇思25天学习打卡营第2天 | 张量 Tensor》什么是张量&#xff08;Tensor&#xff09;张量的创建方式根据数据直接生成从NumPy数组生成使用init初始化器构造张量继承另一个张量的属性&a…