前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合

Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合

作者头像
devi
发布2021-08-18 15:47:25
5410
发布2021-08-18 15:47:25
举报
文章被收录于专栏:搬砖记录

1. SpringBoot简介

SpringBoot精髓就在于“自动配置”。它能够快速的实现各种框架的整合,并自动配置好大部分的功能。 他不算是一个单独的、为实现某一个特殊功能的框架,它最大的作用就是“整合框架”、“快速开发”。

Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面。如此多的子项目和组件,一方面方便了开发人员的使用,另外一个方面也带来了使用方面的问题。每个子项目都有一定的学习曲线。开发人员需要了解这些子项目和组件的具体细节,才能知道如何把这些子项目整合起来形成一个完整的解决方案。在如何使用这些组件上,并没有相关的最佳实践提供指导。对于新接触 Spring 框架的开发人员来说,并不知道如何更好的使用这些组件。Spring 框架的另外一个常见问题是要快速创建一个可以运行的应用比较麻烦。

SpringBoot就用于解决以上问题。 他能够快速创建Spring项目,并自动配置 Spring 的各种组件,且不依赖代码生成和 XML 配置文件。Spring Boot 也提供了对于常见场景的推荐组件配置。Spring Boot 可以大大提升使用 Spring 框架时的开发效率。

  • 轻松创建独立的Spring应用程序。
  • 内嵌Tomcat、jetty等web容器,不需要部署WAR文件。
  • 提供一系列的“starter” 来简化的Maven配置,不需要添加很多依赖。
  • 开箱即用,尽可能自动配置Spring。

2. 常用starter

当我们需要使用一个第三方包的时候,我们需要导入jar。 同理,在springboot中,我们需要使用一个第三方框架的时候,我们需要导入starter。 starter与jar最大的不同就在于,它附加了各种自动配置。

starter

介绍

spring-boot-starter-web

支持 Web 应用开发,包含 Tomcat 和 spring-mvc。

spring-boot-starter

核心 POM,包含自动配置支持、日志库和对 YAML 配置文件的支持。

spring-boot-starter-amqp

通过 spring-rabbit 支持 AMQP

spring-boot-starter-aop

包含 spring-aop 和 AspectJ 来支持面向切面编程(AOP)。

spring-boot-starter-batch

支持 Spring Batch,包含 HSQLDB。

spring-boot-starter-data-jpa

包含 spring-data-jpa、spring-orm 和 Hibernate 来支持 JPA。

spring-boot-starter-data-mongodb

包含 spring-data-mongodb 来支持 MongoDB。

spring-boot-starter-data-rest

通过 spring-data-rest-webmvc 支持以 REST 方式暴露 Spring Data 仓库。

spring-boot-starter-jdbc

支持使用 JDBC 访问数据库

spring-boot-starter-security

包含 spring-security。

spring-boot-starter-test

包含常用的测试所需的依赖,如 JUnit、Hamcrest、Mockito 和 spring-test 等。

spring-boot-starter-velocity

支持使用 Velocity 作为模板引擎。

spring-boot-starter-websocket

支持使用 Tomcat 开发 WebSocket 应用。

spring-boot-starter-ws

支持 Spring Web Services

spring-boot-starter-actuator

添加适用于生产环境的功能,如性能指标和监测等功能。

spring-boot-starter-remote-shell

添加远程 SSH 支持

spring-boot-starter-jetty

使用 Jetty 而不是默认的 Tomcat 作为应用服务器。

spring-boot-starter-log4j

添加 Log4j 的支持

spring-boot-starter-logging

使用 Spring Boot 默认的日志框架 Logback

spring-boot-starter-tomcat

使用 Spring Boot 默认的 Tomcat 作为应用服务器。

3. 搭建springboot项目(重点)

本项目包含

  • 基本的web项目
  • 整合log4j2
  • 整合druid
  • 整合mybatis,并使用逆向工程
  • 实现登录功能

3.1 数据库准备

创建对应的数据库以及数据表

3.2 创建spring Initialize项目

打开idea,点击Create New Project ,选择 Spring Initialize,在点击Next。

输入工程信息,我更改了3处,其余没有更改。可能有的将Artifact中内容输入大写英文导致报错,更改为小写即可。

勾选图片右边所需要的驱动和依赖。

修改和保存工程。

最终项目目录如下:

3.3 更改配置文件类型

项目创建完成默认使用application.properties作为配置文件,这里推荐将其删除,然后创建一个application.yml作为替换。

因为yml语法干净整洁,配置结构十分清晰。 使用properties的话,当配置多了之后阅读比较困难。

3.4 整合log4j2

Springboot自带的日志框架是logback,我们改用口碑更好的log4j2

整合原理可以查看这里,在此不赘述,直接使用Springboot提供的最简便的方法。


在pom文件中的任意空白处右键,查看依赖

找到spring-boot-starter-logging,对其右键选择Exclude去除(因为直接查看logback的starter不容易找到,我们这里通过IDEA依赖导图就可以实现去除)

然后在pom中加入spring-boot-starter-log4j2即可

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

3.5 整合Druid

Druid是阿里的一个数据库连接池,自带数据库监控后台,非常方便。

导入依赖

代码语言:javascript
复制
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

配置application

注意更改自己的用户名和密码,以及访问地址。我这里配置的用户名是abc,密码是123,访问地址是:项目地址/druid/*

代码语言:javascript
复制
#数据库配置
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/crud?serverTimezone=UTC
    username: root
    password: 123456
    #druid配置
    druid:
      initial-size: 5
      min-idle: 5
      max-active: 20
      max-wait: 5000
      # 监控过滤器
      web-stat-filter:
        enabled: true
        exclusions:
          - "*.js"
          - "*.gif"
          - "*.jpg"
          - "*.png"
          - "*.css"
          - "*.ico"
          - "/druid/*"
      # 配置druid 监控页面
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        reset-enable: false
        login-username: abc
        login-password: 123
      # 开启sql查询状态监控
      filter:
        stat:
          db-type: mysql
          enabled: true
          log-slow-sql: true
          slow-sql-millis: 2000

配置完毕之后输入项目地址(我这已经改成80端口了,因此访问地址没有端口号,默认端口8080)

可以看到Druid提供了很多功能

3.6 整合mybatis

以下涉及路径配置,需要根据自己的项目名字进行更改。直接照抄一定无法运行!

我们在创建项目的时候已经选择了mybatis依赖,因此这里不用再导入了。

创建项目运行入口文件(Application)同级目录下(项目目录下)创建model文件夹,并写好User的javabean,然后根据自己的项目名称编写yml配置

代码语言:javascript
复制
mybatis:
  mapper-locations: classpath:mapper/*.xml      # 修改为mapper映射xml文件的所在路径
  type-aliases-package: com.sbdemo.model       # 修改为对应实体类的路径

添加逆向工程插件:mybatis genreator以及约束插件(mybatis-generator-core这个是为了约束文件的正常使用)

代码语言:javascript
复制
<!-- mybatis generator start -->
<plugin>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-maven-plugin</artifactId>
    <version>1.3.1</version>
    <configuration> <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
        <overwrite>true</overwrite>
        <verbose>true</verbose>
    </configuration>
</plugin>
<dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.5</version>
</dependency>
<!-- mybatis generator end -->

对应上面的插件配置信息,在src/main/resources中创建generator文件夹,和创建generatorConfig.xml文件。 xml中的jar包地址、数据库名、密码、自动生成的包路径和表名都需要根据自己配置进行修改

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <!--    <classPathEntry  location="C:\Program Files (x86)\MySQL\Connector.J 5.1\mysql-connector-java-5.1.7-bin.jar"/>-->
    <classPathEntry  location="C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\8.0.18\mysql-connector-java-8.0.18.jar"/>
    <context id="DB2Tables"  targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="false"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库连接驱动类,URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1/crud?serverTimezone=UTC" userId="root" password="123456">
            <property name="nullCatalogMeansCurrent" value="true"/> <!--对于sql8以上的驱动,取消生成信息模式中的表生成代码-->
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成(实体)模型的包名和位置-->
        <javaModelGenerator targetPackage="com.pb.crud.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成XML映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO接口的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.pb.crud.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"/>
    </context>
</generatorConfiguration>

添加完成后在run中配置—>Edit Config—>+—>Maven进行配置,在Name中输入:generator,在Command line 中输入:mybatis-generator:generate -e,后点击OK。

然后运行generator就会自动产生三个文件夹和文件。

附:使用mybatis-plug

将mybatis改为mybatis-plug,只需要把依赖换了,把配置中的mybatis改成mybatis-plug即可

pom

yml


此时Dao层就已经算是写好了,完整的web项目还差 service、controller、view

3.7 编写登录功能

1. 编写sql

在resorces包下的mapper的UserMapper.xml中编写sql语句,并确保namespace、resultType、parameterType所对应的路径以及类名正确。

代码语言:javascript
复制
<?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.sbdemo.mapper.UserMapper" >
    <!--用户登录-->
    <select id="userLogin" resultType="com.sbdemo.model.User" parameterType="com.sbdemo.model.User">
        select username , password from user where username = #{username} and password = #{password}
    </select>
</mapper>

2. 编写mapper

编写mapper中的UserMapepr.java,我将原来自动生成的代码全部删除。

代码语言:javascript
复制
package com.sbdemo.mapper;

import com.sbdemo.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

@Mapper
@Component
public interface UserMapper {
    
    //用户登录
    User userLogin(@Param("username") String username, @Param("password") String password);
}

注意! Mapper虽然是接口,但是必须加上 @Mapper @Component 才能实现自动配置

3. 编写Service

创建Service文件夹,编写UserLoginService.java类。

代码语言:javascript
复制
package com.sbdemo.service;

import com.sbdemo.model.User;
import com.sbdemo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserLoginService {

    //注入dao
    @Autowired
    private UserMapper userMapper;

    //用户登录
    public User userLogin(String username, String password){
        User user = userMapper.userLogin(username,password);
        return user;
    }
}

4. 编写Controller

代码语言:javascript
复制
package com.sbdemo.controller;
import com.sbdemo.model.User;
import com.sbdemo.service.UserLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
@RequestMapping(value = {"/user"})
public class UserLoginController {

    @Autowired
    private UserLoginService userLoginService;

    //访问登录页面:/user/loginPage
    @RequestMapping(value = {"/loginPage"})
    public String userLogin(){
        return "UserLogin";
    }

    @RequestMapping(value = {"/userLogin"})
    public String userLogin(@RequestParam("username")String username,@RequestParam("password")String password){
        User user = userLoginService.userLogin(username,password);
        if(user != null){
            return "Success";		//跳转成功界面Success.html
        }	
        return "Error";
    }
}

5. 编写html页面

最后编写登录页面UserLogin.html,成功页面Success.html,错误页面Error.html,注意名字是否与controller返回值一致,和跳转链接是否正确。

登录页面UserLogin.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
用户登录
<form action="/user/userLogin" method="post">
    账号:<input type="text" name="username"/><br>
    密码:<input type="password" name="password" /><br>
    <input type="submit" value="登录" /><a href="#" >注册</a>
</form>
</body>
</html>

成功页面

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录成功</title>
</head>
<body>
<h1>恭喜你成功登录</h1>

</body>
</html>

错误页面Error.htm

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录失败</title>
</head>
<body>
<h1>登录失败,请重新<a href="/user/loginPage">登录</a></h1>
</body>
</html>

此刻全部步骤完成

附录

1. Idea 常用快捷键列表

Alt+回车 导入包,自动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+I 格式化代码 Ctrl+Alt+O 优化导入的类和包 Alt+Insert 生成代码(如get,set方法,构造函数等) Ctrl+E或者Alt+Shift+C 最近更改的代码 Ctrl+R 替换文本 Ctrl+F 查找文本 Ctrl+Shift+Space 自动补全代码 Ctrl+空格 代码提示 Ctrl+Alt+Space 类名或接口名提示 Ctrl+P 方法参数提示 Ctrl+Shift+Alt+N 查找类中的方法或变量 Alt+Shift+C 对比最近修改的代码

Shift+F6 重构-重命名 Ctrl+Shift+先上键 Ctrl+X 删除行 Ctrl+D 复制行 Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者// ) Ctrl+J 自动代码 Ctrl+E 最近打开的文件 Ctrl+H 显示类结构图 Ctrl+Q 显示注释文档 Alt+F1 查找代码所在位置 Alt+1 快速打开或隐藏工程面板 Ctrl+Alt+ left/right 返回至上次浏览的位置 Alt+ left/right 切换代码视图 Alt+ Up/Down 在方法间快速移动定位 Ctrl+Shift+Up/Down 代码向上/下移动。 F2 或Shift+F2 高亮错误或警告快速定位

代码标签输入完成后,按Tab,生成代码。 选中文本,按Ctrl+Shift+F7 ,高亮显示所有该文本,按Esc高亮消失。 Ctrl+W 选中代码,连续按会有其他效果 选中文本,按Alt+F3 ,逐个往下查找相同文本,并高亮显示。 Ctrl+Up/Down 光标跳转到第一行或最后一行下 Ctrl+B 快速打开光标处的类或方法 单击+Shift+单击可选中两次单击之间的内容

2. Tomcat-servlet-jdk版本对应

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. SpringBoot简介
  • 2. 常用starter
  • 3. 搭建springboot项目(重点)
    • 3.1 数据库准备
      • 3.2 创建spring Initialize项目
        • 3.3 更改配置文件类型
          • 3.4 整合log4j2
            • 3.5 整合Druid
              • 3.6 整合mybatis
                • 3.7 编写登录功能
                  • 1. 编写sql
                  • 2. 编写mapper
                  • 3. 编写Service
                  • 4. 编写Controller
                  • 5. 编写html页面
              • 附录
                • 1. Idea 常用快捷键列表
                  • 2. Tomcat-servlet-jdk版本对应
                  相关产品与服务
                  云服务器
                  云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档