Maven & Mybatis
Maven
一 Maven
1.1 基本信息
- Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目模型(POM)
- POM:项目对象模型
- 作用:
- 项目构建
- 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
- 统一开发结构
1.2 下载与安装
环境配置
cmd运行mvn显示
表示成功
1.3 基础概念
- 仓库:用于存储资源,包含各种jar包
- 本地仓库
- 远程仓库
- 私服:部门/公司范围内的存储资源的仓库
- 私服不对外共享,保存知识产权
- 中央仓库:MAVEN团队维护
- 私服:部门/公司范围内的存储资源的仓库
- 坐标:用于描述仓库中资源的位置
- 主要组成
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
- artifactId:定义当前Maven项目名称(通常是模块名称)
- version:版本号
- packaging:定义项目打包方式
- https://mvnrepository.com
- 主要组成
- 本地仓库配置
- 默认在
- <img src=(https://myl-mdimg.oss-cn-beijing.aliyuncs.com/TyporaImg/maven.assets/image-20220924112323002.png“ width=”300” height = “150” />
- 修改:
- <img src=(https://myl-mdimg.oss-cn-beijing.aliyuncs.com/TyporaImg/maven.assets/image-20220924112358368.png“ width=”400” height = “150” />
- <img src=(https://myl-mdimg.oss-cn-beijing.aliyuncs.com/TyporaImg/maven.assets/image-20220924112611231.png“ width=”500” height = “250” />
- 远程仓库配置
- 修改位置(同样是在settings.xml中修改)
- <img src=(https://myl-mdimg.oss-cn-beijing.aliyuncs.com/TyporaImg/maven.assets/image-20220924114120426.png“ width=”600” height = “300” />
二 Maven项目
2.1 创建项目
目录结构
<img src=(https://myl-mdimg.oss-cn-beijing.aliyuncs.com/TyporaImg/maven.assets/image-20220924115223250.png“ width=”200” height = “300” />
- resources放配置文件,java放源代码
src同层目录下要创建一个pom.xml文件
maven项目构建命令
mvn compile
:编译mvn clean
:清理mvn test
:测试mvn package
:打包mvn install
:安装到本地仓库
插件创建工程
创建工程
1
2
3
4
5mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false创建java工程
1
2
3mvn archetype:generate -DgroupId=com.ithima -DartifactId=java-project -
DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -
DinteractiveMode=false创建web工程
1
2
3mvn archetype:generate -DgroupId=com.ithima -DartifactId=web-project -
DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -
DinteractiveMode=false
IDEA
2.2 依赖管理
依赖配置
依赖指当前项目运行所需要的jar包,一个项目有多个依赖
```java
<!-- 设置具体的依赖 ——> <dependency> <!-- 依赖所属群组 ——> <groupId>junit</groupId> <!-- 依赖所属项目id ——> <artifactId>junit</artifactId> <!-- 依赖版本号 ——> <version>3.8.1</version> </dependency>
</dependencies>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
- 依赖传递:A依赖了B、B依赖了C,则A可以直接使用C(间接依赖)
- 层级优先:当出现了冲突的时候,以层级确定优先级,层级浅的优先使用
- 声明优先:先声明的优先
- 可选依赖:对外隐藏当前所依赖的资源
- 加一个 `<optional>true</optional>`
- 排除依赖:不想使用依赖的包所依赖的东西
- ```
<exclusions>
<exclusion>(添加所需要排除的坐标,不写版本,因为会排除所有的版本)</exclusion>
<exclusion></exclusion>
<exclusion></exclusion>
</exclusions>
依赖范围:
标签 - 作用范围:主程序、测试程序范围、是否参与打包
- 依赖范围的传递性:带有依赖范围的资源在进行传递的时候,作用范围将受到影响
- 作用范围:主程序、测试程序范围、是否参与打包
三 生命周期与插件
3.1 项目构建生命周期
maven构建生命周期描述的是一次构建过程中经历了多少个事件
- clean:清理工作
- pre-clean
- clean
- post-clean
- default:核心工作,例如编译、测试、打包、部署等
- site:产生报告,发布站点等
- clean:清理工作
3.2 插件
- 插件与声明周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
- 默认maven在各个生命周期上绑定有预设的功能
- 通过插件可以自定义其他功能
MyBatis
一 hello world
maven 3.6.3
jdk 1.8
mysql 5.1.3
junit 4.12
mybatis 3.5.7
log4j 1.2.17
Maven xml配置文件如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<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>org.example</groupId>
<artifactId>MyBatis</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>18</maven.compiler.source>
<maven.compiler.target>18</maven.compiler.target>
</properties>
<dependencies>
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- junit测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- MySQL驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.3</version>
</dependency>
</dependencies>
</project>
1.2 创建Mybatis核心配置文件
习惯上命名mybatis-config.xml,整合Spring后这个配置文件可以省略
用于配置连接数据库的环境以及MyBatis的全局配置信息
核心配置文件存放的位置是:src/main/resources目录下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> 使用本地mysql中名为mybatis的数据库
<property name="username" value="root"/> 用户名
<property name="password" value="mysql"/> 密码
</dataSource>
</environment>
</environments>
<!-- 引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
1.3 创建mapper接口
- MyBatis中的mapper接口相当于以前的dao,但是区别在于mapper只是接口,不需要提供实现类
1 | package mybatis.mapper; |
1.4 创建MyBatis的映射文件
相关概念:ORM(Object Relationship Mapping)对象关系映射
- 对象:java的实体类对象
- 关系:关系型数据库
- 映射:二者之间的对应关系
Mapper文件命名规则:
表所对应的实体类的类名+Mapper.xml
两个一致:
- 映射文件的namespace要和mapper接口的全类名保持一致;
- 映射文件中SQL语句的id要和mapper接口中的方法一致
1
2
3
4
5
6
7<mapper namespace="mybatis.mapper.UserMapper"> <!--第一个一致-->
<!--insertUser()-->
<insert id="insertUser"><!--第二个一致-->
insert into t_user values(null, 'admin', '123456', '23', '男', '[email protected]')
</insert>
</mapper>
1.5 测试
1 | public class MybatisTest { |
1.6 加入log4j日志功能
pom.xml加入依赖
1
2
3
4
5<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>加入log4j的配置文件
- 名称是log4j.xml,存放在
src/main/resources
目录下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encodind" value="UTF-8"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p][%d{yy-MM-dd}][%c]%m%n "/>
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug"/>
<appender-ref ref="STDOUT"/>
</root>
</log4j:configuration>- 名称是log4j.xml,存放在
1.7 删改查类似
- 查询功能必须设置
resultType="mybatis.User"
或者resultMap
二 核心配置文件标签
environment:
properties
typeAliases(给类取别名)——不区分大小写
mappers
三 MyBatis获取参数值的方式
idea中设置核心配置文件模板
idea中设置映射文件模板
获取参数值的两种方式:(在映射文件中获取Mapper接口中的方法的输入参数,以此来拼接sql语句)
${}
:字符串拼接- 可能有sql注入
#{}
:占位符赋值(推荐)(名称任意)MyBatis获取参数值的各种情况
mapper接口方法中的参数为单个的自变量类型:两种方法都可以,但是要注意
${}
的单引号问题参数有多个(通过mybatis自动设置的map集合的键值访问)
(param1和param2也可以)
同样的
${}
需要加单引号参数为map集合
这样就可以用自己设置的键了
mapper接口中的方法的参数是一个实体类
使用
@param
注解命名参数(常用)此时将参数放在一个map集合中
四 Mybatis各种查询功能
查询多个结果应用集合存储
获取自增主键
useGeneratedKeys=true
:设置当前标签中的sql使用了自增的idkeyProperty='id'
:将自增的id
字段名和属性名不一致
方法1:为字段起别名,保持和属性名的一致
(表中字段为emp_name,类中对应empName,通过对字段起别名来保持和属性名一致)
方法2:设置mybatis-config.xml中的
settings
标签,将_映射为驼峰方法3:
resultMap
(resultType只能解决字段名和属性名相同的情况)注:
主标签中的id是唯一标识,不能重复,type是设置映射关系中的实体类类型
子标签中的id设置主键映射,result设置普通字段的映射,所有的字段都需要设置,即使他们和属性中的名称一致
- 子标签中的property是实体类中属性,column是表中的字段
处理多对一映射关系
方法1:级联属性赋值
方法2:通过association:专门处理多对一的映射
注:
- 主标签中的property是需要处理多对的映射关系属性名,javaType是该属性的类型
- 子标签中的其他的类似
方法3:分步查询(用的多)
可以实现延迟加载
五 自定义映射resultMap
- 用于处理类中属性名和表中字段名不一致的情况