# MyBatis 配置文件详解
*开源技术栏*
MyBatis 常用配置文件的解析
## 目录
[TOC]

# 核心配置文件
## Environments 标签
在下面就是一个核心配置文件的基本框架,其中比较重要的部分就是 environments 标签,它是一个存储环境数据的标签,在一个项目中,一般情况下具有正式和测试两种环境,每一个环境对应的标签都是 environment 子标签。
```
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置环境 -->
<environments default="development">
<!-- 其中的一个环境 -->
<environment id="development">
<!-- 配置当前环境中要使用的事务管理器 -->
<transactionManager type="JDBC"/>
<!-- 配置当前环境中对应的数据库(数据源)信息 POOLED 代表的就是将这个数据库链接进行缓存 类似连接池 -->
<dataSource type="POOLED">
<!-- 配置数据库的信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:38243/myBatis_Test"/>
<property name="username" value="root"/>
<property name="password" value="38243824"/>
</dataSource>
</environment>
<!-- 另一个环境 -->
<environment id="Test">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>
</environments>
<!-- 配置映射文件 -->
<mappers>
<!-- 这个映射文件就是我们创建的 mybatis-mapper.xml -->
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
```
### 属性
#### Default 属性
此属性对应的就是某一个子标签的id,代表的就是默认使用的环境对应的id,在上面的示例中,此属性设置的是 development。
而 development 对应的环境就是第一个子标签,这代表的就是,在当前的项目中,我们使用 id 为 development 的环境做为 mybatis 的运行环境。
#### Environment 标签
##### 属性
###### Id 属性
在这里的 id 属性代表的就是当前运行环境的一个标识,通过我们的 Environments 就可以体会到为什么要这样设置了。
###### transactionManager 标签
这个标签代表的是事务管理器,在mybatis 中只有一个 type 属性,没有子标签,它的的取值有两种,分别是 JDBC 以及 MANAGED。
* Type = jdbc
当前操作SQL 的时候 使用的是 JDBC 中原生的 事务提交方式,也就是提交和回滚需要手动来进行处理和实现。
在实际的使用中,如果我们调用 openSession 函数的时候不指定自动提交,则每次操作结束都需要手动提交!
* Type = managed
声明式的事务管理,在这里代表的是被管理模式,具体被谁管理取决于自己的框架,例如在Spring 项目中被Spring 管理。
###### dataSource 标签
这里就是比较重要,但是也是各位比较熟悉的部分了,数据源,在这里我们可以指定能够被mybatis 操作的数据库的 url 以及数据库的驱动等,接下来我们来开始讲解相关事项。
* Type = POOLED
type 属性在这里代表的就是数据源的类型,这个类型代表的就是使用数据库连接池来进行数据库连接对象的缓存操作。
* Type = UNPOOLED
这里表示不使用数据库连接池
* Type = JNDI
这里代表的就是使用上下文中的数据源,例如使用 Spring 中的数据库连接
* Property 标签
代表的就是当前数据源的配置属性,在这里就是一些固定的格式,下面是一个示例,就不过多的介绍了。
```
<!-- 配置当前环境中对应的数据库(数据源)信息 POOLED 代表的就是将这个数据库链接进行缓存 类似连接池 -->
<dataSource type="POOLED">
<!-- 配置数据库的信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/myBatis_Test"/>
<property name="username" value="root"/>
<property name="password" value="************"/>
</dataSource>
```
#### Properties 标签
我们知道,在很多时候,xml配置文件中都会有很多重复的配置项目,导致写起来或者修改起来特别的麻烦,在这里我们有一种类似变量定义的手段来集中的定义这些重复度比较高的配置项目,实现更加方便的开发。
#### 创建一个 Properties 文件
变量的定义在一个 Properties 文件中进行,所以我们在这里需要创建这个文件并在里面配置一些变量。
我们创建了一个文件《jdbc. Properties》同时在里面配置了一些数据,文件内容如下所示。
```
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:38243/myBatis_Test
jdbc.username=root
jdbc.password=**********
```
##### resource 属性
此属性是 Properties 标签中指定 Properties 文件的属性,下面是引入的一个代码示例,在这里我们的 《jdbc. Properties》与核心配置文件在同一级目录中!
引入完毕之后,就可以在 xml 中使用这些定义好的变量了!
##### typeAliases 标签
这个标签代表的是类型别名,在Mapper 配置文件中会需要设置Mapper接口中每个含函数的形参数据类型,返回值数据类型,所以在这里需要写很多的类型全称,在Java中的类型全称是很繁琐的,每次写都很幸苦。
所以在这里我们要使用类型别名标签实现更加快速的开发方式。
##### typeAlias 标签
```
<!-- 设置类型别名 -->
<typeAliases>
<!-- 设置第一个别名 -->
<typeAlias type="top.lingyuzhao.test.data.User" alias="User"/>
</typeAliases>
在上面我们这对User 类进行了一个别名的设置,接下来我们针对Mapper 中的User 类型进行修改,修改之后的配置如下所示。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 在这里配置 用户的 Mapper 接口 -->
<mapper namespace="top.lingyuzhao.test.mapper.UserMapper">
<!-- 插入数据 在这里非常熟悉了,需要注意的是
1.parameterType 就是我们操作之后的数据类型
2.id 就是对应的Mapper接口中的方法的名字
3.在标签内部就是对应的 sql 语句-->
<insert id="insertUser" parameterType="User">
INSERT INTO t_user (id, username, password, age, sex, email)
VALUES (#{id}, #{username}, #{password}, #{age}, #{sex}, #{email})
</insert>
<!-- TODO 新增 函数名称为 updateUser 参数类型为 User -->
<update id="updateUser" parameterType="User">
UPDATE t_user
SET username = #{username}, password = #{password}, age = #{age}, sex = #{sex}, email = #{email}
WHERE id = #{id}
</update>
<!-- TODO 新增 同上 只是参数类型为 整形 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE FROM t_user WHERE id = #{id}
</delete>
<!-- TODO 新增 函数名称为 selectUserById 参数类型为 整形 代表要查询的数据的 id 返回值是一个/多个 User 对象 -->
<select id="selectUserById" parameterType="java.lang.Integer" resultType="User">
SELECT * FROM t_user WHERE id = #{id}
</select>
<!-- TODO 新增 函数名称为 selectUsers 参数类型为 空 返回值是一个/很多个 User 对象 -->
<select id="selectUsers" resultType="User">
SELECT * FROM t_user
</select>
</mapper>
```
##### Mapper 标签
Mapper 标签用于将 Mapper 配置文件引入进来,在这里我们需要设置 Mapper 配置文件,下面是一个示例。
```
<!-- 配置映射文件 -->
<mappers>
<!-- 这个映射文件就是我们创建的 mybatis-mapper.xml -->
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
```
但是我们知道,一个服务一个Mapper配置文件,这样的话就太繁琐了,所以我们有一种新的方式,引入一整个目录中的所有文件做为 Mapper 配置文件。
##### Package 标签
此标签是一个子标签,用于设置包名的,下面就是使用示例!需要注意的是,这个name属性对应的包名 也要是文件目录才行。
```
<!-- 配置映射文件 -->
<mappers>
<!-- 这个映射文件就是我们创建的 mybatis-mapper.xml -->
<!-- 但是需要注意 这里是使用的包的方式引入的 有几个需要注意的点 -->
<!-- name 对应的数值需要与 top.lingyuzhao.test.mapper.UserMapper 的包 top.lingyuzhao.test.mapper 一致 -->
<package name="top.lingyuzhao.test.mapper" />
</mappers>
```
Mapper 配置文件所在的目录结构
```
PS G:\My_Project\IDEA\MyBatisTest> tree .\src\main\resources\
卷 Barracuda 的文件夹 PATH 列表
卷序列号为 8CC1-0CB8
G:\MY_PROJECT\IDEA\MYBATISTEST\SRC\MAIN\RESOURCES
└─top
└─lingyuzhao
└─test
└─mapper
```
# Mapper 配置文件
## 基本的结构
下面展示的就是 mybatis 的 mapper 配置文件的一些结构 其中许多都有注释,可以根据注释和配置代码来阅读。
```
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 在这里配置 用户的 Mapper 接口 -->
<mapper namespace="top.lingyuzhao.test.mapper.UserMapper">
<!-- 插入数据 在这里非常熟悉了,需要注意的是
1.parameterType 就是我们操作之后的数据类型
2.id 就是对应的Mapper接口中的方法的名字
3.在标签内部就是对应的 sql 语句-->
<insert id="insertUser" parameterType="top.lingyuzhao.test.data.User">
INSERT INTO t_user (id, username, password, age, sex, email)
VALUES (#{id}, #{username}, #{password}, #{age}, #{sex}, #{email})
</insert>
<!-- TODO 新增 函数名称为 updateUser 参数类型为 User -->
<update id="updateUser" parameterType="top.lingyuzhao.test.data.User">
UPDATE t_user
SET username = #{username}, password = #{password}, age = #{age}, sex = #{sex}, email = #{email}
WHERE id = #{id}
</update>
<!-- TODO 新增 同上 只是参数类型为 整形 -->
<delete id="deleteUser" parameterType="java.lang.Integer">
DELETE FROM t_user WHERE id = #{id}
</delete>
<!-- TODO 新增 函数名称为 selectUserById 参数类型为 整形 代表要查询的数据的 id 返回值是一个/多个 User 对象 -->
<select id="selectUserById" parameterType="java.lang.Integer" resultType="top.lingyuzhao.test.data.User">
SELECT * FROM t_user WHERE id = #{id}
</select>
<!-- TODO 新增 函数名称为 selectUsers 参数类型为 空 返回值是一个/很多个 User 对象 -->
<select id="selectUsers" resultType="top.lingyuzhao.test.data.User">
SELECT * FROM t_user
</select>
</mapper>
```
------
***操作记录***
作者:[root](http://www.lingyuzhao.top//index.html?search=1 "root")
操作时间:2024-01-09 07:43:31 星期二
事件描述备注:保存/发布
[](如果不需要此记录可以手动删除,每次保存都会自动的追加记录)