#yyds干货盘点# Mybatis 的 XML 配置
Posted ZS_Jie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# Mybatis 的 XML 配置相关的知识,希望对你有一定的参考价值。
<!--配置-->
<configuration>
<!--属性-->
<properties>
<!--设置-->
<settings>
<!--类型别名-->
<typeAliases>
<!--类型处理器-->
<typeHandlers>
<!--对象工厂-->
<objectFactory>
<!--插件-->
<plugins>
<!--环境配置-->
<environments>
<!--数据库厂商标识-->
<databaseIdProvider>
<!--映射器-->
<mappers>
</configuration>
<!-- 注意元素节点的顺序!顺序不对会报错 -->
Properties
属性可以在外部文件进行配置,通过 <properties resource="jdbc.properties"/>
引入外部文件
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
driver=com.mysql.jdbc.Driver
username=root
password=123456
<properties resource="jdbc.properties"/>
<!--环境配置-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments
也可以在 properties 元素的子元素中设置,并可以进行动态替换
<!--环境配置-->
<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?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
Settings
常用的设置
设置名 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 | true | false | false |
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | 未设置 |
一个配置完整的 settings 元素的示例如下:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
TypeAliases
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
-
扫描类使用别名
<typeAliases> <typeAlias type="pojo.User" alias="User"/> </typeAliases>
当这样配置时,
User
可以用在任何使用pojo.User
的地方。 -
扫描包
<typeAliases> <package name="pojo"/> </typeAliases>
每一个在包
pojo
中的 JavaBean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。若有注解,则别名为其注解值。 -
在类上使用注解
import org.apache.ibatis.type.Alias; @Alias("user") public class User { private int id; private String name; private String password; }
下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
Environments
配置 MyBatis 的多套运行环境,将 SQL 映射到多个不同的数据库上,必须指定其中一个为默认运行环境(通过 default 指定),通过 id 进行区别
<!--环境配置-->
<environments default="development">
<!--development环境-->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<!--test-->
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
子元素节点:environment
-
transactionManager 事务管理器
<!-- 语法 --> <transactionManager type="[ JDBC | MANAGED ]"/>
-
dataSource 数据源
使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。数据源是必须配置的。有三种内建的数据源类型:
type="[UNPOOLED|POOLED|JNDI]")
- unpooled:这个数据源的实现只是每次被请求时打开和关闭连接。
- pooled:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来 , 这是一种使得并发 Web 应用快速响应请求的流行处理方式。
- jndi:这个数据源的实现是为了能在如 Spring 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
Mapper
Mapper 映射器告诉 MyBatis 到哪里去找映射文件
-
使用相对于类路径的资源引用
<mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers>
-
类名
<!--需要配置文件名称和接口名称一致,并且位于同一目录下--> <mappers> <mapper class="mapper.UserMapper"/> </mappers>
-
包名
<!--需要配置文件名称和接口名称一致,并且位于同一目录下--> <mappers> <package name="mapper"/> </mappers>
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 namespace="mapper.UserMapper">
<insert id="addUser" parameterType="pojo.User">
insert into user(id, name, password)
values (#{id}, #{name}, #{password})
</insert>
</mapper>
-
namespace 的命名必须跟某个接口同名
- 接口中的方法与映射文件中sql语句id应该一一对应
- namespace命名规则 : 包名+类名
以上是关于#yyds干货盘点# Mybatis 的 XML 配置的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# 深入浅出 Spring Boot - 数据访问之 MyBatis
SpringBoot | 3.2 整合MyBatis #yyds干货盘点#