day05 Maven的基本使用、Mybatis逆向工程
Maven
- Maven 是一个流行的 Java 项目管理工具,它提供了一种统一的构建方式和依赖管理机制,可以自动化构建、测试、打包、发布和部署 Java 应用程序。它采用了约定优于配置的理念,将项目开发过程中的各种操作(如编译、打包、测试等)抽象成一系列标准化的生命周期阶段,简化了项目构建和管理的流程。
Maven 模型
- Maven 的组成
- 项目对象模型 (Project Object Model):即自己的项目
- 依赖管理模型 (Dependency):即引入的其他 jar 包
- 插件 (Plugin):打包,编译,测试等都依赖插件运行

web 项目的结构
- Maven 是专门用于管理和构建 Java 项目的工具,它的主要功能有:
- 提供了一套标准化的项目结构
- 提供了一套标准化的构建流程(编译,测试,打包,发布……)
- 提供了一套依赖管理机制

- maven 项目标准化的构建流程
- 编译=>测试=>打包=>发布
- maven 的生命周期
- 同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。例如默认(default)生命周期如下:compile=>test=>package=>install
- maven web 的项目结构
- 开发中的项目
- 开发完成部署的 Web 项目

- 编译后的 Java 字节码文件和 resources 的资源文件,会被放到 WEB-INF 下的 classes 目录下
- pom.xml 中依赖坐标对应的 jar 包,会被放入 WEB-INF 下的 lib 目录下
- 开发中的项目
插件
- clear 清除
- compile 编译(生成 target 目录)
- package 打包(target 目录中生成 jar 包)
- install 安装(在本地仓库中生成 jar 包)
- deploy 部署(在远程仓库中生成 jar 包)
仓库
分类:
- 本地仓库:自己计算机上的一个目录
- 远程仓库 (私服):一般由公司团队搭建的私有仓库 (一般改为阿里巴巴远程仓库)
- 中央仓库:由 Maven 团队维护的全球唯一的仓库
仓库的查找顺序
- 本地仓库 --> 远程仓库 --> 中央仓库
配置
- 配置本地仓库
- 修改
conf\settings.xml中的<localRepository>为一个指定目录作为本地仓库,用来存储 jar 包。
- 修改
- 配置远程仓库(阿里云私服)
- 修改
conf/settings.xml中的<mirrors>标签,为其添加如下子标签:
- 修改
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>- 配置本地仓库
Idea 使用 maven 创建 web 项目
- 使用骨架的方式创建 Maven Web 项目
- 不使用骨架的方式创建 Maven Web 项目
maven 的基本使用
- 坐标的组成
- 组织 id
- 项目 id
- 版本号
- maven 的依赖管理
- 依赖的坐标配置
- 依赖的范围:
<scope>标签- compile(log4j)(默认) 主代码、测试代码、打包
- test(junit) 测试代码
- provided(servlet-api) 主代码、测试代码
- runtime(jdbc) 打包
- 可选依赖:
<optional>true</optional>- 其他引用该坐标的项目将对该坐标不可见
- 依赖的范围:
- 依赖具有传递性
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
- maven 的依赖冲突
- 打开 pom 文件,点击下方的 Dependency Analyzer 查看依赖冲突
- 依赖传递中的冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 第一声明优先: 如果不同依赖,依赖相同 jar 包的不同版本,都在同一个层次,先定义的优先级高
- 如何解决依赖冲突
- 排除依赖:使用
<exclusions>标签排除部分 jar 包的依赖
- 排除依赖:使用
- 依赖的坐标配置
mybaits 逆向工程
- 使用步骤:
- pom.xml 中配置 mybatis-generator-maven-plugin 插件
- 配置 generatorConfig.xml 配置文件
- 点击 maven mybatis-generator-maven-plugin 插件自动生成数据访问层
- 使用 mybatis 逆向工程创建数据访问层
- generatorConfig.xml 即为逆向工程插件的配置文件
- 配置数据库的参数
- 配置生成实体类,mapper 接口,mapper 映射文件的位置
- 库中需要自动生成的表,以及生成的对应实体类的类名
- 使用注意:非第一次生成的 java 文件会被覆盖,非第一次生成的映射文件会被追加
- 实体包中 Example 文件是查询使用的参数类
- generatorConfig.xml 即为逆向工程插件的配置文件
mybatis 的配置文件
<?xml version="1.0" encoding="UTF-8" ?><!--文档类型说明-->
<!--导入第三方约束文件,表示本文件在准守xml语法的同时还要准守这里的mybatis-3-config.dtd(mybatis的主配置文件)文件中制定的语法-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"><!--dtd文件为约束文件,作为下面xml文件的规范-->
<configuration>
<!--导入properties文件,可省略-->
<properties resource="db.properties"/>
<!--实体类设置别名-->
<typeAliases>
<!--单个配置某个全限定名-->
<!-- <typeAlias type="entity.Student" alias="Student"></typeAlias>-->
<!--统一配置某个包下的全限定名为类的类名-->
<package name="priv.note.entity"/>
</typeAliases>
<!-- environments:指定配置环境。例如开发、测试、生产环境 -->
<environments default="development"><!--指定默认配置环境为开发环境-->
<environment id="development"><!--配置环境,可能有多个-->
<transactionManager type="JDBC"/><!--事务管理器(用jdbc的事务管理器来管理)-->
<!--配置数据源:数据库来自哪里 -->
<dataSource type="POOLED"><!--POOLED:连接池,采用连接池的方式获取连接-->
<!--四大参数:properties文件的key使用,分级区分,避免命名冲突-->
<property name="driver" value="${jdbc.driver}"/><!--这里的${driver}来自properties-->
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--统一配置某个包下的xml映射文件(xml的文件名是根据接口名创建),使用该方法的映射文件名和接口名必须相同-->
<package name="priv.note.mapper"/>
</mappers>
</configuration>
数据库的 properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/stage2?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123
generatorConfig 的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!--
targetRuntime: 执行生成的逆向工程的版本
MyBatis3Simple: 生成基本的CRUD(简洁版)
MyBatis3: 生成带条件的CRUD(完整版)
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<commentGenerator>
<!--去除生成的注释-->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库的连接信息,按自己要连接的数据库信息填即可 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/stage2"
userId="root"
password="123">
<!--解决mysql驱动升级到8.0后不生成指定数据库代码的问题-->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!-- javaBean的生成策略,按实际路径填写-->
<javaModelGenerator targetPackage="priv.note.entity"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- SQL映射文件的生成策略,按实际路径填写 -->
<sqlMapGenerator targetPackage="priv.note.mapper"
targetProject=".\src\main\resources">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- Mapper接口的生成策略,按实际路径填写 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="priv.note.mapper"
targetProject=".\src\main\java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 逆向分析的表 -->
<!--tableName对应数据库中的表名-->
<!-- domainObjectName属性指定生成出来的实体类的类名 -->
<table tableName="emp" domainObjectName="Emp"/>
<table tableName="dep" domainObjectName="Dep"/>
</context>
</generatorConfiguration>



