Java高级 | 【实验五】Spring boot+mybatis操作数据库

news2025/6/7 11:35:22

隶书文章:Java高级 | (二十二)Java常用类库-CSDN博客

系列文章:Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客

                  Java高级 | 【实验二】Springboot 控制器类+相关注解知识-CSDN博客

                  Java高级 | 【实验三】Springboot 静态资源访问-CSDN博客

                  Java高级 | 【实验四】Springboot 获取前端数据与返回Json数据-CSDN博客

目录

一、创建数据库和表

二、创建spring工程

三、添加依赖

四、编写代码

4.1 创建Student实体类

4.2 创建Mapper接口

4.3创建mapper配置文件

4.4 编写Service层

4.5编写Controller层

4.6 配置数据库

4.7启动类配置

4.8运行结果

一、创建数据库和表

在workbench中创建mydb数据库和student表

二、创建spring工程

工程名称为“sp_mybaitis”, 在创建项目时,勾选Spring Web和Lombok。

 本项目需要在”com.example.sp_mybaitis“包下创建controller、entity、mapper、servic四个包。

在resources文件夹中创建mapper文件夹。

三、添加依赖

本实验需要添加两个依赖。一个是MySQL Driver,用于连接MySQL数据库;一个是MyBatis Framework,即mybatis框架。

我们直接在pom.xml中添加如下代码:

<!--添加依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>

注意:添加上述依赖后需要刷新maven。

四、编写代码

4.1 创建Student实体类

      Student类的属性对应student数据库表的字段。Mybatis就是把数据库表的记录映射到Student类的对象中。

package com.example.sp_mybaitis.entity;

import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class Student {
    private int id;
    private String username;
    private String password;
    private String sex;
    private int age;
}

4.2 创建Mapper接口

Mapper接口通常定义操作数据库的方法。本项目定义的操作数据库的接口名称为“StudentMapper”。

package com.example.sp_mybaitis.mapper;
import com.example.sp_mybaitis.entity.Student;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface StudentMapper {
    //返回所有学生实体
    List<Student> queryStudentList();
    //通过id查询student方法
    Student searchStudentById(int id);
    //通过id删除student方法
    int deleteStudentById(int id);
    //通过id增加student方法
    int insertStudent(Student student);
    //通过id修改student方法
    int updateStudent(Student student);
}

4.3创建mapper配置文件

在resources->mapper文件夹中创建一个名为StudentMapper .xml文件。

<?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.example.sp_mybaitis.mapper.StudentMapper">
    <resultMap id="BaseResultMap" type="com.example.sp_mybaitis.entity.Student">
        <result column="id" jdbcType="INTEGER" property="id"/>
        <result column="userName" jdbcType="VARCHAR" property="username"/>
        <result column="passWord" jdbcType="VARCHAR" property="password"/>
        <result column="sex" jdbcType="VARCHAR" property="sex"/>
        <result column="age" jdbcType="INTEGER" property="age"/>
    </resultMap>
    <select id="queryStudentList" resultType="Student">
        SELECT *
        FROM student
    </select>

    <select id="searchStudentById" parameterType="java.lang.Integer" resultType="Student">
        select *
        from student
        where id = #{id}
    </select>
    <delete id="deleteStudentById" parameterType="java.lang.Integer">
        delete
        from student
        where id = #{id}
    </delete>
    <insert id="insertStudent">
        insert into student (id, username, password, sex, age)
        values (#{id}, #{username}, #{password}, #{sex}, #{age})
    </insert>
    <update id="updateStudent">
        update student
        set username=#{username},
            password=#{password},
            sex=#{sex},
            age=#{age}
        where id = #{id}
    </update>
</mapper>

4.4 编写Service层

服务层主要是定义接口以及接口的实现类。先在Servic包中创建包impl,然后创建一个名为“StudentService”的接口。

package com.example.sp_mybaitis.service;
import com.example.sp_mybaitis.entity.Student;
import java.util.List;
public interface StudentService {
    //所有学生实体
    List<Student> queryStudentList();
    //通过id查询student方法
    Student searchStudentById(int id);
    //通过id删除student方法
    int deleteStudentById(int id);
    //通过id增加student方法
    String insertStudent(Student student);
    //通过id修改student方法
    String updateStudent(Student student);
}

在impl包中创建一个名为StudentServiceImpl 的类,该类主要是实现StudentService接口的方法。

package com.example.sp_mybaitis.service.impl;
import com.example.sp_mybaitis.service.StudentService;
import com.example.sp_mybaitis.entity.Student;
import com.example.sp_mybaitis.mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentMapper studentMapper;
    @Override
    public List<Student> queryStudentList()
    {
        return studentMapper.queryStudentList();
    }
    //
    //通过id查找
    @Override
    public Student searchStudentById(int id) {
        return studentMapper.searchStudentById(id);
    }
    //删除
    @Override
    public int deleteStudentById(int id) {
        int result1 = studentMapper.deleteStudentById(id);
        if (result1 == 1) {
            return 1;
        } else {
            return 0;
        }
    }
    //添加
    @Override
    public String insertStudent(Student student)
    {
        int result2=studentMapper.insertStudent(student);
        if(result2==1)
        {
            return "添加成功!";
        }
        else
        {
            return "添加失败!";
        }
    }
    //修改
    @Override
    public String updateStudent(Student student) {
        int result3 = studentMapper.updateStudent(student);
        if (result3 == 1) {
            return "修改成功!";
        } else {
            return "修改失败!";
        }
    }
}

4.5编写Controller层

控制层用于与前端进行交互。在controller包中创建一名为“StudentController”的java类

package com.example.sp_mybaitis.controller;
import com.example.sp_mybaitis.service.StudentService;
import com.example.sp_mybaitis.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("student")
public class StudentController {
    @Autowired
    private StudentService studentService;
    @GetMapping("/query")
    public List<Student> queryStudentList()
    {
        List <Student> students=studentService.queryStudentList();
        return students;
    }
    //
    @RequestMapping("/query/{id}")
    public String searchStudentById(@PathVariable("id") int id)
    {
        Student student=studentService.searchStudentById(id);
        return student.toString();
    }
    @RequestMapping("/delete/{id}")
    public int deleteStudentById(@PathVariable("id") int id)
    {
        return studentService.deleteStudentById(id);
    }
    @RequestMapping("/insert")
    public String insertStudent(Student student){
        return studentService.insertStudent(student);
    }
    @RequestMapping("/update")
    public String updateStudent(Student student)
    {
        return studentService.updateStudent(student);
    }
}

4.6 配置数据库

在application.properties文件中配置数据库等信息。

spring.application.name=sp_mybaitis
spring.datasource.url=jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Shanghai&useSSL=false&userUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#entity
mybatis.type-aliases-package=com.example.sp_mybaitis.entity
#mapper.xml
mybatis.mapper-locations=classpath:mapper/*.xml

4.7启动类配置

在启动类中配置springboot要扫描的包。

package com.example.sp_mybaitis;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.sp_mybaitis.mapper")
public class SpMybaitisApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpMybaitisApplication.class, args);
    }
}

注意: 如果@SpringScan报错,检查pom.xml

<!-- mybatisplus @MapperScan等注解需要的依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-extension</artifactId>
            <version>3.4.3.1</version>
        </dependency>

4.8运行结果

启动项目,在浏览器或postman中测试。

1、测试返回所有学生信息

在浏览器中的测试结果如下图所示:

2、测试增加一个学生信息

在postman中测试结果如下图所示:

 

3、删除一个学生数据

在postman中测试,结果如下:

 

4、修改学生信息

在postman中测试,结果如下:

 

5、按id查询学生信息

测试结果如下所示:

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

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

相关文章

在MATLAB中使用自定义的ROS2消息

简明结论&#xff1a; 无论ROS2节点和MATLAB运行在哪&#xff0c;MATLAB本机都必须拥有自定义消息源码并本地用ros2genmsg生成&#xff0c;才能在Simulink里订阅这些消息。只要你想让MATLAB或Simulink能识别自定义消息&#xff0c;必须把消息包源码(.msg等)拷到本机指定目录&a…

【MATLAB去噪算法】基于ICEEMDAN联合小波阈值去噪算法

ICEEMDAN联合小波阈值去噪算法相关文献 &#xff08;注&#xff1a;目前相关论文较少&#xff0c;应用该套代码可发直接一些水刊&#xff09; 一、CEEMDAN的局限性 模式残留噪声问题&#xff1a;原始CEEMDAN在计算每个IMF时直接对噪声扰动的信号进行模态分解并平均。 后果&a…

XXTEA,XTEA与TEA

TEA、XTEA和XXTEA都是分组加密算法&#xff0c;它们在设计、安全性、性能等方面存在显著区别。以下是它们的主要区别&#xff1a; 密钥长度 TEA&#xff1a;使用128位密钥。 XTEA&#xff1a;通常使用128位或256位密钥。 XXTEA&#xff1a;密钥长度更灵活&#xff0c;可以使用任…

机器人玩转之---嵌入式开发板基础知识到实战选型指南(包含ORIN、RDK X5、Raspberry pi、RK系列等)

1. 基础知识讲解 1.1 什么是嵌入式开发板&#xff1f; 嵌入式开发板是一种专门设计用于嵌入式系统开发的硬件平台&#xff0c;它集成了微处理器、内存、存储、输入输出接口等核心组件于单块印刷电路板上。与传统的PC不同&#xff0c;嵌入式开发板具有体积小、功耗低、成本适中…

腾讯云国际版和国内版账户通用吗?一样吗?为什么?

在当今全球化的数字化时代&#xff0c;云计算服务成为众多企业和个人拓展业务、存储数据的重要选择。腾讯云作为国内领先的云服务提供商&#xff0c;其国际版和国内版备受关注。那么&#xff0c;腾讯云国际版和国内版账户是否通用&#xff1f;它们究竟一样吗&#xff1f;背后又…

OrCAD X Capture CIS设计小诀窍系列第二季--03.如何在Capture中输出带有目录和元器件信息的PDF

背景介绍&#xff1a;我们在进行原理图设计时&#xff0c;经常需要输出PDF来查看或评审&#xff0c;但通过”Print”功能导出的PDF较为简单&#xff0c;只能查看设计视图&#xff1b;而通过使用Ghostscript软件可以输出带有目录和元器件信息的PDF&#xff0c;让设计师可以直接在…

汽车的安全性能测试:试验台铁地板的重要性

汽车的安全性能测试是非常重要的&#xff0c;其中试验台铁地板的设计和材料选择起着至关重要的作用。试验台铁地板是指在进行汽车碰撞、侧翻等试验时&#xff0c;用于支撑汽车底部和提供稳定支撑的重要部件。 在进行汽车碰撞试验时&#xff0c;试验台铁地板的设计和材料需要具…

实践指南:从零开始搭建RAG驱动的智能问答系统

LLM 赋能的最强大的应用之一是复杂的问答 (Q&A) 聊天机器人。这些是可以回答关于特定来源信息问题的应用程序。这些应用程序使用一种称为检索增强生成的技术&#xff0c;或 RAG。本文将展示如何基于 LangChain 构建一个简单的基于非结构化数据文本数据源的问答应用程序。 温…

边缘计算服务器

边缘计算服务器的核心要点解析&#xff0c;综合技术架构、应用场景与部署方案&#xff1a; 一、核心定义与技术特性‌ 本质定位‌ 部署在网络边缘侧的专用计算设备&#xff08;如工厂车间、智慧路灯等&#xff09;&#xff0c;直接处理终端设备&#xff08;传感器、摄像头等…

第R9周:阿尔茨海默病诊断(优化特征选择版)

文章目录 1. 导入数据2. 数据处理2.1 患病占比2.2 相关性分析2.3 年龄与患病探究 3. 特征选择4. 构建数据集4.1 数据集划分与标准化4.2 构建加载 5. 构建模型6. 模型训练6.1 构建训练函数6.2 构建测试函数6.3 设置超参数 7. 模型训练8. 模型评估8.1 结果图 8.2 混淆矩阵9. 总结…

电动螺丝刀-多实体拆图建模案例

多实体建模要注意下面两点&#xff1a; 多实体建模的合并结果一定要谨慎在实际工作中多实体建模是一个非常好的思路&#xff0c;先做产品的整体设计&#xff0c;再将个体零件导出去做局部细节设计 电动螺丝刀模型动图展示 爆炸视图动图展示 案例素材点击此处获取 建模步骤 1. …

当丰收季遇上超导磁测量:粮食产业的科技新征程

麦浪藏光阴&#xff0c;心田种丰年&#xff01;又到了一年中最令人心潮澎湃的粮食丰收季。金色的麦浪随风翻滚&#xff0c;沉甸甸的稻穗谦逊地低垂着&#xff0c;处处洋溢着丰收的喜悦。粮食产业&#xff0c;无疑是国家发展的根基与命脉&#xff0c;是民生稳定的压舱石。在现代…

电子电气架构 --- 什么是功能架构?

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

AudioRelay 0.27.5 手机充当电脑音响

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://pan.xunlei.com/s/VOS4MvfPxrnfS2Zu_YS4egykA1?pwdi2we# 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VOS4MvfPxrnfS2Zu_YS4egykA1?pwdi2we# 【百款黑科技】&#xff1a;https://uc…

NVIDIA Dynamo:数据中心规模的分布式推理服务框架深度解析

NVIDIA Dynamo&#xff1a;数据中心规模的分布式推理服务框架深度解析 摘要 NVIDIA Dynamo是一个革命性的高吞吐量、低延迟推理框架&#xff0c;专为在多节点分布式环境中服务生成式AI和推理模型而设计。本文将深入分析Dynamo的架构设计、核心特性、代码实现以及实际应用示例&…

第十三节:第四部分:集合框架:HashMap、LinkedHashMap、TreeMap

Map集合体系 HashMap集合的底层原理 HashMap集合底层是基于哈希表实现的 LinkedHashMap集合的底层原理 TreeMap集合的底层原理 代码&#xff1a; Student类 package com.itheima.day26_Map_impl;import java.util.Objects;public class Student implements Comparable<Stu…

Spring AI之RAG入门

目录 1. 什么是RAG 2. RAG典型应用场景 3. RAG核心流程 3.1. 检索阶段 3.2. 生成阶段 4. 使用Spring AI实现RAG 4.1. 创建项目 4.2. 配置application.yml 4.3. 安装ElasticSearch和Kibana 4.3.1. 安装并启动ElasticSearch 4.3.2. 验证ElasticSearch是否启动成功 …

应用案例 | 设备分布广, 现场维护难? 宏集Cogent DataHub助力分布式锅炉远程运维, 让现场变“透明”

在日本&#xff0c;能源利用与环保问题再次成为社会关注的焦点。越来越多的工业用户开始寻求更高效、可持续的方式来运营设备、管理能源。而作为一家专注于节能与自动化系统集成的企业&#xff0c;日本大阪的TESS工程公司给出了一个值得借鉴的答案。 01 锅炉远程监控难题如何破…

LINUX 66 FTP 2 ;FTP被动模式;FTP客户服务系统

19&#xff0e; 在vim中将所有 abc 替换为 def&#xff0c;在底行模式下执行©&#xff1f;D A、s/abc/def B、s/abc/def/g C、%s/abc/def D、%s/abc/def/g FTP连接 用户名应该填什么 [rootcode ~]# grep -v ^# /etc/vsftpd/vsftpd.conf anonymous_enableNO local_enab…

网心云 OEC/OECT 笔记(2) 运行RKNN程序

目录 网心云 OEC/OECT 笔记(1) 拆机刷入Armbian固件网心云 OEC/OECT 笔记(2) 运行RKNN程序 RKNN OEC/OEC-Turbo 使用的芯片是 RK3566/RK3568, 这个系列是内建神经网络处理器 NPU 的, 利用 RKNN 可以部署运行 AI 模型利用 NPU 硬件加速模型推理. 要使用 NPU, 首先需要在电脑使…