Maven&MyBatis

0x00 简介

来源于在黑马程序员发布在哔站上javaweb教学内容 学到的一些jMaven&MyBatis相关的知识,记录一下。

0x00 Maven功能

Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

  • 提供了一套标准化的项目结构
  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)
  • 提供了一套依赖管理机制

0x01 Maven简介

Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

1.1 Maven模型

  • 项目对象模型 (Project Object Model)
  • 依赖管理模型(Dependency)
  • 插件(Plugin)

1.2 仓库

大家想想这样的场景,我们创建Maven项目,在项目中使用坐标来指定项目的依赖,那么依赖的jar包到底存储在什么地方
呢?其实依赖jar包是存储在我们的本地仓库中。而项目运行时从本地仓库中拿需要的依赖jar包。
仓库分类:

  • 本地仓库:自己计算机上的一个目录
  • 中央仓库:由Maven团队维护的全球唯一的仓库

地址: https://repo1.maven.org/maven2/

  • 远程仓库(私服):一般由公司团队搭建的私有仓库

今天我们只学习远程仓库的使用,并不会搭建。
当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:

  • 如果有,则在项目直接引用;
  • 如果没有,则去中央仓库中下载对应的jar包到本地仓库。

0x02 Maven安装配置

  • 解压 apache-maven-3.6.1.rar 既安装完成

建议解压缩到没有中文、特殊字符的路径下。如课程中解压缩到 D:\software 下。
解压缩后的目录结构如下:

bin目录 : 存放的是可执行命令。mvn 命令重点关注。
conf目录 :存放Maven的配置文件。 settings.xml 配置文件后期需要修改。
lib目录 :存放Maven依赖的jar包。Maven也是使用java开发的,所以它也依赖其他的jar包。
  • 配置环境变量 MAVEN_HOME 为安装路径的bin目录

此电脑 右键 --> 高级系统设置 --> 高级 --> 环境变量
在系统变量处新建一个变量 MAVEN_HOME
在 Path 中进行配置
打开命令提示符进行验证,出现如图所示表示安装成功

  • 配置本地仓库

修改 conf/settings.xml 中的 为一个指定目录作为本地仓库,用来存储jar包。

  • 配置阿里云私服

中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。
修改 conf/settings.xml 中的 标签,为其添加如下子标签:

0x03 Maven基本使用

3.1Maven 常用命令

compile :编译
clean:清理
test:测试
package:打包
install:安装

3.2 Maven 生命周期

Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件
Maven 对项目构建的生命周期划分为3套:
clean :清理工作。
default :核心工作,例如编译,测试,打包,安装等。
site : 产生报告,发布站点等。这套声明周期一般不会使用

1.4 IDEA使用Maven
以后开发中我们肯定会在高级开发工具中使用Maven管理项目,而我们常用的高级开发工具是IDEA,所以接下来我们会讲解
Maven在IDEA中的使用。

0x04 IDEA配置Maven环境

4.1 IDEA配置Maven环境

我们需要先在IDEA中配置Maven环境:

  • 选择 IDEA中 File --> Settings
  • 搜索 maven
  • 设置 IDEA 使用本地安装的 Maven,并修改配置文件路径

4.2 Maven 坐标详解

什么是坐标?

  • Maven 中的坐标是资源的唯一标识
  • 使用坐标来定义项目或引入项目中需要的依赖

Maven 坐标主要组成

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
  • artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
  • version:定义当前项目版本号

注意:

  • 上面所说的资源可以是插件、依赖、当前项目。
  • 我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。

4.3 IDEA 创建 Maven项目

  • 创建模块,选择Maven,点击Next
  • 填写模块名称,坐标信息,点击finish,创建完成
  • 编写 HelloWorld,并运行

4.4 IDEA 导入 Maven项目
大家在学习时可能需要看老师的代码,当然也就需要将老师的代码导入到自己的IDEA中。我们可以通过以下步骤进行项目的
导入:

  • 选择右侧Maven面板,点击 + 号
  • 选中对应项目的pom.xml文件,双击即可
  • 如果没有Maven面板,选择

View --> Appearance --> Tool Window Bars
可以通过下图所示进行命令的操作:

配置 Maven-Helper 插件

  • 选择 IDEA中 File --> Settings
  • 选择 Plugins
  • 搜索 Maven,选择第一个 Maven Helper,点击Install安装,弹出面板中点击Accept
  • 重启 IDEA

安装完该插件后可以通过 选中项目右键进

0x05 依赖管理

5.1 使用坐标引入jar包
使用坐标引入jar包的步骤:

  • 在项目的 pom.xml 中编写 标签
  • 在 标签中 使用 引入坐标
  • 定义坐标的 groupId,artifactId,version
  • 点击刷新按钮,使坐标生效

注意:

  • 具体的坐标我们可以到如下网站进行搜索
  • https://mvnrepository.com/

快捷方式导入jar包的坐标:
每次需要引入jar包,都去对应的网站进行搜索是比较麻烦的,接下来给大家介绍一种快捷引入坐标的方式

  • 在 pom.xml 中 按 alt + insert,选择 Dependency
  • 在弹出的面板中搜索对应坐标,然后双击选中对应坐标
  • 点击刷新按钮,使坐标生效

自动导入设置:
上面每次操作都需要点击刷新按钮,让引入的坐标生效。当然我们也可以通过设置让其自动完成

  • 选择 IDEA中 File --> Settings
  • 在弹出的面板中找到 Build Tools
  • 选择 Any changes,点击 ok 即可生效

5.2 依赖范围
通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。
如下图所示给 junit 依赖通过 scope 标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。

那么 scope 都可以有哪些取值呢?

  • compile :作用于编译环境、测试环境、运行环境。
  • test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值
  • provided :作用于编译环境、测试环境。我们后面会学习 servlet-api ,在使用它时,必须将 scope 设置为该值,不然运行时就会报错
  • runtime : 作用于测试环境、运行环境。jdbc驱动一般将 scope 设置为该值,当然不设置也没有任何问题

注意:

  • 如果引入坐标不指定 scope 标签时,默认就是 compile 值。以后大部分jar包都是使用默认值。

0x06 Mybatis概述

6.1 Mybatis概念

  • MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发
  • MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了googlecode,并且改名为MyBatis 。2013年11月迁
  • 移到Github  官网:https://mybatis.org/mybatis-3/zh/index.html

持久层:

  • 负责将数据到保存到数据库的那一层代码。
  • 以后开发我们会将操作数据库的Java代码作为持久层。而Mybatis就是对jdbc代码进行了封装。
  • JavaEE三层架构:表现层、业务层、持久层
  • 三层架构在后期会给大家进行讲解,今天先简单的了解下即可。

框架:

  • 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
  • 在框架的基础之上构建软件编写更加高效、规范、通用、可扩展

举例给大家简单的解释一下什么是半成品软件。大家小时候应该在公园见过给石膏娃娃涂鸦
有一个石膏娃娃,这个就是一个半成品。你可以在这个半成品的基础上进行不同颜色的涂鸦
了解了什么是Mybatis后,接下来说说以前 JDBC代码 的缺点以及Mybatis又是如何解决的。
6.2 JDBC 缺点
下面是 JDBC 代码,我们通过该代码分析都存在什么缺点:

  • 硬编码
    • 注册驱动、获取连接

上图标1的代码有很多字符串,而这些是连接数据库的四个基本信息,以后如果要将Mysql数据库换成其他的关系型
数据库的话,这四个地方都需要修改,如果放在此处就意味着要修改我们的源代码。

    • SQL语句

      上图标2的代码。如果表结构发生变化,SQL语句就要进行更改。这也不方便后期的维护。

  • 操作繁琐
    • 手动设置参数
    • 手动封装结果集

6.3 Mybatis 优化

  • 硬编码可以配置到配置文件
  • 操作繁琐的地方mybatis都自动完成

0x07 Mybatis快速入门

需求:查询user表中所有的数据

  • 创建user表,添加数据
  • 创建模块,导入坐标

在创建好的模块中的 pom.xml 配置文件中添加依赖的坐标

注意:需要在项目的 resources 目录下创建logback的配置文件

  • 编写 MyBatis 核心配置文件 -- > 替换连接信息 解决硬编码问题

在模块下的 resources 目录下创建mybatis的配置文件 mybatis-config.xml

 

  • 编写 SQL 映射文件 --> 统一管理sql语句,解决硬编码问题

在模块的 resources 目录下创建映射配置文件 UserMapper.xml ,内容如下:

  • 编码
    • 在 com.itheima.pojo 包下创建 User类
    • 在 com.itheima 包下编写 MybatisDemo 测试类

0x08 Mybatis代理开发

8.1 Mapper代理开发概述

之前我们写的代码是基本使用方式,它也存在硬编码的问题,如下:
这里调用 selectList() 方法传递的参数是映射配置文件中的 namespace.id值。这样写也不便于后期的维护。如果使用
Mapper 代理方式(如下图)则不存在硬编码问题。
通过上面的描述可以看出 Mapper 代理方式的目的:

  • 解决原生方式中的硬编码
  • 简化后期执行SQL

8.2 使用Mapper代理要求

使用Mapper代理方式,必须满足以下要求:

  • 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。
  • 设置SQL映射文件的namespace属性为Mapper接口全限定名
  • 在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致

0x09 Mybatis核心配置文件

核心配置文件中现有的配置之前已经给大家进行了解释,而核心配置文件中还可以配置很多内容。我们可以通过查询官网看可以配置的内容

9.1 多环境配置

在核心配置文件的 environments 标签中其实是可以配置多个 environment ,使用 id 给每段环境起名,在
environments 中使用 default='环境id' 来指定使用哪儿段配置。我们一般就配置一个 environment 即可。

9.2 类型别名

在映射配置文件中的 resultType 属性需要配置数据封装的类型(类的全限定名)。而每次这样写是特别麻烦的,Mybatis
提供了 类型别名 (typeAliases) 可以简化这部分的书写。

 

posted @ 2022-07-15 13:52  WeQi_Blog  阅读(62)  评论(0编辑  收藏  举报