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

SpringBoot

  • 1. SpringBoot简介
  • 2. 常用starter
  • 3. 搭建springboot项目(重点)
    • 3.1 数据库准备
    • 3.2 创建spring Initialize项目
    • 3.3 更改配置文件类型
    • 3.4 整合log4j2
    • 3.5 整合Druid
    • 3.6 整合mybatis
        • 附:使用mybatis-plug
    • 3.7 编写登录功能
      • 1. 编写sql
      • 2. 编写mapper
      • 3. 编写Service
      • 4. 编写Controller
      • 5. 编写html页面
  • 附录
    • 1. Idea 常用快捷键列表
    • 2. Tomcat-servlet-jdk版本对应


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 数据库准备

创建对应的数据库以及数据表
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第1张图片

3.2 创建spring Initialize项目

打开idea,点击Create New Project ,选择 Spring Initialize,在点击Next。
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第2张图片
输入工程信息,我更改了3处,其余没有更改。可能有的将Artifact中内容输入大写英文导致报错,更改为小写即可。

Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第3张图片
勾选图片右边所需要的驱动和依赖。
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第4张图片修改和保存工程。
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第5张图片
最终项目目录如下:
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第6张图片

3.3 更改配置文件类型

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

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

3.4 整合log4j2

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

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


在pom文件中的任意空白处右键,查看依赖
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第7张图片找到spring-boot-starter-logging,对其右键选择Exclude去除(因为直接查看logback的starter不容易找到,我们这里通过IDEA依赖导图就可以实现去除)
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第8张图片
然后在pom中加入spring-boot-starter-log4j2即可

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-log4j2artifactId>
dependency>

3.5 整合Druid

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

导入依赖

<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druid-spring-boot-starterartifactId>
    <version>1.1.10version>
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)
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第9张图片可以看到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这个是为了约束文件的正常使用)


<plugin>
    <groupId>org.mybatis.generatorgroupId>
    <artifactId>mybatis-generator-maven-pluginartifactId>
    <version>1.3.1version>
    <configuration> <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xmlconfigurationFile>
        <overwrite>trueoverwrite>
        <verbose>trueverbose>
    configuration>
plugin>
<dependency>
    <groupId>org.mybatis.generatorgroupId>
    <artifactId>mybatis-generator-coreartifactId>
    <version>1.3.5version>
dependency>

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



<generatorConfiguration>
    
    
    <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"/>
            
            <property name="suppressAllComments" value="true"/>
        commentGenerator>
        
        <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"/> 
        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>
        
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        sqlMapGenerator>
        
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.pb.crud.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        javaClientGenerator>
        
        <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。

Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第10张图片

然后运行generator就会自动产生三个文件夹和文件。
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第11张图片

附:使用mybatis-plug

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

pom
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第12张图片
yml
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第13张图片


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

3.7 编写登录功能

1. 编写sql

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



<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


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
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>

成功页面


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

body>
html>

错误页面Error.htm


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录失败title>
head>
<body>
<h1>登录失败,请重新<a href="/user/loginPage">登录a>h1>
body>
html>

此刻全部步骤完成
Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第14张图片

附录

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

Java学习笔记-全栈-web开发-19-SpringBoot入门项目创建与整合_第15张图片

你可能感兴趣的:(Java-web开发,spring,boot,spring,java,mybatis,数据库)