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


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即可

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

3.5 整合Druid

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

导入依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

配置application

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

#数据库配置
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配置

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

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

<!-- 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包地址、数据库名、密码、自动生成的包路径和表名都需要根据自己配置进行修改

<?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所对应的路径以及类名正确。

<?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,我将原来自动生成的代码全部删除。

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类。

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

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

<!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>

成功页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录成功</title>
</head>
<body>
<h1>恭喜你成功登录</h1>

</body>
</html>

错误页面Error.htm

<!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版本对应

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值