使用SpringBoot搭建Web项目
序言
从简入深的使用SpringBoot搭建一个Web项目,同时也包括一些小的问题。第一篇博文是以较为简单的方式完成一个可以连接数据库的Springboot web程序。之前自己学习的时候看网上的教程总是感觉有点太大,我只是想最简单的搭建一个可以运行的项目,之后再去深究细节。每个教程的配置还都不一样,让我不知所措,所以我就写了这篇博文来记录自我感觉的较简单的步骤较少的方法去搭建一个springboot web项目,不常写文可能思路有点混乱。
Code
创建项目
这里使用的IDE是IDEA,选择软件左上角File -> New -> Project来创建一个新的项目
选择Spring Initializr来初始化我们的SpringBoot项目,选择JDK8之后点击Next,接下来的点击Next操作就不做说明了
在如下界面我们设置包名,项目类型选择Maven项目,语言选择Java,打包方式选择Jar,Java版本选择8
依赖这部分,我们分别选择Web下的Spring Web,Template Engines下的Thymeleaf(为以后挖坑),SQL下的MyBatis Framework,当然这里也可以创建项目之后手动在POM文件中写入,不过这样更方便一些。
接下来选择项目的存放路径,即可完成项目的创建,创建完成项目打开项目之后IDEA右下角会弹出Maven projects need to be imported弹窗,选择Enable Auto-Import即可,这样Maven就可以自己下载依赖。
目录结构
我们打开新建的项目之后大致如下图所示。.idea文件夹下存放的是IDEA项目的配置文件,比如compiler.xml 配置了JDK版本,encodings.xml 配置了编码类型,该文件夹我们不需要过多了解。.mvn文件夹下存放的是Maven的配置和相关Jar包。src文件夹是我们主要编码的地方,src.main.java路径下是我们编写java代码的地方,src.main.resources是我们存放静态资源,页面以及配置文件的地方。test文件夹是我们编写测试代码的地方。.gitignore文件配置了我们使用git时忽略上传的文件。HELP.md是一个帮助文档。mvnw是一个linux脚本文件,可以使我们运行指定版本的Maven,mvnw.cmd则是相同功能的windows版本脚本文件,pom.xml是Maven项目的依赖配置文件。t1.iml是 intellij idea的工程配置文件,里面是当前t1 project的一些配置信息。
我们主要关注的还是src文件夹下的文件,其余不重要的文件可以隐藏,选中t1 项目,然后点击这个文件夹右下角带三个小蓝色方块的图标
选择要隐藏的文件右键选择Excluded 然后这些文件夹就会变成橙黄色
点击Apply回到原来的页面点击图片中右上角的小齿轮,点击取消Show Excluded Files,这样想要隐藏的文件就消失了
测试启动
首先我们先来测试一下SpringBoot框架是否能够启动,创建TestController文件,目录结构如下
该类的代码如下
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController // 标注该类为Controller,SpringBoot会自动扫描该类
public class TestController {
@RequestMapping("/test") // 处理请求路径为/test的请求
public String test(){
return "测试成功";
}
}
注:自己敲代码的时候会自动导包,如果是复制上去的话可能不会自动导,需要手动处理。
接下来点击下图左侧主启动类的小箭头或者右上角的箭头都可以启动项目
然后观察控制台的输出,很自然的没有运行成功,出错了,我们看一下错误提示
APPLICATION FAILED TO START
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
大体意思就是没有配置数据库驱动,我们也没用到数据库啊?为啥要配置数据库驱动呢?还记得我们之前选择依赖的时候选择了mybatis吗,原因就出在这里,找到pom.xml文件注释掉mybatis依赖,重启项目。
<!-- <dependency>-->
<!-- <groupId>org.mybatis.spring.boot</groupId>-->
<!-- <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!-- <version>2.1.3</version>-->
<!-- </dependency>-->
项目成功启动控制台输出如下
我们可以看到程序启动在8080端口,在浏览器中输入请求地址即可看到我们想要得到的测试成功字符串
我们百度可以了解到mybatis是一个Java持久层框架,JDBC才是连接数据库用到的驱动,那为什么我们引入mybatis需要配置数据库驱动呢?
我们从上面这张图片可以看到mybatis-spring-boot-starter依赖包含了jdbc依赖,所以引入了mybatis就相当于引入了jdbc,再加上SpringBoot的自动配置是根据是否引入类来进行自动配置的,自然的,引入了jdbc依赖就需要配置数据库驱动程序(选择数据库驱动自然是没法自动配置的),从如下的报错也可以得出同样结论。
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Failed to determine a suitable driver class
连接数据库
我们使用mysql数据库,首先创建一个数据库,我起的名字叫t1并创建了一张表Bear
表内字段如下
然后随便添加点数据,这样我们数据库就准备好了。
再次回到代码这边,首先我们是要配置数据库的连接信息,在application.properties
里做如下配置
# 数据库设置
## 数据库驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/t1
# 数据库用户名
spring.datasource.username=root
# 数据库密码
spring.datasource.password=root
其次是导入JDBC驱动,在pom.xml
中添加如下代码
<!-- mysql jdbc 驱动 https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
因为我安装的是5.7版本的mysql所以这里我选择的是5版本的jdbc,如果是8版本的mysql可能就需要选择8版本的驱动了,驱动程序可以在maven仓库找到,同时我们要解开之前对mybatis依赖的注释。
接下来我们要创建一个实体Bear,用来承接Bear表查询出来的数据,在t1目录下创建controller的同级目录entity,再在entity内创建java文件Bear.java,内容如下
package com.ljsh.t1.entity;
public class Bear {
private String name;
private String type;
private String weight;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getWeight() {
return weight;
}
public void setWeight(String weight) {
this.weight = weight;
}
public Bear(String name, String type, String weight) {
this.name = name;
this.type = type;
this.weight = weight;
}
}
一个典型的pojo,下面的getter和setter方法可以在idea编码页面右键选择 Generate -> Getter and Setter 自动生成。
再之后是对mybaitis的配置与操作,创建controller目录同级目录mapper,在mapper目录中创建接口文件TestMapper.java,代码内容如下
package com.ljsh.t1.mapper;
import com.ljsh.t1.entity.Bear;
import java.util.List;
public interface TestMapper {
List<Bear> getAllBears(); //查询Bear表所有数据,作为List查出来
}
同样的在resources目录下也创建一个mapper文件夹,mapper文件夹里创建TestMapper.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.ljsh.t1.mapper.TestMapper">
<select id="getAllBears" resultType="com.ljsh.t1.entity.Bear">
select
*
from Bear
</select>
</mapper>
在T1Applicatin文件也就是主启动类中添加一个注解如下
package com.ljsh.t1;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.ljsh.t1.mapper") //扫描mapper接口类
public class T1Application {
public static void main(String[] args) {
SpringApplication.run(T1Application.class, args);
}
}
最后在application.properties
中增加一行
# 指向映射xml文件目录
mybatis.mapperLocations=classpath:mapper/*.xml
现在的目录结构如下
通过在主启动类上配置@MapperScan注解,让springboot扫描需要实现的Mapper接口文件。通过配置文件里xml地址的配置,让Mapper接口和Mapper的xml实现可以对应起来。
最后我们在TestController里修改代码
package com.ljsh.t1.controller;
import com.ljsh.t1.entity.Bear;
import com.ljsh.t1.mapper.TestMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController // 标注该类为Controller,SpringBoot会自动扫描该类
public class TestController {
@Autowired
TestMapper testMapper; //自动注入
@RequestMapping("/test") // 处理请求路径为/test的请求
public Object test(){
List<Bear> bears = testMapper.getAllBears();
return bears;
}
}
重新启动项目访问http://localhost:8080/test我们会收到从数据库查询出来的数据
这时候查看控制台可能会发现一些警告
Thu Jan 14 22:45:15 CST 2021 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
修改application.properties
中的数据库连接为如下即可消除警告
spring.datasource.url=jdbc:mysql://localhost:3306/t1?useSSL=false
结束语
本来的出发点是以最简单的方式搭建一个能跑起来的web项目,但是写完了感觉还是有点复杂,但有基础的话还是很好理解的。之后应该还会根据这个demo更新 mvc / 配置 /mybatis 具体的一些细节,也是自己的一次复习,如果有时间的话。
使用SpringBoot搭建Web项目的更多相关文章
- springBoot 搭建web项目(前后端分离,附项目源代码地址)
springBoot 搭建web项目(前后端分离,附项目源代码地址) 概述 该项目包含springBoot-example-ui 和 springBoot-example,分别为前端与后端,前后端 ...
- springboot搭建web项目(转)
转:http://blog.csdn.net/linzhiqiang0316/article/details/52589789 这几天一直在研究IDEA上面怎么搭建一个web-mvc的SpringBo ...
- Springboot搭建web项目
最近因为项目需要接触了springboot,然后被其快速零配置的特点惊呆了.关于springboot相关的介绍我就不赘述了,大家自行百度google. 一.pom配置 首先,建立一个maven项目,修 ...
- springboot搭建web项目与使用配置文件
目录 一.准备工作 二.创建基础web项目 1. maven配置 2.创建maven项目.配置pom.xml为web基础项目 3.编写启动类 4.使用maven打包 5.使用命令java -jar x ...
- Spring-Boot快速搭建web项目详细总结
最近在学习Spring Boot 相关的技术,刚接触就有种相见恨晚的感觉,因为用spring boot进行项目的搭建是在太方便了,我们往往只需要很简单的几步,便可完成一个spring MVC项目的搭建 ...
- 使用idea+springboot+Mybatis搭建web项目
使用idea+springboot+Mybatis搭建web项目 springboot的优势之一就是快速搭建项目,省去了自己导入jar包和配置xml的时间,使用非常方便. 1.创建项目project, ...
- Spring Boot搭建Web项目常用功能
搭建WEB项目过程中,哪些点需要注意: 1.技术选型: 前端:freemarker.vue 后端:spring boot.spring mvc 2.如何包装返回统一结构结果数据? 首先要弄清楚为什么要 ...
- 基于springboot的web项目最佳实践
springboot 可以说是现在做javaweb开发最火的技术,我在基于springboot搭建项目的过程中,踩过不少坑,发现整合框架时并非仅仅引入starter 那么简单. 要做到简单,易用,扩展 ...
- 【maven】 在 MyEcplise上使用maven搭建Web项目
二.在My Ecplise上使用Maven搭建Web项目 1.新建一个maven项目 2.create一个简单的骨架 3.就像在ecplise中一样设置项目的以下配置 4.新创建的项目结构如下 ...
随机推荐
- Panda交易所获悉,五地股权市场获批参与「区块链建设试点」
Panda交易所获悉,北京市地方金融监督管理局官网于7月21日发布信息显示,"证监会发布<关于原则同意北京.上海.江苏.浙江.深圳等5家区域性股权市场开展区块链建设工作的函>,原 ...
- AcWing 339 .圆形数字
大型补档计划 题目链接 设 \(f[i][j]\) 表示二进制下,数字有 \(i\) 位, \(0\) 的个数 - \(1\) 的个数 \(=\) \(j\) 的方案数 \(f[0][0] = 1;\ ...
- linux关闭在线登录用户
在使用电脑的时候,发现自己的电脑上有其他的用户登陆.如果其他用户用的是自己的名字,那么就能通过who去查询出来,但是如果登陆的都是root用户,那么肯定不知道是谁,所以需要我们清除他们:另外呢,如果登 ...
- 从用SwiftUI搭建项目说起
前言 后续这个SwiftUI分类的文章全部都是针对SwiftUI的日常学习和理解写的,自己利用Swift写的第二个项目也顺利上线后续的需求也不是特着急,最近正好有空就利用这段时间补一下自己对Swift ...
- 牛客练习赛 73 D
题目链接 离别 离线算法+线段树 容易发现当我们枚举右端点r时,符合条件的左端点是一段连续的区间 我们可以用队列来维护这个连续区间的左右端点 当枚举到端点\(i\)时,将下标\(i\)插入到队列\(q ...
- VMware提示Device/Credential Guard不兼容
问题环境 win10系统版本 win10 2004企业版 vmware 版本 vmware 15 pro 问题 虚拟机开启时候弹窗提示:"VMware与Device/Credential G ...
- 回文数字(Palindrome Number)
总时间限制:1000ms 内存限制: 65536kB 描述 给出一系列非负整数,判断是否是一个回文数.回文数指的是正着写和倒着写相等的数. 输入 一行,一个01字符串. 输出 若干行,每行是一个非负整 ...
- Android 7.0应用之间共享文件
原文首发于微信公众号:躬行之,欢迎关注交流! 开发中经常需要将某个文件向另一个应用程序传递,如图片上传到另一个应用程序.文件在不同存储路径之间的复制粘贴等都需要共享文件,可以这样理解接收文件的应用是在 ...
- .NET Core 下的 API 网关
网关介绍 网关其实就是将我们写好的API全部放在一个统一的地址暴露在公网,提供访问的一个入口.在 .NET Core下可以使用Ocelot来帮助我们很方便的接入API 网关.与之类似的库还有Proxy ...
- [Python] iupdatable包:Status 模块使用介绍
常用状态做的一个集合,方便用在函数返回值中区分不同状态结果. 简单举例: from iupdatable import Status def fun(): print("do somethi ...