一 maven
1. Maven的相关概念
1.1 项目开发中遇到的问题
(1)都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行?
(2)为什么在我的机器上可以正常打包,而配置管理员却打不出来?
(3)项目组加入了新的人员,我要给他说明编译环境如何设置,但是让我挠头的是,有些细节我也记不清楚了。
(4)我的项目依赖一些jar包,我应该把他们放哪里?放源码库里?
(5)这是我开发的第二个项目,还是需要上面的那些jar包,再把它们复制到我当前项目的svn库里吧
(6)现在是第三次,再复制一次吧 ----- 这样真的好吗?
(7)我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有五个项目组在使用它了,今天我发现了一个bug,并修正了它,我会把jar包通过邮件发给其他项目组,这不是一个好的分发机制,太多的环节可能导致出现bug
(8)项目进入测试阶段,每天都要向测试服务器部署一版。每次都手动部署,太麻烦了。
1.2 解决方案
需要一个工具进行项目管理,对项目中的jar包进行管理、jar包的版本管理、项目的打包的流程管理。实现一步构建
(1)Ant:
可以对项目进行构建。缺少生命周期的管理,需要自己手工定义。需要自己定义一个build.xml,缺少jar包的管理。对工程的目录结构没有约束
(2)Maven
拥有约定,知道你的代码在哪里,该放到哪里去。拥有一个生命周期,例如执行mvn install就可以自动执行编译,测试,打包等构件过程,只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮你处理其他事情
1.3 什么是maven
maven翻译为“专家”,“内行”。Maven是基于 项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具
Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。
Maven主要有两个功能:
(1)项目构建
(2)依赖管理
1.4 什么是构建
maven定义的工程构建生命周期:
编译的时候会有些中间文件,当你再次编译时就要将这些文件清理掉,所以在编译前会有清理这一步
1.5 Maven的模型
2. Maven的安装
第一步:安装jdk
第二步:把maven解压缩
第三步:配置环境变量MAVEN_HOME.
E:\development\apache-maven\apache-maven-3.6.2-bin\apache-maven-3.6.2
第四步:在path中添加%MAVEN_HOME%/bin
第五步:测试
Mvn -v测试
3. maven在eclipse中使用
3.1 在eclipse中安装maven
Window---->preferences得到如下图
点击apply and close即可
User Settings 用户自定义设置
3.2 创建maven工程
(1)第一种形式:java项目
最终可得到如下形式的项目:
(2)第二种形式:web项目
前面步骤同上
得到如下项目
配置pom.xml文件
若想添加mysql的jar包,可以直接在依赖处添加mysql的依赖坐标(有网的情况下,否则就得配置本地仓库)
在pom.xml的依赖处添加mysql的依赖坐标,如下图
3.3 创建本地仓库
maven安装包--->conf---->setting.xml
由于每次下载jar包都需要去外网下载,网速会很慢,所以可以配置访问阿里云的镜像(国内),这样下载相应的包速度就很快
这样setting.xml文件就算设置好了,接下来直接在eclipse中添加配置文件:windows-preference-Maven里面的User-Settings,里面有一个是全局设置,一个是用户设置,最后一个是本地仓库位置(前面两个配置好,update后会自动填写),把两个设置都改为你的settings路径就行了
Could not read settings.xml
Could not read settings.xml 字面上的意思是读取不了这个文件,说明你的文件里面的内容有问题
1、编码问题:内容里面最好不要有中文,配置完之后一定要以 utf-8 的形式保存
2、空格问题:允许换行,但是不允许有多个空格的出现
3、配置仓库路径的时候不要用的是 / 符号
一开始,本地仓库是个空的文件夹,当我们创建一个项目时,本地仓库中就会自动多一些jar包,如下图
若想将项目放到本地仓库,可以如下操作
二. springboot
springboot是spring的一个全新的框架,其能简化项目搭建过程和开发效率
1. 整合spring和springmvc
1.1 整合流程:
(1)使用maven构建web项目
(2)在pom文件中添加springboot的父工程依赖(必须)
(3)添加webstarter的依赖
说明:Spring Boot提供了很多”开箱即用“的依赖模块,都是以spring-boot-starter-xx作为命名的。举个例子来说明一下这个起步依赖的好处,比如组装台式机和品牌机,自己组装的话需要自己去选择不同的零件,最后还要组装起来,期间有可能会遇到零件不匹配的问题。耗时又消力,而品牌机就好一点,买来就能直接用的,后续想换零件也是可以的。相比较之下,后者带来的效果更好点(这里就不讨论价格问题哈),起步依赖就像这里的品牌机,自动给你封装好了你想要实现的功能的依赖。就比如我们之前要实现web功能,引入了spring-boot-starter-web这个起步依赖。
(4)编写启动类
@SpringBootApplication
public class AppStart {
public static void main(String[] args) {
SpringApplication.run(AppStart.class, args);
}
}
(5)编写控制器
@Controller
public class PageController {
@RequestMapping("/")
public String index() {
return "index.html";
}
}
注意:springboot默认存放静态资源的地方为src/main/resources下的static文件夹
点击启动类,开启springboot(不需要再点击tomcat开启了), 浏览器中输入请求:http://localhost:8080/(此处url不需要输入项目名,因为以前是一个tomcat中包含多个项目,此处只有一个)
1.2 注解
1.2.1
特殊的类,可以写在类上,方法上,属性是哪个,具有特殊的含义
@Controller @Service @Repository(即@Component): 用于spring容器加载相关类的
@Mapper: mybatis为接口和sql语句创建代理对象
1.2.2 :@SpringBootApplication (这是一个组合注解)
a 标明此类是本项目的快捷配置启动类
b 可以自动的扫描当前类所在的包以及子包中的所有的添加Component 注解的Controller,service,mapper的类
c 根据项目中的jar包自动完成必要配置
1.2.3 @Configuration :替代xml配置
此处Configuration上为什么要有@Component注解?
框架可以在代码中(类)完成自动配置或者自定义的配置,在这些配置类需要交给容器管理,所以需要此注解进行包的扫描
2. 整合mybatis操作数据库
1.1 大致流程
(1)添加依赖,mysql的驱动
(2)application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/db_demo1?useSSL=false&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=feng
spring.datasource.driverClassName=com.mysql.jdbc.Driver mybatis.type-aliases-package=com._51doit.pojo
此处也可以改用.yml文件
spring
datasource
url = jdbc:mysql://localhost:3306/db_demo?useSSL=false&characterEncoding=UTF-8
username = root
password = root
driverClassName = com.mysql.jdbc.Driver
(3)Controller---->service---->mapper
controller
service
mapper
pom.xml文件
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com._51doit</groupId>
<artifactId>spring_boot</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>spring_boot Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- spring boot -->
<!-- 父級依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<!-- 起步依賴 spring-boot-starter-xx -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jsp spring boot 默认不支持jsp,所以加此依赖 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<scope>compile</scope>
</dependency> <!-- dao -->
<!-- mysql驱动 -->
<!-- mybatis -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency> <!--tools 自动重新启动项目 代码重新编译 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>spring_boot</finalName>
</build>
</project>
1.2 常见的配置文件
1.2.1 .xml
(1)标签的形式,层级结构,语法严谨,有约束
(2)解析方式:
a. document 对象解析,好处可以操作任意的元素,其是加在到内存中所以不能解析大文件
b. sax 逐行解析,不能操作任意的元素,可以解析大文件
1.2.2 properties
key=value的形式
Properties类解析
1.2.3 .yml配置文件
spring
datasource
url = jdbc:mysql://localhost:3306/db_demo?useSSL=false&characterEncoding=UTF-8
username = root
password = root
driverClassName = com.mysql.jdbc.Driver