初识SpringBoot-用IDEA创建工程

开发环境:

  • Win10
  • MySQL8.0
  • IDEA 2019.2.4
  • SpringBoot 2.2.6

本文概要:

  • 用IDEA创建SpringBoot工程
  • Win10安装MySQL8.0
  • 工程连接数据库

前言:

为什么要写这篇文章呢?作为一名Android开发,在刚入门SpringBoot的时候遇到了很多的障碍,哪怕只是新建项目这么一个简单的步骤,往往也会遇到很多问题,这些问题通常只能通过百度/谷歌来获得答案,但是这些时间我觉得是很低效的。想想在Android开发里面,只要一个AndroidStudio,就能帮你配置好所有需要的开发环境,包括IDE, Android SDK,Gradle插件,Android模拟器等等。而在我创建SpringBoot项目并且尝试连接到数据库并最终把项目跑起来的这个过程中,我需要安装JDK,IDEA,MySQL,Maven。所谓万事开头难在这里真是体现得淋漓尽致。所以最后,我就想把这些步骤写成文章以记录,方便日后查看。同时希望能够给同样是刚入门的童鞋们一点帮助。

安装开发环境

首先确保电脑已经安装好了以下几个必备项:

  • JDK 1.8 +
  • IDEA

由于Linux,Mac,Win10的安装方式都不同,而且这两项都比较简单,因此这里只作提示,具体步骤自行百度。

安装MySQL8.0

因为后面连接数据库的时候我们也要用到MySQL,因此就先装好,这里以Win10为例。

第一步:下载安装MySQL

打开网站:https://dev.mysql.com/downloads/installer/ 进行下载

下载的时候注意选择64位,也就是第二个体积比较大的选项

现在Oracle需要登录才能下载,也可以选择不登录进行下载,点击下面蓝色小字

由于MySQL提供的是zip文件,我们只要把它解压到希望安装的目录下就可以了。

我的目录为默认路径:

C:\Program Files\MySQL\MySQL Server 8.0

然后用管理员身份打开cmd或者powershell,我们要开始配置MySQL了

第二步:配置MySQL

在我们打开的命令行窗口中(注意是管理员身份),输入 cd C:\Program Files\MySQL\MySQL Server 8.0\bin进入bin目录,这里大家自行更换为自己的安装目录。

然后输入:mysqld -install 命令,正常来说是成功了,如果出现下面这段话,那么就用管理员身份重新打开:

idea用springboot启动 idea运行springboot_java

接着还要再输入一个命令,那就是 mysqld --initialize,结束了这一步之后,会在MySQL的安装目录下多出一个data文件夹,里面有一个.err后缀名的文件,这个文件里面会有MySQL生成的初始密码,后面我们需要通过这个密码来登录MySQL

最后,MySQL要做的事情已经差不多了,我们还需要在MySQL安装目录下创建一个my.ini的文件,用来存放一些必要的配置。

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
basedir = "C:\Program Files\MySQL\MySQL Server 8.0"
datadir = "C:\Program Files\MySQL\MySQL Server 8.0\Data"
character-set-server = utf8
port = 3306

这个文件设置了MySQL的默认路径和数据存放路径,当然还有字符格式和端口。同样别忘了把路径换成自己的。

OK,这里MySQL的安装+配置就差不多了。我们启动MySQL试试,在命令行窗口输入: net start mysql

如无意外,大家应该可以看到

MySQL服务正在启动

MySQL服务已经启动成功

那么MySQL这一块的开发环境就算是配置好了。接下来是一些常用的操作,大家有兴趣可以看看

登录MySQL: mysql -u root -p

输入在.err文件中的密码

由于.err中的密码是随机的,也很难记住,因此我们可以修改为自己想要的密码

修改MySQL密码:SET PASSWORD = ‘xxx’(这里的xxx就是新密码)

回车后输入原密码,即可修改

创建SpringBoot项目

第一部分开发环境如果顺利,那么我们电脑上应该已经包括以下环境:

  • JDK
  • IDEA
  • MySQL

接下来我们就用IDEA来创建SpringBoot项目

打开IDEA, 选择 new -> project,看到如图

idea用springboot启动 idea运行springboot_MySQL_02

选择Spring initializr,右边选择SDK的版本,我们这里用1.8为例,下面用的是Spring官方提供的生成服务。

我们点击Next:

idea用springboot启动 idea运行springboot_idea用springboot启动_03

里面Group和Artifact是自己填写的,其他可以保持不变,填写完成之后Next:

idea用springboot启动 idea运行springboot_spring_04

我们选择了Web里面的Spring Web和SQL的MySQL,这两个是必须的,然后点解NEXT:

最后一步就是选择项目路径,这里就不贴图了。最后点击Finish就成功创建SpringBoot项目了!

运行SpringBoot项目

我们已经成功创建了一个SpringBoot项目,接下来看看怎么能够把这个项目跑起来。首先一个新项目的目录是这样的:

idea用springboot启动 idea运行springboot_mysql_05

主要的代码在src/main/java/下面,然后通过pom.xml来管理整个项目的配置。

我们找到SpringbootApplcation文件并打开,看到左边有个绿色的箭头,点击 run 就可以跑起来了~ 是不是很神奇?

创建项目数据库

登录数据库: mysql -u root -p

创建数据库:

DROP DATABASE IF EXISTS sampledb;

CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8;

USE sampledb;

我们在这里创建了一个名为:sampledb的数据库,并且制定编码为utf8

连接到数据库

既然准备工作已就绪,接下就进入最激动人心的环节了,那就是写!代!码!

添加依赖

首先就像Android开发,如果你想使用某个第三方库,那么你需要在build.gradle里面添加依赖。Springboot也是同理,只不过由于我们用的是Maven来管理,因此我们需要在pom.xml里面添加依赖:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

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

加入jpa和mysql这两个包的依赖,然后reimport一下就能自动下载依赖(在IDEA右边有个Maven选项卡,然后第一个按钮就是reimport了)

配置application.properties

然后就到数据库的配置工作了,我们找到resources/application.properties文件:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/sampledb?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

注意url后面需要加上timezone,否则在连接的时候会报错,用户名密码则需要改成自己之前设置的

接下来是我们的实体类:User
@Entity
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int userId;
    private String userName;
    private String password;
    private int credits;
    private String lastIp;
    private Date lastVisit;
	
    // 省略get,set方法
}

我们通过@Entity注解,标记这是一个实体,对应就是数据库中的一个表结构。

接下来是仓库:UserRepository

这个类主要是封装了CRUD的操作

public interface UserRepository extends CrudRepository<User, Integer> {
}

继承CrudRepository接口,我们进去看看源码:

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);

    <S extends T> Iterable<S> saveAll(Iterable<S> var1);

    Optional<T> findById(ID var1);

    boolean existsById(ID var1);

    Iterable<T> findAll();

    Iterable<T> findAllById(Iterable<ID> var1);

    long count();

    void deleteById(ID var1);

    void delete(T var1);

    void deleteAll(Iterable<? extends T> var1);

    void deleteAll();
}

提供了像save,saveAll,findAll等等用于操作数据库的方法。

创建MainController

然后就是我们的Controller了:

@Controller
@RequestMapping("/user")
public class MainController {
    @Autowired
    private UserReposito    private UserRepository userRepository;
ry userRepository;

    @PostMapping("/add")
    public @ResponseBody String addNewUser(@RequestParam String name, @RequestParam String password) {
        User user = new User();
        user.setUserName(name);
        user.setPassword(password);
        userRepository.save(user);
        return "Saved";
    }

    @GetMapping("/all")
    public @ResponseBody Iterable<User> getAllUsers() {
        return userRepository.findAll();
    }

}

首先添加@Controller注解和@RequestMapping注解,然后把UserRepository 用@Autowired注解标识,最后add和get方法上加了@PostMapping和@GetMapping注解,这里有很多注解,我们一个个来讲

  • @Controller: 把这个类标识为控制器
  • @RequestMapping:表示这个URL在Application URL后以 /user开头,例如 : localhost:8080/user
  • @Autowired:表示Spring会自动帮我们实现UserRepository这个类,记得吗,这是个接口,我们本来是需要自己去实现里面的方法的,加了这个注解之后就不用了,Spring会帮我们做完这些工作,我们可以直接使用userRepository.xxx()
  • @PostMapping:类似上面的Request,表示这个Post请求的路径
  • @GetMapping:类似Post,表示这个Get请求的路径
  • @ResponseBody:表示Post请求的响应体是String类型
  • @RequestParam:表示这个参数同时也是请求的参数

最后我们找到Application,默认Springboot生成的是:SpringbootApplication,运行程序!

如无意外我们应该能看到程序运行在: localhost:8080,接着我们来测试接口

测试接口

在终端输入:

curl localhost:8080/user/add -d name=123 -d password=456

然后能看到结果:

Saved

说明保存成功了

然后再输入

curl localhost:8080/user/all

看到以下的结果说明获取数据接口也OK了:

idea用springboot启动 idea运行springboot_mysql_06

到现在为止,我们就基本上完成了Springboot入门的第一步了,最后再来总结一下:

  • 安装必备的开发环境,包括JDK, IDEA, MySQL
  • 创建一个Springboot项目
  • 配置MySQL并且通过Springboot项目连接到MySQL
  • 实现add和getAll这两个接口

常见问题

Maven下载过慢

在项目右键选中Maven,点击 create settings.xml 选项,然后复制代码:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <mirrors>
        <!-- mirror
         | Specifies a repository mirror site to use instead of a given repository. The repository that
         | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
         | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
         |
        <mirror>
          <id>mirrorId</id>
          <mirrorOf>repositoryId</mirrorOf>
          <name>Human Readable Name for this Mirror.</name>
          <url>http://my.repository.com/repo/path</url>
        </mirror>
         -->
 
        <mirror>
            <id>alimaven</id>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
 
        <mirror>
            <id>uk</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://uk.maven.org/maven2/</url>
        </mirror>
 
        <mirror>
            <id>CN</id>
            <name>OSChina Central</name>
            <url>http://maven.oschina.net/content/groups/public/</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
 
        <mirror>
            <id>nexus</id>
            <name>internal nexus repository</name>
            <url>http://repo.maven.apache.org/maven2</url>
            <mirrorOf>central</mirrorOf>
        </mirror>
 
    </mirrors>
</settings>

总结

在这过程中其实还有遇到一些其他的问题,包括MySQL选择哪个GUI工具,如何连接并编写SQL语句,还有Maven包下载速度过慢,修改setting.xml也无效,甚至Springboot添加mysql依赖会报错等等,这些小细节都可以通过百度/谷歌找到答案,我这里就不一一细说了。