MAVEN
01-MAVEN概述
-
Maven是专门用于管理和构建Java项目的工具,它的主要功能有:
- 提供了一套标准化的项目结构
- 提供了一套标准化的构建流程(编译,测试,打包,发布……)
- 提供了一套依赖管理机制
-
标准化的项目结构
不同IDE之间,项目结构不一样,不通用
Maven提供了一套标准化的项目结构,所有IDEA使用Maven构建的项目结构完全一样,所有IDE创建的Maven项目可以通用
-
标准化的依赖管理机制
Maven提供了一套简单的命令来完成项目构建
-
依赖管理
-
依赖管理就是管理你项目所依赖的第三方资源(jar包、插件…)
-
02-MAVEN简介
-
Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档
-
官网:http://maven.apache.org/
-
Maven模型:
-
项目对象模型(Project Object Model)
-
依赖管理模型(Dependency)
-
插件(Plugin)
-
仓库分类:
- 本地仓库:自己计算机上的一个目录
- 中央仓库:由Maven团队维护的全球唯一的仓库
- 地址:https:😕/repo1.maven.org/maven2/
- 远程仓库(私服):一般由公司团队搭建的私有仓库
当项目1需要jar包A时,在项目1里写好配置后,Maven工具就会自动取本地仓库寻找,由于Maven刚装好,是首次使用,没有该包,此时Maven工具就会取中央仓库找,找到后会自动从中央仓库下载到本地仓库此时本地仓库就有jar包了,项目就可以引用该包;当项目2也需要该jar包时,由于本地仓库中已经有该包了,故项目2可直接引用
- 当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包;
- 如果有,则在项目中直接引用;
- 如果没有,则去中央仓库中下载对应的jar包到本地仓库。
假如公司搭建了一个远程仓库(私服),当项目2需要一个jar包B,本地仓库中没有,然后先去私服中找,当私服中没有该jar包,Maven从中央仓库中寻找,并将该jar包下载到私服中,然后私服再传递给本地仓库。一般私服搭建起来之后都会将中央仓库中的所有jar包同步到私服中,从而提升访问速度;私服中也可以存放一些自己写的有版权的jar包
-
还可以搭建远程仓库,将来jar包的查找顺序变为:
本地仓库->远程仓库->中央仓库
03-MAVEN安装&配置
Maven安装配置
-
解压apache-maven-3.6.1.jar即安装完成
-
配置环境变量MAVEN_HOME为安装路径的bin目录
-
配置本地仓库:修改conf/settings.xml中的为一个指定目录
-
配置阿里云私服:修改conf/settings.xml中的标签,为其添加如下子标签:
<mirror> <id>alimaven</id> <name>aliyun</name> <url>http://maven.aliyun.com/nexus/content/group/public/</url> <mirrorOf>central</mirrorOf> </mirror>
配置环境变量:新建环境变量:
添加path:
完成之后,打开cmd,输入命令,如果出现如图提示信息则表示安装成功
Maven基本使用
- Maven常用命令
- compile:编译
- clean:清理了
- test:测试
- package:打包
- install:安装
找到测试项目web-demo,把该项目放在合适的位置(不然容易报错:系统找不到指定路径,我目前也不知道为什么),然后找到该项目下的pom文件,按住shift右键空白处,选择“在此处打开powershell窗口”,然后输入命令:mvn compile,系统自动下载并创建
mvn clean:清理刚刚创建的target目录,同时下载一些clean的插件
mvn package:将该项目的代码编译成字节码文件来打包成jar包,同样第一次使用会下载一些相关插件
build success之后,target目录中会生成一个jar包
test命令执行后会自动执行test下面Java测试用的代码
mvn install:将当前项目安装到本地仓库去
-
Maven生命周期
-
Maven构建项目生命周期描述的是依次构建过程经历了多少个事件
-
Maven对项目构建的生命周期分为3套
- clean:清理工作
- default:核心工作,例如编译、测试、打包、安装等
- site:产生报告,发布站点等
-
04-IDEA配置Maven
IDEA配置Maven环境
-
选择IDEA中File–>Settings
-
搜索maven
-
设置IDEA使用本地安装的maven,并修改配置文件路径
Maven坐标详解
-
什么是坐标?
- Maven中的坐标是资源的唯一标识
- 使用坐标来定义项目或引入项目中需要的依赖
-
Maven坐标主要组成
- groupId:定义当前Maven项目隶属于组织名称(通常是域名反写,例如:com.itheima)
- artifactId:定义当前Maven项目名称(通常是模块名称,例如order-service、good-service)
- version:定义当前项目版本号
IDEA创建Maven项目
-
创建模块,选择Maven,点击Next
在此处可以修改坐标信息,finish后apply,然后ok就可以创建了
创建好后的目录结构
测试用例中将来如果不要配置文件,则可以不加;否则可在test创建一个目录
此时可以看见resources,双击即可
-
填写模块名称,坐标信息,点击finish,创建完成
-
编写HelloWorld,并运行
IDEA导入Maven项目
将要导入项目放到一个合适的目录下(方便寻找),然后打开IDEA右侧的Maven
然后点击+号添加要导入的项目,找到项目下的pom文件,双击即可添加
如果找不到上述右侧的maven,可以找到顶部的view–>appearence–>Tool Window Bars
配置Maven-Helper插件
- 选择IDEA中File–>Settings
- 选择Plugins
- 搜索Maven,选择第一个Maven Helper,点击Install安装,弹出面板中点击Accept
- 重启IDEA
安装好后可以方便如图的操作
05-依赖管理&依赖范围
依赖管理
使用坐标导入jar包
- 在pom.xml中编写标签
- 在标签中使用引入坐标
- 定义坐标的goupId、artifactId、version
- 点击刷新按钮,使坐标生效
如果没有提示,就搜一下 mysql maven
(反正百度是别想找到的)
点进去后有各种不同的版本,点进去后复制这段代码到pom文件中,当版本号红色报错时,点击右上角刷新按钮刷新则开始自动下载,同样,如果将刚刚那段依赖删掉,点击刷新生效
使用坐标导入jar包-自动导入
- 选择IDEA中File–>Settings
- 在弹出的面板中找到Build Tools
- 选择Any Changes,点击OK即可生效
使用坐标导入jar包-快捷方式
- 在pom.xml中按alt+insert,选择Dependency
- 在弹出的面板中搜索对应坐标,然后双击选中对应坐标
- 点击刷新按钮,使坐标生效
依赖范围
-
通过设置坐标的依赖范围(scope),可以设置对应jar包的作用范围:编译环境、测试环境、运行环境
-
默认值:compile
Mybatis
01-Mybatis简介
什么是Mybatis?
- Mybatis是一款优秀的持久层框架,用于简化JDBC开发
- Mybatis本是Apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到Google code,并改名为MyBatis。2013年11月迁移到Github
- 官网:https://mybatis.net.cn/
持久层
- 负责将数据到保存数据的那一次代码
- JavaEE三层加构:表现层、业务层、持久层
框架
- 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型
- 在加构的基础之上构建如啊你就按编写更加高效、规范、通用、可扩展
02-Mybatis快速入门
查询user表中所有数据
-
创建user表,添加数据
create database mybatis; use mybatis; drop table if exists tb_user; create table tb_user( id int primary key auto_increment, username varchar(20), password varchar(20), gender char(1), addr varchar(30) ); INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '男', '北京'); INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津'); INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');
-
创建模块,导入坐标
新建模块,选择maven,输入模块名称,OK
进官网的入门,
,将这块代码复制进项目的pom文件中,类似的添加其他需要的依赖。将logback.xml(资料中)复制进src-main下的resources中,(有了这个文件后运行结果中就可以看到彩色的提示信息)
-
编写MyBatis核心配置文件–>替换连接信息 解决硬编码问题
在resources下创建mybatis.xml文件,将下面的代码复制进来
然后将其中相应的信息修改
加载sql映射文件
在resources下创建一个文件:UserMapper.xml,并将上面官网中的内容复制进来
如果需要将数据包装成user类型,Java目录下就要有个user类
Mapper文件写好后,就需要在映射的位置将mapper文件加载进来
完成之后就可以来编码了
-
编写SQL映射文件–>统一管理sql语句,解决硬编码问题
-
编码
-
定义POJO类
package com.itheima.pojo; public class User { private Integer id; private String username; private String password; private String gender; private String addr; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", gender='" + gender + '\'' + ", addr='" + addr + '\'' + '}'; } }
-
加载核心配置文件,获取SqlSessionFactory对象
复制该段代码进MyBatisDemo.java中
-
获取SqlSession对象,执行SQL语句
-
释放资源
package com.itheima; import com.itheima.pojo.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.List; /** * MyBatis快速入门代码 */ public class MyBatisDemo { public static void main(String[] args) throws IOException { //1.加载mybatis的核心配置文件,获取SqlSessionFactory String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //2.获取SqlSession对象,用它来执行sql SqlSession sqlSession = sqlSessionFactory.openSession(); //3.执行sql List<User> users = sqlSession.selectList("test.selectAll"); System.out.println(users); //4.释放资源 sqlSession.close(); } }
-
03-解决SQL语句警告提示
解决SQL映射文件的警告提示
-
产生原因:Idea和数据库没有建立连接,不识别表信息
-
解决方式:在Idea中配置MySQL数据库
一般只需要填写三个圈出的地方,填好后,点击Test Connection测试连接,连接mysql8.0.xx时如果报错“Server returns invalid timezone. Go to ‘Advanced’ tab and set ‘serverTimezone’ property manually.”,则是时区的问题,有三种解决方法,我认为的最好的解决办法是:
修改配置文件,window下是my.ini,linux下是my.cnf,优点:可以永久修改,因为每次启动时mysql都会去读这个配置文件,修改后重启下mysql服务就行了
注:这里的 default-time_zone=’+08:00’ 一定要写在 [mysqld] 下,而不是 [mysql] 或 [client]之下,否则会报mysql: [ERROR] unknown variable ‘default-time_zone=+08:00’. 错误
连接测试通过后,会出现绿色小勾,此时点击OK即可。
然后右侧就会出现所连接的数据库及其内部的表
在此处也可以执行sql语句,点击1处即可在左侧空白处写sql语句,然后点击2处运行
同样也可以选中代码然后右键运行
04-Mapper代理开发
-
目的
-
解决原生方式中的硬编码
-
简化后期执行SQL
-
使用Mapper代理方式完成入门案例
-
定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
在resources下面新建一个目录:com/itheima/mapper
将UserMapper.xml拖进该目录下,编译一下,Mapper接口和SQL映射文件就在同一目录下了
-
设置SQL映射文件的namespace属性为Mapper接口全限定名
-
在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
此处SQL映射文件中的sql语句id为selectAll
Mapper接口中就要有该名称的方法
小tips:由于此处sql语句查询结果返回的是许多个结果,所以Mapper接口中定义的方法的返回值应为集合,类型为结果相应的类型User
由于SQL映射文件UserMapper.xml的路径改了,所以Mybatis-config.xml中指定sql映射文件路径也要随之改变
修改方法:
找到sql映射文件UserMapper.xml右键选中Copy Path,然后选择Path From Source Root,粘贴到源路径处。
-
编码
- 通过SqlSession的getMapper方法获取Mapper接口的代理对象
- 调用对应方法完成sql的执行
参照上面的MyBatisDemo.java 中的代码,只需要改如下一小部分代码
细节:如果Mapper接口名称和SQL映射文件名称相同,并在统一目录下,则可以使用包扫描的方法简化SQL映射文件的加载
<mappers> <!--加载sql的映射文件--> <!--<mapper resource="com/itheima/mapper2/UserMapper.xml"/>--> <package name="com.itheima.mapper"/> </mappers>
即入宫类似于UserMapper.xml的文件有许多,如OrderMapper、goodsMapper等等,则可以选择使用Mapper代理方式
05-Mybatis核心配置文件
MyBatis核心配置文件的顶层结构如下:
即可以配置多个environment,这样就可以连接多个数据库。
-
类型别名(typeAliases)
<typeAliases> <package name="com.itheima.pojo"/> </tyepeAliases>
细节:配置各个标签时,需要遵守前后顺序
也不需要区分大小写