SpringBoot + Mybatis 快速入门实战

一.创建Spring项目

出现报错的话,换一个jdk创建,一般java 8
在这里插入图片描述
选择Spring Web
在这里插入图片描述
测试一下
在这里插入图片描述
默认端口8080,但是Vue也需要8080,因此,后端设置一个端口3000
在这里插入图片描述
再次测试,成功
在这里插入图片描述
此处,如何kill一个端口占用

1.找到135端口的进程
netstat -ano | findstr "135"
2.杀死pid76号的进程
taskkill /pid 76 /f

二.Spring Boot + Mybatis整合开发

A:项目结构

在这里插入图片描述

在这里插入图片描述

B:具体流程实现

1.pom.xml中添加依赖

  <!-- 1.实现对数据源的装配JDBC(必须) -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
      <version>3.0.4</version>
  </dependency>
  <!-- 2.集成mybatis所有相关的(必须) -->
  <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.2.2</version>
  </dependency>
  <!--3.JDBC驱动(必须)-->
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.30</version>
  </dependency>
  <!-- 4.注解(必须) -->
  <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.22</version>
      <scope>provided</scope>
  </dependency>
  <!-- Test  -->
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
  </dependency>

(可以省略)

 <!--资源插件: 处理src/main/java目录中的xml-->
 <resources>
     <resource>
         <directory>src/main/java</directory><!--所在的目录-->
         <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
             <include>**/*.properties</include>
             <include>**/*.xml</include>
             <include>**/*.yml</include>
         </includes>
         <filtering>false</filtering>
     </resource>
 </resources>

2.数据库相关

2.1先使用navcat创建创建一个数据库,Idea进行链接

在这里插入图片描述

2.2修改application.properties文件

修改为yml文件

server:
  port: 3000

spring:
  datasource:
    username: root
    password: XXXXX
    url: jdbc:mysql://localhost:3306/dms?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  # mybatis  sql语句文件[resources/mybatis下的xml文件]
  mapper-locations: classpath:mybatis/*.xml
  # 实体别名
  type-aliases-package: com.example.test.pojo

#show Sql
logging:
    level:
      com.example.test: debug

3.解决跨域问题

package com.coursework.backend.config;

import jakarta.servlet.*;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.context.annotation.Configuration;

import java.io.IOException;

@Configuration
public class CorsConfig implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        HttpServletRequest request = (HttpServletRequest) req;

        String origin = request.getHeader("Origin");
        if(origin!=null) {
            response.setHeader("Access-Control-Allow-Origin", origin);
        }

        String headers = request.getHeader("Access-Control-Request-Headers");
        if(headers!=null) {
            response.setHeader("Access-Control-Allow-Headers", headers);
            response.setHeader("Access-Control-Expose-Headers", headers);
        }

        response.setHeader("Access-Control-Allow-Methods", "*");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");

        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) {

    }

    @Override
    public void destroy() {
    }
}

4.各种层的实现+逻辑分析

在这里插入图片描述

1.controller:
	@RestController
	@RequestMapping("/login")
2.mapper
	@Mapper
3.pojo
	@Data
	@AllArgsConstructor
	@NoArgsConstructor
	@ToString		
4.service
	无
5.serviceimpl
	@Service		
4.1 pojo层
package com.coursework.backend.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class SystemAdminUser {
    private Integer id ;
    private String username;
    private String password;
}
4.2 mapper层
package com.coursework.backend.mapper;

import com.coursework.backend.pojo.SystemAdminUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

@Mapper
public interface SystemAdminUserMapper {
    SystemAdminUser systemAdminUser(@Param("myusername") String username,
                                    @Param("mypassword") String password);
}

4.3 resource/mybatis层
<?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.coursework.backend.mapper.SystemAdminUserMapper">
    <!--
   dao接口是一个简单类型的参数
   mapper文件,获取这个参数值,使用#{任意字符}
    -->
    <select id="systemAdminUser" resultType="SystemAdminUser">
        select * from systemadmin where username = #{myusername} and password = #{mypassword}
    </select>
</mapper>

4.4 service层
package com.coursework.backend.service;

import java.util.Map;

public interface LoginService {
    Map<String,String> login_systemadmin(String username, String password);
}

4.5 serviceimpl层
package com.coursework.backend.service.impl;

import com.coursework.backend.mapper.SystemAdminUserMapper;
import com.coursework.backend.pojo.SystemAdminUser;
import com.coursework.backend.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class LoginServiceImpl implements LoginService {
    @Autowired
    private SystemAdminUserMapper systemAdminUserMapper ;
    //系统管理员
    @Override
    public Map<String, String> login_systemadmin(String username, String password)
    {
        Map<String,String> map = new HashMap<>();
        SystemAdminUser sau = systemAdminUserMapper .systemAdminUser(username,password);
        if(sau==null){
            map.put("message","账号或密码错误");
        } else {
            map.put("message", "success");
        }
        return map;
    }
}

4.6 controller层
package com.coursework.backend.controller;


import com.coursework.backend.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
@RequestMapping("/login")
public class LoginController {
    @Autowired
    private LoginService loginService;

    //系统用户登录验证
    @RequestMapping("/systemadmin")
    public Map<String,String> login(@RequestParam Map<String, String> map)
    {
        String username = map.get("username");
        String password = map.get("password");
        return loginService.login_systemadmin(username,password);
    }
}

4.7前端请求即可

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

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

相关文章

Spring Cloud + Vue前后端分离-第14章 项目优化

源代码在GitHub - 629y/course: Spring Cloud Vue前后端分离-在线课程 Spring Cloud Vue前后端分离-第14章 项目优化 14-1 项目初始化 1.增加readme.md&#xff0c;添加项目介绍 2.修改初始化sql README.md readme.md是用来写一些项目描述信息&#xff0c;git远程仓库可…

数字图像处理(实践篇)三十六 OpenCV-Python 使用ORB和BFmatcher对两个输入图像的关键点进行匹配实践

目录 一 涉及的函数 二 实践 ORB(Oriented FAST and Rotated BRIEF)是一种特征点检测和描述算法,它结合了FAST关键点检测和BRIEF描述子。ORB算法具有以下优势: ①实时性:能够在实时应用中进行快速的特征点检测和描述。 ②

SpringBoot,TDengine时序数据库,实现物联网,车联网大批量数据更新最佳实践。

简介 TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台&#xff0c;它能安全高效地将大量设备、数据采集器每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发&#xff0c;对业务运行状态进行实时监测、预警&#xff0c;提供实时的商业洞察。其…

【C/C++】02_希尔排序

希尔排序虽然是直接插入排序的升级版本&#xff0c;和插入排序有着相同的特性&#xff0c;即原始数组有序度越高则算法的时间复杂度越低&#xff08;预排序机制&#xff09;&#xff0c;但是是不稳定排序算法。 为了降低算法的时间复杂度&#xff0c;所以我们需要在排序之前尽…

数据结构OJ题——二叉树前序、中序遍历非递归实现(Java版)

二叉树前序、中序遍历非递归实现 前序非递归遍历实现中序非递归遍历实现 前序非递归遍历实现 题目&#xff1a; 二叉树前序遍历非递归实现 总体思路&#xff1a;用非递归的方式模拟递归遍历。 以下图为例&#xff1a; 图示详解&#xff1a; 代码实现&#xff1a; /*** Defi…

promethues

1、定义&#xff1a;promethues是一个开源的系统监控以及报警系统&#xff0c;整合zabbix的功能&#xff08;监控系统、网络、设备&#xff09;&#xff0c;promethues可以兼容网络、设备、容器监控、告警系统。因为其与k8s是一个项目基金开发出来的产品&#xff0c;天生匹配k8…

汽车网络安全管理体系框架与评价-汽车网络安全管理体系评价

当前 &#xff0c; 随若汽车联网产品渗透率、 智能传感设备搭载率的提升&#xff0c; 以及汽车与通信、互联网等行业的融合创新发展&#xff0c; 汽车行业面临愈发严峻的网络安全风险&#xff0c; 对消费者人身财产安全、 社会安全乃至国家安全产生威胁&#xff0c; 是产业发展…

【Spark系列1】DAG中Stage和Task的划分全流程

一、整体流程 每个Aciton操作会创建一个JOB&#xff0c;JOB会提交给DAGScheduler&#xff0c;DAGScheduler根据RDD依赖的关系划分为多个Stage&#xff0c;每个Stage又会创建多个TaskSet&#xff0c;每个TaskSet包含多个Task&#xff0c;这个Task就是每个分区的并行计算的任务。…

头戴式耳机哪个牌子音质好?2024音质超好的百元头戴式耳机品牌推荐

在当今数字化的时代&#xff0c;音乐已成为我们生活中不可或缺的一部分&#xff0c;而头戴式耳机因其优质的音效和舒适的佩戴感&#xff0c;成为了许多音乐爱好者的首选&#xff0c;在众多品牌中&#xff0c;究竟哪个牌子的头戴式耳机音质最好呢&#xff1f;今天我就来给大家推…

echarts坐标轴文字样式

https://echarts.apache.org/zh/option.html#xAxis.nameTextStyle xAxis. nameTextStyle、 yAxis: {type: value,// max: -0.15,name: 沉降累计值/mm,nameTextStyle: {padding: [0, 0, 0, 10],color: #93B8E2,fontSize: 12,fontFamily: Alibaba-PuHuiTi-R},splitLine: {show:…

procmethues 二进制安装

pormethues是一个开源的系统监控以及报警系统。整合zabbix的功能&#xff0c;系统&#xff0c;网络&#xff0c;设备。 procmeteus可以兼容网络&#xff0c;设备。容器监控。告警系统。因为他和k8s是一个项目开发的产品&#xff0c;天生匹配k8s的原生系统。容器化和云原生服务…

【Java基础】JVM关闭回调函数(ShutdownHook)的应用场景

文章目录 一.ShutdownHook介绍二.ShutdownHook被调用场景三.ShutdownHook如何使用四.ShutdownHook实践 一.ShutdownHook介绍 ShutdownHook就是一个简单的 已初始化 但是 未启动 的 线程 。当虚拟机开始关闭时&#xff0c;它将会调用所有已注册ShutdownHook的回调函数&#xff0…

Gnuplot安装与配置

安装默认选项&#xff0c;下一步配置环境变量 找到系统环境变量&#xff0c;找到PATH 新建 浏览 将bin目录加进去 如图 再按winR&#xff0c;输入cmd打开终端&#xff0c;输入gnuplot&#xff0c;如果提示以下信息就可以绘图 如果要在Visual Studio中结合代码使用&#xff0c;需…

【局部自动数据增强】YOCO:将图片一分为二,各自增强后拼合为一

【自动数据增强】YOCO&#xff1a;将图片一分为二&#xff0c;各自增强后拼合为一 核心思想好在哪里&#xff1f;切哪里、切几次&#xff1f;何时用&#xff1f; 总结 核心思想 论文&#xff1a;https://arxiv.org/pdf/2201.12078.pdf 代码&#xff1a;https://github.com/Ju…

MySql的使用方法

一.什么是MySql MySql是一种数据库管理系统&#xff0c;是用来存储数据的&#xff0c;可以有效的管理数据&#xff0c;数据库的存储介质为硬盘和内存。 和文件相比&#xff0c;它具有以下优点&#xff1a; 文件存储数据是不安全的&#xff0c;且不方便数据的查找和管理&#xf…

Python网络拓扑库之mininet使用详解

概要 网络工程师、研究人员和开发人员需要进行各种网络实验和测试&#xff0c;以评估网络应用和协议的性能&#xff0c;以及解决网络问题。Python Mininet是一个功能强大的工具&#xff0c;它允许用户创建、配置和仿真复杂的网络拓扑&#xff0c;以满足各种实际应用场景。本文…

SQL注入:二次注入

SQL注入系列文章&#xff1a; 初识SQL注入-CSDN博客 SQL注入&#xff1a;联合查询的三个绕过技巧-CSDN博客 SQL注入&#xff1a;报错注入-CSDN博客 SQL注入&#xff1a;盲注-CSDN博客 目录 什么是二次注入&#xff1f; 二次注入演示 1、可以注册新用户 2、可以登录->…

C++ 类与对象(上)

目录 本节目标 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8.this指针 8.1 thi…

前言:穿越迷雾,探索C语言指针的奇幻之旅

各位少年&#xff0c;大家好&#xff0c;我是博主那一脸阳光&#xff0c;今天给大家分享指针&#xff0c;内存和地址的使用&#xff0c;以及使用。 前言&#xff1a; 在编程的世界中&#xff0c;若论灵活多变、深邃神秘的角色&#xff0c;非“指针”莫属。如同哈利波特手中的魔…

C++ 数论相关题目 求组合数I

直接按照公式求解会超时。 常用组合数递推式。 因此用递推式先预处理出来&#xff0c;然后查表。 #include <iostream> #include <algorithm>using namespace std;const int N 2010, mod 1e9 7;int c[N][N];void init() {for(int i 0; i < N; i )for(in…
最新文章