木舟0基础学习Java的第三十二天(Maven,SpringBoot)

Maven

1.什么是 Maven

Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。

Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理

Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。

2.Maven 的特点

项目设置遵循统一的规则。
任意工程中共享。
依赖管理包括自动更新。
一个庞大且不断增长的库。
可扩展,能够轻松编写 Java 或脚本语言的插件。
只需很少或不需要额外配置即可即时访问新功能

基于模型的构建-Maven能够将任意数量的项目构建到预定义的输出类型中,如JAR,WAR或基于项目元数据的分发,而不需要在大多数情况

项目信息的一致性站点-Maven使用与构建过程相同的元数据,Maven 能够生成一个网站或 PDF,包括您要添加的任何文档,并添加到关于项目开发状态的标准报告中。

发布管理和发布单独的输出-Maven将不需要额外的配置,就可以与源代码管理系统(如 Subversion Git版本控制[团队协作工具])集成,并可以基于某个标签管理项目的发布。它也可以将其发布到分发位置供其他项目使用。Maven能够发布单独的输出,如JAR,包含其他依赖和文档的归档,或者作为源代码发布。

Maven的下载与IDE的整合

1.下载地址

http://maven.apache.org/download.cgi

2.下载后解压

解压找到settings.xml文件

在settings.xml文件中找到

  <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>maven-default-http-blocker</id>
      <mirrorOf>external:http:*</mirrorOf>
      <name>Pseudo repository to mirror external repositories initially using HTTP.</name>
      <url>http://0.0.0.0/</url>
      <blocked>true</blocked>
    </mirror>
  </mirrors>

3.在<mirrors>中部署镜像仓库</mirrors>

仓库:外网中央仓库-->国内镜像中央仓库-->本地仓库

<mirrors>
  <mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>http://maven.
      aliyun.
      com/nexus/content/repositories/central/</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>central</id>
    <name>Maven Repository Switchboard</name>
    <url>http://repo1.
      maven.
      org/maven2/</url>
    <mirrorOf>central</mirrorOf>
  </mirror>
    <mirror>
      <id>repo2</id>
      <mirrorOf>central</mirrorOf>
      <name>Human Readable Name for this Mirror.
      </name>
      <url>http://repo2.
        maven.
        org/maven2/</url>
    </mirror>
    <mirror>
      <id>ibiblio</id>
      <mirrorOf>central</mirrorOf>
      <name>Human Readable Name for this Mirror.
      </name>
      <url>http://mirrors.
        ibiblio.
        org/pub/mirrors/maven2/</url>
    </mirror>
    <mirror>
      <id>jboss-public-repository-group</id>
      <mirrorOf>central</mirrorOf>
      <name>JBoss Public Repository Group</name>
      <url>http://repository.
        jboss.
        org/nexus/content/groups/public</url>
    </mirror>
    <mirror>
      <id>google-maven-central</id>
      <name>Google Maven Central</name>
      <url>https://maven-central.
        storage.
        googleapis.
        com
      </url>
      <mirrorOf>central</mirrorOf>
    </mirror>
    <!--
    中央仓库在中国的镜像
    -->
    <mirror>
      <id>maven.
        net.
        cn</id>
      <name>oneof the central mirrors in china</name>
      <url>http://maven.
        net.
        cn/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>

4.在电脑上创建本地仓库

例:E:\Maven\apache-maven-3.9.9\rep

在settings.xml文件找到localRepository配置进去

  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
 <localRepository>E:/Maven/apache-maven-3.9.9/rep</localRepository>

该xml文件地址不支持\改为/

5.设置全局配置

在idea中的File点击Close Project

选择Configure 

找到Maven

下面就可以创建Maven项目了

6.创建Maven项目

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.maven</groupId>
    <artifactId>maven_demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

<!--项目的jar包依赖管理-->
    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.33</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.16</version>
        </dependency>
    </dependencies>

</project>

7.填写项目信息

Group Id 公司域名倒写

Artifact Id 项目名

Version 版本名

Packaging项目类型(war,jar)

Jar:java 项目War:web 项目

POM: 父项目.如果项目有子项目,项目必须是pom

Name:自定义名称,内容任意

Description: 描述.详细描述

Parent Proiect: 如果当前项目有父项目时填写

Maven项目结构

src/main/java这个目录下储存java源代码src/main/resources储存主要的资源文件。比如yml或properties配置文件和日志配置以及****mapper.xml文件。

src/test/java储存测试用的类,比如JUNIT的测试一般就放在这个目录下面

src/test/resources储存测试用的资源文件src包含了项目所有的源代码和资源文件,以及其他项目相关的文件。target编译后内容放置的文件夹(等同于建java工程的out目录)

pom.xml是Maven的基础配置文件。配置项目和项目之间关系,包括配置依赖(坐标)关系

工程关系

依赖

即A工程开发或运行过程中需要B工程提供支持,则代表A工程依赖B工程。在这种情况下,需要在pom.xml文件中增加下属配置定义依赖关系

<dependencies>
<!--定义一个具体的依赖-->
<dependency>
<!--依赖的工程所在组名-->
<groupId>groupName</groupId>
<!--依赖的工程名-->
<artifactId>artifactName</artifactId>
<!--依赖的工程版本-->
<version>versionNo</version>
<scope>system</scope>
</dependency>
</dependencies>

<!--
在scope中指定依赖的工程有效范围,其可选值有:
compile   -   编译中有效
runtime   -   运行中有效,在编译和测试环境下都不会被使用
system    -   全部中有效[默认是这个]
provided  -   当前工程中有效,有依赖时不下传到其他工程中.
test      -   只在测试有效,在编译和运行环境下都不会被使用
-->

</dependency> </dependency>中为什么需要区分这些scope?可以用来限制dependency的范围可以在不同的环境下打包不同的jar包,比如junit测试类的jar包不需要在编译运行的时候使用,就可以设置为<scope>test</scope>。 


Spring Boot

快速构建SpringBoot项目的模板网站地址:https://start.spring.io

SpringBoot所具备的特征有:

(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

(2)内嵌Tomcat或Jetty等Servlet容器;

(3)提供自动配置的starter(启动器)项目对象模型(POMS)以简化Maven配置;

(4)尽可能自动配置Spring容器;

(5)提供准备好的特性,如指标、健康检查和外部化配置;

(6)绝对没有代码生成,不需要XML配置。

1,如果使用Spring开发一个"HelloWorld"的web应用:

•创建一个web项目并且导入相关jar包。SpringMVC Servlet

•编写一个控制类(Controller)

•需要一个部署web应用的服务器如tomcat

2,Spring Boot特点:

•Spring Boot设计目的是用来简化新Spring应用的初始搭建以及开发过程。

•嵌入的Tomcat,无需部署WAR文件

•Spring Boot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

构建SpringBoot

1.在快速构建SpringBoot项目的模板网站构建

2.选择EXPLORE导出 pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.5-SNAPSHOT</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.my</groupId>
	<artifactId>myspringboot_demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>myspringboot_demo</name>
	<description>Demo project for Spring Boot</description>
	<url/>
	<licenses>
		<license/>
	</licenses>
	<developers>
		<developer/>
	</developers>
	<scm>
		<connection/>
		<developerConnection/>
		<tag/>
		<url/>
	</scm>
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
	<repositories>
		<repository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<releases>
				<enabled>false</enabled>
			</releases>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<releases>
				<enabled>false</enabled>
			</releases>
		</pluginRepository>
	</pluginRepositories>

</project>

3.创建maven项目 

maven项目的groupId和artifactId要与刚刚构建的SpringBoot的groupId和artifactId一致

4.将刚刚拷贝的代码复制在maven的项目的pom.xml文件

SpringBoot中没有web目录 需要自己创建

在main下创建webapp -->WEB-INF-->jsp等等

jsp不是springboot中默认的网页资源 需要导入jar包

<!-- jsp相关jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- jasper -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>

SpringBoot启动器

所谓的springBoot启动器其实就是一些jar包的集合。SprigBoot一共提供44种启动器。

4种基本的启动器:

1)spring-boot-starter这是Spring Boot的核心启动器,包含了自动配置、日志和YAML(配置文件yml)。

2)spring-boot-starter-actuator帮助监控和管理应用。

3)spring-boot-starter-amqp通过spring-rabbit来支持AMQP协议(Advanced Message Queuing Protocol)。

4)spring-boot-starter-aop支持面向方面的编程即AOP,包括spring-aop和AspectJ。

5)spring-boot-starter-artemis通过Apache Artemis支持JMS的API(JavaMessage Service API)。

6)spring-boot-starter-batch支持Spring Batch,包括HSQLDB数据库。

7)spring-boot-starter-cache支持Spring的Cache抽象。

8)spring-boot-starter-cloud-connectors支持Spring Cloud Connectors,简化了在像Cloud Foundry或Heroku这样的云平台上连接服务。

9)spring-boot-starter-data-elasticsearch支持ElasticSearch搜索和分析引擎,包括spring-data-elasticsearch。

10)spring-boot-starter-data-gemfire支持GemFire分布式数据存储,包括spring-data-gemfire。

11)spring-boot-starter-data-jpa支持JPA(Java Persistence API),包括spring-data-jpa、spring-orm、hibernate。

12)spring-boot-starter-data-MongoDB支持MongoDB数据,包括spring-data-mongodb。

13)spring-boot-starter-data-rest通过spring-data-rest-webmvc,支持通过REST暴露Spring Data数据仓库。

14)spring-boot-starter-data-solr支持Apache Solr搜索平台,包括spring-data-solr。

15)spring-boot-starter-freemarker支持FreeMarker模板引擎。

16)spring-boot-starter-groovy-templates支持Groovy模板引擎。

17)spring-boot-starter-hateoas通过spring-hateoas支持基于HATEOAS的RESTful Web服务。

18)spring-boot-starter-hornetq通过HornetQ支持JMS。

19)spring-boot-starter-integration支持通用的spring-integration模块。

20)spring-boot-starter-jdbc支持JDBC数据库。

21)spring-boot-starter-jersey支持Jersey RESTful Web服务框架。

22)spring-boot-starter-jta-atomikos通过Atomikos支持JTA分布式事务处理。

23)spring-boot-starter-jta-bitronix通过Bitronix支持JTA分布式事务处理。

24)spring-boot-starter-mail支持javax.mail模块。

25)spring-boot-starter-mobile支持spring-mobile。

26)spring-boot-starter-mustache支持Mustache模板引擎。

27)spring-boot-starter-Redis支持Redis键值存储数据库,包括spring-redis。

28)spring-boot-starter-security支持spring-security。做安全的

29)spring-boot-starter-social-facebook支持spring-social-facebook

30)spring-boot-starter-social-linkedin支持pring-social-linkedin

31)spring-boot-starter-social-twitter支持pring-social-twitter

32)spring-boot-starter-test支持常规的测试依赖,包括JUnit、Hamcrest、Mockito以及spring-test模块。

33)spring-boot-starter-thymeleaf支持Thymeleaf模板引擎,包括与Spring的集成。

34)spring-boot-starter-velocity支持Velocity模板引擎。

35)spring-boot-starter-web支持全栈式Web开发,包括Tomcat和spring-webmvc。

36)spring-boot-starter-websocket支持WebSocket开发。

37)spring-boot-starter-ws支持Spring Web Services。

Spring Boot应用启动器面向生产环境的还有2种,具体如下:

1)spring-boot-starter-actuator增加了面向产品上线相关的功能,比如测量和监控。

2)spring-boot-starter-remote-shell增加了远程ssh shell的支持。最后,Spring Boot应用启动器还有一些替换技术的启动器,具体如下:1)spring-boot-starter-jetty引入了Jetty HTTP引擎(用于替换Tomcat)。2)spring-boot-starter-log4j支持Log4J日志框架。

3)spring-boot-starter-logging引入了Spring Boot默认的日志框架Logback。

4)spring-boot-starter-tomcat引入了Spring Boot默认的HTTP引擎Tomcat。

5)spring-boot-starter-undertow引入了Undertow HTTP引擎(用于替换Tomcat)

例:SpringBoot单视图解析器

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.5</version><!--3.0版本以上要jdk17-->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.my</groupId>
    <artifactId>myspringboot_demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>myspringboot_demo</name>
    <description>Demo project for Spring Boot</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>8</java.version><!--根据自己的jdk版本来-->
    </properties>
    <dependencies>
        <!--springboot的web启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--使用html页面不需要这两个依赖-->
        <!-- jsp相关jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <!-- jasper -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
application.yml
#当前文件项目名称一定要是application
#配置视图解析器
spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/ #前缀
      suffix: .jsp #后缀
---
#配置tomcat端口
server:
  port: 8081
---
#配置html视图解析器 单视图解析器 跳jsp页面时要把下面的代码删掉 不然找不到jsp页面
spring:
  mvc:
    view:
      prefix: /static/html/ #前缀
      suffix: .html #后缀

视图解析器配套类

PageController

//视图解析器配套类
@Controller
public class PageController {
    @RequestMapping("/{page}")
    public String showPage(@PathVariable String page) {
        return page;
    }
}

使用resource/static的静态文件需要放行(wabapp下的文件不需要放行)

MyConfig放行类

//在springboot中没有xml文件 用java类来替代
@Configuration//等同于@Component是该注解的衍生注解 都是把当前类交给spring管理
public class MyConfig implements WebMvcConfigurer {
    //放行静态资源
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {//固定的 死记就行
        //放行static目录及其子目录下的所有文件
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");//classpath:不能省略
    }
}

jsp页面

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2024/9/28
  Time: 12:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath(); //获取当前工程的根目录
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; //项目url根目录
%>
<html>
<head>
    <base href="<%=basePath%>"> <!--这个让此文件下的路径都相对于当前工程开始-->
    <title>Title</title>
</head>
这是第一个springboot程序<br/>
<img src="images/35.png" height="400px" width="400px"><br/><br/>
<img src="static/img/36.png" height="400px" width="400px"><br/>
<%--如果想要显示该页面需要两个jar包支持--%>
<%--
<!-- jsp相关jstl -->
< dependency >
< groupId >javax.servlet</groupId>
< artifactId >jstl</artifactId>
</dependency>
<!-- jasper -->
< dependency >
< groupId >org.apache.tomcat.embed</groupId>
< artifactId >tomcat-embed-jasper</artifactId>
< scope >provided</scope>
</dependency>
--%>
</body>
</html>

html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
abc.html文件<br/>
<img src="static/img/36.png" height="400px" width="500px"><br/>
<img src="images/35.png"  height="400px" width="500px"><br/>
</body>
</html>

启动类

//当前启动类位置一定要放在controller同级不同包或者父级目录下
//这是springboot启动类
@SpringBootApplication//当前注释会自动去扫描当前类下的所有包内的子文件以及子文件下的文件
public class APP {
    public static void main(String[] args) {
        SpringApplication.run(APP.class, args);//固定的 死记就行
    }
}

Spring双视图解析器和热部署

pom.xml
        <!--视图解析器的依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
        <!--热部署的依赖--><!--让html和jsp页面不用重新启动就可以更改生效-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

ViewConfig

//使用一个配置类 来替代以前的xml配置文件
@Configuration
public class ViewConfig {
    /*
    jsp的视图解析器
    @Bean的注解的意思:InternalResourceViewResolver getInternalResourceViewResolver =new InternalResourceViewResolver();
    并把该对象交给spring容器管理
    */
    @Bean//就是xml文件中的<bean>标签</bean>
    public InternalResourceViewResolver getInternalResourceViewResolver() {
        InternalResourceViewResolver viewResolver =new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/jsp/");//前缀
        viewResolver.setSuffix(".jsp");//后缀
        viewResolver.setOrder(1);//设置优先级 数字>=0 数字越小优先级越高
        return viewResolver;
    }
    /*
    * html的视图解析器
    * FreeMarkerConfigurer  setTemplateLoaderPath("/WEB-INF/html/");//前缀
    * FreeMarkerViewResolver  setSuffix(".html");//后缀
    * */
    @Bean//前缀
    public FreeMarkerConfigurer getFreeMarkerConfigurer() {
        FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
        configurer.setTemplateLoaderPath("/WEB-INF/html/");//前缀
        configurer.setDefaultEncoding("UTF-8");
        return configurer;
    }
    @Bean//后缀
    public FreeMarkerViewResolver getFreeMarkerViewResolver() {
        FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
        resolver.setViewClass(FreeMarkerView.class);//关联前后缀
        resolver.setContentType("text/html;charset=UTF-8");
        resolver.setSuffix(".html");//后缀
        resolver.setOrder(0);//设置优先级 数字>=0 数字越小优先级越高
        return resolver;
    }
application.yml
#配置tomcat端口
server:
  port: 8082
#这是禁用页面的缓存 配合热部署使用
spring:
  thymeleaf:
    cache: false

Spring整合MyBatis(SSM)

登录案例:

 

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <packaging>war</packaging>
    <groupId>com.springboot</groupId>
    <artifactId>myspringboot_ssm</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>myspringboot_ssm</name>
    <description>myspringboot_ssm</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>3.0.3</version>
            <scope>test</scope>
        </dependency>

        <!-- jsp相关jstl -->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
            <version>1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet.jsp</groupId>
                    <artifactId>jsp-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jstl-impl</artifactId>
            <version>1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>servlet-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet.jsp</groupId>
                    <artifactId>jsp-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>javax.servlet.jsp.jstl</groupId>
                    <artifactId>jstl-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- jasper -->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <!--阿里的德鲁伊连接池 效率高 推荐使用-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.15</version>
        </dependency>


    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
application.yml
server:
  port: 8084
spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp
  #数据库的连接参数
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?verifyServerCertificate=false&useSSL=false&characterEncoding=utf8
    username: root
    password: 123456
    #type: org.springframework.jdbc.datasource.DriverManagerDataSource #mybatis中自带的数据源(连接池)
    #德鲁伊连接池(Druid)这个更高效
    type: com.alibaba.druid.pool.DruidDataSource
pojo/User
public class Users implements Serializable {
    private int id;
    private String uname;
    private String pwd;

    public Users() {
    }

    public Users(int id, String uname, String pwd) {
        this.id = id;
        this.uname = uname;
        this.pwd = pwd;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "Users{" +
                "id=" + id +
                ", uname='" + uname + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}
service/UserService

创建接口

public interface UserService {
    public Users loginUser(Users users);
}
mapper/UserMapper

使用注释开发 执行sql语句查询

@Repository
public interface UserMapper {
    @Select("select * from t_user where uname=#{uname} and pwd=#{pwd}")
    public Users loginUser(Users users);//如果传的是参数就用param 传的是对象就用属性名
}
service/impl/UserServiceImpl

实现UserService接口 注入UserMapper

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    UserMapper userMapper;
    @Override
    public Users loginUser(Users users) {
        Users users1 = userMapper.loginUser(users);
        return users1;
    }
}
controller/UserController

注入UserService(相当于 UserService userService=new UserServiceImpl();)

接收users 判断是否查询到数据 利用session方法 将值带到jsp页面

@Controller
public class UserController {
    @Autowired
    UserService userService;//相当于 UserService userService=new UserServiceImpl();

    @RequestMapping("/loginUser")
    public String loginUsers(Users users, HttpSession session) {
        Users u = userService.loginUser(users);
        if (u!=null) {
            session.setAttribute("users", u);
            //return "success";//默认请求转发
            return "redirect:/success";//重定向
        }else {
            return "fail";
        }
    }
}
controller/PageController

视图解析器配套类

@Controller
public class PageController{
    @RequestMapping("/{page}")
    public String showPage(@PathVariable String page){
        return page;
    }
}
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<form action="loginUser" method="post">
    用户名:<input type="text" name="uname"/><br/>
    密码:<input type="password" name="pwd"/><br/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

maven聚合工程

类似于Java将各个层封装为一个模块 可以使其重复调用 随时增减 实现低耦合 

将之前的案例改为maven聚合工程:

1.创建一个maven项目(父工程):可以删除src模块

2.创建module(子工程)也就是之前的各个层 例如:pojo,mapper,等......

3.管理依赖 父工程的依赖子工程可以共享 子工程需要管理自己需要的依赖

4.如果一个子工程 需要调用另一个子工程的数据 可以依赖该子工程

application-mapper.yml
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?verifyServerCertificate=false&useSSL=false&characterEncoding=utf8
    username: root
    password: 123456
  #type: org.springframework.jdbc.datasource.DriverManagerDataSource #mybatis中自带的数据源(连接池)
  #德鲁伊连接池(Druid)这个更高效
    type: com.alibaba.druid.pool.DruidDataSource
my_mapper/pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.my</groupId>
        <artifactId>my_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>my_mapper</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        <!--依赖pojo模块,相当于java中的import(导入)-->
        <dependency>
            <groupId>com.my</groupId>
            <artifactId>my_pojo</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <!--阿里的德鲁伊连接池 效率高 推荐使用-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.15</version>
        </dependency>
    </dependencies>

</project>

my_passport/application.yml 
#配置视图解析器
spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp
  profiles:
    active: mapper #关联application-mapper.yml文件,表示在当前配置问价被加载的时候,同时加载application-mapper.yml的文件
#设置tomcat的端口
server:
  port: 8083
my_passport/pom.yml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.my</groupId>
        <artifactId>my_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>my_passport</artifactId>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <!--依赖mapper模块,mapper模块依赖pojo 当前模块就间接依赖了pojo模块-->
        <dependency>
            <groupId>com.my</groupId>
            <artifactId>my_mapper</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--web工程中 需要springmvc的技术 需要依赖web启动-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- jsp解析器 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

my_pojo/pom.xml 
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.my</groupId>
        <artifactId>my_parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <artifactId>my_pojo</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>
my_parent/pom.xml(父工程的pom.xml文件)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.my</groupId>
    <artifactId>my_parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging><!--pom表示的是:当前是一个maven的聚合项目的父工程(逻辑工程 不实现功能 只用来管理模块/统一各坐标的版本)-->
    <!--父工程(逻辑工程 不实现功能 只用来管理模块/统一各坐标的版本)中的pom.xml用来管理各个子模块(子工程)-->
    <modules>
        <module>my_pojo</module>
        <module>my_mapper</module>
        <module>my_passport</module>
    </modules>

    <parent><!--子工程可以共享该数据-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值