SpringBoot+Vue开发记录(六)-- 后端配置mybatis

news2024/11/19 3:40:16

原型图什么的就先不管,后面再写。
本篇文章的主要内容就是springboot通过mybatis操作数据库实现增删改查。
重点是mybatis配置与相关文件数据,以后开新项目忘记了怎么配置的话可以再照着这个搞。
这算是最基础的部分了吧。

文章目录

    • 一,配置pom.xml文件
    • 二、配置application.yml文件
    • 三、新建对应的包
      • 1. 在自己的项目里新建如上的包和目录
      • 2. 后端与数据库产生连接
      • 后端操作数据库功能实现
    • 四、 使用Postman测试接口
    • 五、 结语

一,配置pom.xml文件

先就要往pom.xml文件里添加配置。
好像这个东西是maven里面的,等我待我背背八股再解释这些。

		<!-- MyBatis Starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.0</version>
        </dependency>

        <!-- MySQL Driver -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

先说一下,我还不确定这个对不对,等一会儿看看能不能跑通项目。
你问我这个从哪里来的?
如下:(失败了
在这里插入图片描述
应该复制粘贴这些:

	<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <version>3.2.5</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.32</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>3.0.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>RELEASE</version>
            <scope>test</scope>
        </dependency>

<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-security</artifactId>-->
<!--            <version>3.2.4</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>

二、配置application.yml文件

这个文件的作用大概就是springboot项目的全局配置吧。
application.yaml

server:
  port: 9527

spring:
  datasource:
    url: jdbc:mysql://localhost:3300/questionDataBase?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

三、新建对应的包

我们的项目结构如下:
在这里插入图片描述

1. 在自己的项目里新建如上的包和目录

当包都建好后,就可以开始弄了,我们以Category表为例展示

2. 后端与数据库产生连接

在这里插入图片描述

  1. 新建Caregory类
    这个类要求里面的属性与表中一致
package com.ques.questionSystem.entity;

import lombok.*;
//由于我们已经引入了lombok包,所以我们就不用再写那些繁杂的get,set函数了。
//直接使用以下注解即可
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Category {
    private Integer categoryid;
    private String name;
    private Integer parentCategory;
    private Integer level;
}

  1. 新建CaregoryMapper接口和CaregoryMapper.xml
    这个Mapper接口将会和CaregoryMapper.xml的内容关联

CaregoryMapper类:

package com.ques.questionSystem.mapper;

import com.ques.questionSystem.entity.Category;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface CategoryMapper {
    List<Category> findAll();
    int insert(Category category);
    int delete(Integer id);
    Category getCategoryById(Integer id);
}

CaregoryMapper.xml
xml文件主要就用来往里面塞sql语句了。

<?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">
<!-- 首先这个namespace 的内容就是对应Mapper接口 ,我们得输入正确的位置才可-->
<mapper namespace="com.ques.questionSystem.mapper.CategoryMapper">

	<!-- 接下来的这个resultMap 是我们自定义一个输出类型,一个xml文件里可以写多个,这个在后面的使用中会有显示 -->
    <resultMap type="com.ques.questionSystem.entity.Category" id="CategoryResultMap">
        <result property="categoryid" column="categoryid" jdbcType="INTEGER"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="parentCategory" column="parentCategory" jdbcType="INTEGER"/>
        <result property="level" column="level" jdbcType="INTEGER"/>
    </resultMap>

    <!-- 查询所有   -->
    <!-- 这里就是sql语句了, id里面的内容填对应接口的函数名, resultMap则是我们上面写好了的一种输出 -->
    <select id="findAll" resultMap="CategoryResultMap" >
        select * from category;
    </select>

    <insert id="insert" useGeneratedKeys="true" parameterType="com.ques.questionSystem.entity.Category">
        insert into category(name, parentCategory,level)VALUE (#{name},#{parentCategory},#{level});
    </insert>

    <delete id="delete" parameterType="int">
        delete from category where categoryid = #{id};
    </delete>

    <select id="getCategoryById" parameterType="int" resultMap="CategoryResultMap">
        select * from category where categoryid = #{id};
    </select>

</mapper>

后端操作数据库功能实现

  1. 写对应的Service接口与实现类:
    一般功能都是在Service层里定义实现的
    在这里插入图片描述
    CategoryService接口:
package com.ques.questionSystem.service;

import com.ques.questionSystem.entity.Category;

import java.util.List;
//接口嘛,定义个函数名,不用实现。
public interface CategoryService {
    public List<Category> findAll();
    public int insert(Category category);
    public int delete(Integer id);
    public Category getCategoryById(Integer id);
}

CategoryServiceImpl实现类:

package com.ques.questionSystem.service.impl;

import com.ques.questionSystem.entity.Category;
import com.ques.questionSystem.mapper.CategoryMapper;
import com.ques.questionSystem.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class CategoryServiceImpl implements CategoryService {

    @Autowired
    private CategoryMapper categoryMapper;//自动注入一个Mapper,在接下来的函数中调用这个Mapper

    @Override
    public List<Category> findAll() {
        return categoryMapper.findAll();
    }

    @Override
    public int insert(Category category) {
        return categoryMapper.insert(category);
    }

    @Override
    public int delete(Integer id) {
        return categoryMapper.delete(id);
    }

    @Override
    public Category getCategoryById(Integer id) {
        return categoryMapper.getCategoryById(id);
    }
}

通过以上步骤,这个Service层就实现了。

  1. Controller层实现
    在后端中Controller层的功能大概就是分配路由这些。
    CategoryController类:
package com.ques.questionSystem.controller;

import com.ques.questionSystem.entity.Category;
import com.ques.questionSystem.service.CategoryService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    @GetMapping("/all")
    public List<Category> findAll() {
        return categoryService.findAll();
    }

    @PostMapping("/input")
    public void insert(@RequestParam("name") String name, @RequestParam("parentCategory") Integer parentCategory, @RequestParam("level") Integer level) {
        System.out.println(name+parentCategory+level);
        Category category = new Category();
        category.setName(name);
        category.setParentCategory(parentCategory);
        category.setLevel(level);
        categoryService.insert(category);
    }

    @PostMapping("/delete")
    public void delete(@RequestParam("id") Integer id) {
        categoryService.delete(id);
    }
    @PostMapping("/find")
    public Category getCategoryById(@RequestParam("id") Integer id) {
        return categoryService.getCategoryById(id);
    }
}

四、 使用Postman测试接口

  1. 测试findAll:
    在这里插入图片描述

  2. 测试insert:
    在这里插入图片描述
    在这里插入图片描述

  3. 测试delete:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. 测试getCategoryById:
    在这里插入图片描述
    在这里插入图片描述

完成

五、 结语

看着简单做着就出现了很多问题。
这篇文章是完全版,照着上面来倒不会有什么错。
至此,后端操作数据库就完成了,就是这样。接下来就是其他的扩展。

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

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

相关文章

安全分析[2]之计算机系统安全分析

文章目录 计算机系统结构计算机系统安全风险软件安全漏洞 计算机系统结构 计算机系统安全风险 计算机硬件安全&#xff1a;因设计不当、器件的质量及使用寿命的限制、外界因素等导致的计算机系统硬件出现故障&#xff0c;进而影响到整个系统的安全。特别是如果是CPU出现安全漏…

Docker容器网络互联

默认情况下&#xff1a;所有容器都是以bridge方式链接到Docker的一个虚拟网桥上。 命令 docker network create 创建一个网络 docker network ls 查看所有网络 docker network rm 删除指定网络 docker network prune 清除未使用的网络 docker network connect 使容器加入某个网…

JUC框架(CAS、ATOMIC、AQS)

文章目录 JUC之CASJUC之ATOMICJUC之AQSAQS简介AQS原理 更多相关内容可查看 JUC之CAS **CAS&#xff08;compareAndSwap&#xff09;**也叫比较交换&#xff0c;是一种无锁原子算法&#xff0c;其作用是让**CPU**将内存值更新为新值&#xff0c;但是有个条件&#xff0c;内存值…

Android Compose 八:常用组件 Switch

Switch 切换按钮 val isChecked remember { mutableStateOf(true) }Switch(checked isChecked.value,onCheckedChange {Log.i("text_compose","onCheckedChange>>"it)isChecked.value it})效果 默认颜色 应该对应 主题色 1.1 thumbContent 按钮…

表查询基础【mysql】【表内容 增,删,改,查询】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客MySQL之旅_花果山~程序猿的博客-CSDN博客Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我…

DDR5—新手入门学习(一)【1-5】

目录 1、DDR背景 &#xff08;1&#xff09;SDR SDRAM时代 &#xff1a; &#xff08;2&#xff09;DDR SDRAM的创新 &#xff1a; &#xff08;3&#xff09;DDR技术的演进 &#xff1a; &#xff08;4&#xff09;需求推动&#xff1a; 2、了解内存 &#xff08;1&…

领导VS管理:技术团队掌舵者的双重角色解析

文章目录 引言一、管理1.1 管理的定义1.2 管理的特点1.3 管理的作用 二、领导2.1 领导的定义2.2 领导的特点2.3 领导的作用 三、管理与领导的互补性3.1 互补策略 总结 引言 在科技飞速发展的今天&#xff0c;技术团队作为推动企业创新的核心力量&#xff0c;其管理显得尤为关键…

python command乱码怎么解决

python command乱码怎么解决&#xff1f;具体方法如下&#xff1a; 先引入import sys 再加一句&#xff1a;typesys.getfilesystemencoding() 然后在输出乱码的数据的后面加上“.decode(utf-8).encode(type)”。 比如输入“ss”乱码。 就写成print ss.decode(utf-8).encode(typ…

【Go专家编程——协程】

1 协程的概念 1.1 基本概念 进程是应用程序的启动实例&#xff0c;每个进程都有独立的内存空间&#xff0c;不同进程通过进程间的通信方式来通信线程从属于进程&#xff0c;每个进程至少包含一个线程&#xff0c;线程是CPU调度的基本单元&#xff0c;多个线程之间可以共享进程…

leetcode:计数质数

class Solution { public:// 如果 x 是质数&#xff0c;那么大于 x 的 x 的倍数 2x,3x… 一定不是质数int countPrimes(int n) {vector<int> isPrime(n, 1);int ans 0;for (int i 2; i < n; i) {if (isPrime[i]) {ans 1;if ((long long)i * i < n) {for (int j …

压缩能力登顶 小丸工具箱 V1.0 绿色便携版

平常录制视频或下载保存的视频时长往往都很长&#xff0c;很多时候都想要裁剪、 截取出一些“精华片段”保留下来&#xff0c;而不必保存一整个大型视频那么浪费硬盘空间… 但如今手机或电脑上大多数的视频剪辑软件&#xff0c;切割视频一般都要等待很长时间导出或转换&#…

LBank研究院: DePIN赛道解析|加密精神与Jevons悖论的第三世界

作者&#xff1a;Eva&#xff0c;LBank研究员 *本人谨代表作者观点&#xff0c;不构成任何交易建议。 *本文内容为原创&#xff0c;版权为LBank所有&#xff0c;如需转载请注明作者和出处&#xff0c;否则将追究法律责任。 TLDR: DePIN是对传统老牌硬件的洗牌挑战&#xff…

WWW 2024最佳论文|大型语言模型的机制设计

【摘要】我们研究拍卖机制以支持人工智能生成内容的新兴格式。我们特别研究如何以激励兼容的方式聚合多个法学硕士。在这个问题中&#xff0c;每个代理对随机生成的内容的偏好被描述/编码为 LLM。一个关键动机是为人工智能生成的广告创意设计一种拍卖格式&#xff0c;以结合不同…

兆原数通基于Apache SeaTunnel的探索实践

随着大数据技术的不断发展&#xff0c;数据同步工具在企业中的应用变得愈发重要。为了满足复杂多样的业务需求&#xff0c;找到一款高效、灵活的数据同步工具变得尤为关键。 在这篇文章中&#xff0c;我们将分享兆原数通研发经理李洪军对Apache SeaTunnel的选择、应用及经验。这…

每日一题——博弈论(枚举与暴力)

博弈论 题目描述 运行代码 #include<iostream> #include<vector> using namespace std; int main(){int n;cin >> n;vector<int> d(n,0);for(int i 0;i < n;i){cin >> d[i];}vector<int> in(1000,0);for(int k 1;k<3;k){for(int…

【实战JVM】-基础篇-02-类的声明周期-加载器

【实战JVM】-基础篇-02-类的声明周期-加载器 3 类的生命周期3.1 生命周期的概述3.2 加载阶段3.2.1 查看内存中的对象 3.3 连接阶段3.3.1 验证阶段3.3.1.1 验证是否符合jvm规范3.3.1.2 元信息验证3.3.1.3 验证语义3.3.1.4 符号引用验证 3.3.2 准备阶段3.3.3 解析阶段 3.4 初始化…

从一个时间序列数据中生成一个Markov Transition Field (MTF)

Markov Transition Field&#xff08;马尔科夫转移场&#xff0c;简称MTF&#xff09;是一个用来表示时间序列数据中不同时间点之间状态转移概率的可视化工具。简单来说&#xff0c;它展示了一个时间点上的状态如何可能转移到另一个时间点的状态&#xff0c;这些转移概率是通过…

C语言指针相关知识(第五篇章)(非常详细版)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、sizeof和strlen对比二、数组之间的比较&#xff08;依据strlen和sizeof来呈现&#xff09;&#xff08;一&#xff09;、一维整型数组&#xff08;二&#…

着急联系媒体投稿发表文章有什么好方法?

作为一名曾经的信息宣传员,我深知在紧张的宣传节点上,急于将精心撰写的文章推向更广阔的读者群体,那种紧迫感和焦虑几乎成了常态。记得那段时间,为了能让稿件得到及时有效的曝光,我不得不亲自踏上了一场寻找媒体联系方式的“马拉松”。那时,我手头的资源有限,仅有的几个联系方式…