序言

从简入深的使用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项目的更多相关文章

  1. springBoot 搭建web项目(前后端分离,附项目源代码地址)

    springBoot 搭建web项目(前后端分离,附项目源代码地址)   概述 该项目包含springBoot-example-ui 和 springBoot-example,分别为前端与后端,前后端 ...

  2. springboot搭建web项目(转)

    转:http://blog.csdn.net/linzhiqiang0316/article/details/52589789 这几天一直在研究IDEA上面怎么搭建一个web-mvc的SpringBo ...

  3. Springboot搭建web项目

    最近因为项目需要接触了springboot,然后被其快速零配置的特点惊呆了.关于springboot相关的介绍我就不赘述了,大家自行百度google. 一.pom配置 首先,建立一个maven项目,修 ...

  4. springboot搭建web项目与使用配置文件

    目录 一.准备工作 二.创建基础web项目 1. maven配置 2.创建maven项目.配置pom.xml为web基础项目 3.编写启动类 4.使用maven打包 5.使用命令java -jar x ...

  5. Spring-Boot快速搭建web项目详细总结

    最近在学习Spring Boot 相关的技术,刚接触就有种相见恨晚的感觉,因为用spring boot进行项目的搭建是在太方便了,我们往往只需要很简单的几步,便可完成一个spring MVC项目的搭建 ...

  6. 使用idea+springboot+Mybatis搭建web项目

    使用idea+springboot+Mybatis搭建web项目 springboot的优势之一就是快速搭建项目,省去了自己导入jar包和配置xml的时间,使用非常方便. 1.创建项目project, ...

  7. Spring Boot搭建Web项目常用功能

    搭建WEB项目过程中,哪些点需要注意: 1.技术选型: 前端:freemarker.vue 后端:spring boot.spring mvc 2.如何包装返回统一结构结果数据? 首先要弄清楚为什么要 ...

  8. 基于springboot的web项目最佳实践

    springboot 可以说是现在做javaweb开发最火的技术,我在基于springboot搭建项目的过程中,踩过不少坑,发现整合框架时并非仅仅引入starter 那么简单. 要做到简单,易用,扩展 ...

  9. 【maven】 在 MyEcplise上使用maven搭建Web项目

    二.在My Ecplise上使用Maven搭建Web项目 1.新建一个maven项目   2.create一个简单的骨架 3.就像在ecplise中一样设置项目的以下配置   4.新创建的项目结构如下 ...

随机推荐

  1. js 实现字符串翻转

    字符串作在程序中是非常常见的,因为程序中绝大部分的数据都可以当作字符串来处理.在这里介绍几种翻转字符串的方法. (1)使用字符串函数 //使用数组翻转函数 function reverseString ...

  2. 题解-洛谷P5217 贫穷

    洛谷P5217 贫穷 给定长度为 \(n\) 的初始文本 \(s\),有 \(m\) 个如下操作: \(\texttt{I x c}\),在第 \(x\) 个字母后面插入一个 \(c\). \(\te ...

  3. js v-if 判断多个属性 in

    js  v-if 判断 <div v-if="suborder.approve_user==user_id || suborder.approve_userrole_id in rol ...

  4. mysql 8.0 MGR组复制配置

    一.配置组复制的步骤 1.初始化数据目录 2.配置主服务器(primary) 3.配置辅助服务器(secondaries) 4.启动mysql实例 5.安装组复制插件(primary and seco ...

  5. 淘宝|蚂蚁|菜鸟|盒马|嘀嘀|饿了么面经(已拿多个offer)

    上一篇的同学拿到了bigo和腾讯的offer,这一次的分享来自两位同学的面试综合,他们分别拿到了菜鸟.嘀嘀.盒马的多个offer,由于面试的时间跨度时间太长,且面试的部门太多,只能回忆到具体的面试题, ...

  6. 容器服务 TKE 存储插件与云硬盘 CBS 最佳实践应用

    引言 随着自研上云的深入,越来越多的有状态服务对于在 TKE 集群中使用云上存储能力的需求也越来越强烈. 目前腾讯云容器服务 TKE(Tencent Kubernetes Engine已支持在 TKE ...

  7. Jmeter连接redis

    介绍:现在有很多数据不是存储在数据库而是存储在Redis中 Redis数据库存储数据环境 不用每次都去数据库读取数据 可以有效的优化服务器性能. 下面介绍使用jmeter如何读取redis 一.首先创 ...

  8. [日常摸鱼]bzoj2463 [中山市选2009]谁能赢呢?

    题意:两个人在$n*n$的棋盘上玩游戏,一开始棋子在左上角,可以上下左右的走到没有走过的地方,最后不能走的那个输,两个人都采取最优决策问哪个赢 猜结论!$n$为偶数则先手赢,否则后手赢. 考虑用$1* ...

  9. 【原创】Linux PCI驱动框架分析(一)

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...

  10. 记一次真实的webpack优化经历

    前言 公司目前现有的一款产品是使用vue v2.0框架实现的,配套的打包工具为webpack v3.0.整个项目大概有80多个vue文件,也算不上什么大型项目. 只不过每次头疼的就是打包所耗费的时间平 ...