这篇文章,主要介绍MyBatis的核心配置文件及其相关标签属性。
目录
MyBatis配置文件中,通过【
- <environments default="development">
-
- <environment id="development">
-
- <transactionManager type="JDBC"/>
-
- <dataSource type="POOLED">
-
- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
-
- <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
-
- <property name="username" value="root"/>
-
- <property name="password" value="root"/>
- dataSource>
- environment>
-
- <environment id="prod">
-
- <transactionManager type="JDBC"/>
-
- <dataSource type="POOLED">
-
- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
-
- <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
-
- <property name="username" value="root"/>
-
- <property name="password" value="root"/>
- dataSource>
- environment>
- environments>
事务管理器的type属性可选值:
type属性可以有两个可选值:
- JDBC:表示采用原生的JDBC来进行事务的管理。
- MANAGED:表示被框架进行管理事务。
dataSource用于设置数据源的连接信息,它的type属性可以有三个可选值:
type属性可选值:
- POOLED:采用数据库连接池来管理数据源。
- UNPOOLED:不使用数据库连接池。
- JNDI:表示使用上下文中的数据源。
properties标签用于引入外部的properties文件,例如:在配置数据源的时候,可以引入外部的properties文件,然后通过EL表达式获取对应的连接信息。【
在【src/main/resources】目录下面,新建一个【jdbc.properties】文件。
- jdbc.driver=com.mysql.cj.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/mybatis
- jdbc.username=root
- jdbc.password=root
然后在MyBatis的配置文件里面,通过【
- <properties resource="jdbc.properties"/>
-
- <environments default="development">
-
- <environment id="development">
-
- <transactionManager type="JDBC"/>
-
- <dataSource type="POOLED">
-
- <property name="driver" value="${jdbc.driver}"/>
-
- <property name="url" value="${jdbc.url}"/>
-
- <property name="username" value="${jdbc.username}"/>
-
- <property name="password" value="${jdbc.password}"/>
- dataSource>
- environment>
- environments>
typeAliases标签用于设置类型别名,也就是说,如果通过这个标签指定了某个类的包路径名称别名之后,我们之后在Mapper映射文件里面使用这个类的时候,可以使用别名进行访问。
- <typeAliases>
-
- <typeAlias type="com.mybatis.demo.domain.User" alias="User"/>
- typeAliases>
- type属性就是用于指定具体的类路径名称。
- alias用于指定当前类的别名,默认情况下,如果没有设置alias属性,那么MyBatis会默认别名是当前类名称。
设置类型别名之后,我们这个时候在Mapper映射文件里面,就可以直接使用别名,而不用写具体的类名称,如下所示:
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.mybatis.demo.mapper.UserMapper">
-
-
-
- <select id="queryList" resultType="User">
- select * from user
- select>
- mapper>
上面配置可以看到,一个类就需要设置一个类型别名,那这样子太麻烦了,如果有100个类,那不得添加100个类型标签吗???MyBatis考虑到了这一点,可以通过【
- <typeAliases>
-
-
- <package name="com.mybatis.demo.domain"/>
- typeAliases>
mappers标签用于指定具体的Mapper映射文件路径,这个就是告诉MyBatis应该去哪个目录下面,查找对应的SQL映射文件。Mapper映射文件有两种配置方式,分别如下所示:
通过resources属性来指定Mapper映射文件所在路径,这个resources只能够指定【src/main/resources】目录下的路径。
- <mappers>
-
- <mapper resource="UserMapper.xml"/>
- mappers>
通过package标签来指定Mapper映射文件所在的路径,使用这个package标签必须满足下面两个条件:
- Mapper映射文件所在的包路径,必须和Mapper接口所在的包路径相同。
- Mapper映射文件名称,必须和Mapper接口的名称相同。
如果不满足上面两个条件,运行时候会报错:BindingException绑定异常。
- <mappers>
-
-
-
- <package name="com.mybatis.demo.mapper"/>
- mappers>
这个时候,对应的Mapper映射文件可以放在两个地方:
- 第一种情况:Mapper映射文件是和Mapper接口放在一起。
- 第二种情况:Mapper映射文件是放在【src/main/resources】目录下,并且位于和Mapper接口具有相同的目录下面。

对于Mapper映射文件放在类路径下面的情况,再使用maven打包的时候,需要在【pom.xml】配置文件中添加如下配置,如果没有配置的话,打包时候不会将XML文件一起打包到target目录中,从而导致运行过程中报错。
- <build>
-
- <resources>
- <resource>
- <directory>src/main/resourcesdirectory>
- <includes>
- <include>**/*.*include>
- includes>
- resource>
- <resource>
- <directory>src/main/javadirectory>
- <includes>
- <include>**/*.xmlinclude>
- includes>
- resource>
- resources>
- build>
添加上面配置之后,运行之后,就会将XML文件打包到target目录里面。


上面两种配置方式,最终打包到target目录之后,对应的Mapper接口和Mapper映射文件都将同一个目录下面。
在上面配置过程中,如果mapper映射文件配置不正确,那么在运行过程中就会报错BindingException绑定异常,如下所示:
- Exception in thread "main" org.apache.ibatis.binding.BindingException:
- Invalid bound statement (not found):
- com.mybatis.demo.mapper.UserMapper.queryList
- at org.apache.ibatis.binding.MapperMethod$SqlCommand.
(MapperMethod.java:235) - at org.apache.ibatis.binding.MapperMethod.
(MapperMethod.java:53) - at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:108)
- at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
以上,就是MyBatis框架常见的配置文件属性介绍,在实际开发过程中,MyBatis的配置文件几乎不会使用到这些配置,实际的开发过程中都是通过和Spring、SpringMVC集成在一个配置文件里面,或者直接使用SpringBoot的默认配置,只需要指定mapper映射文件路径即可。
综上,这篇文章结束了,主要介绍MyBatis的核心配置文件及其相关标签属性。