mybatis中的全局配置文件详解复习

本文详细解析MyBatis全局配置文件的结构与各层功能,包括properties、settings、typeAliases、typeHandlers、objectFactory、plugins、environments、databaseIdProvider及mappers的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、mybatis全局配置文件的文档结构

configuration 配置

​ • properties 属性

​ • settings 设置

​ • typeAliases 类型命名

​ • typeHandlers 类型处理器

​ • objectFactory 对象工厂

​ • plugins 插件

​ • environments 环境

​ • environment 环境变量

​ • transactionManager 事务管理器

​ • dataSource 数据源

• databaseIdProvider 数据库厂商标识

• mappers 映射器

二、mybatis全局配置文件各层详解

1.properties

​ 该层用来引入外部配置文件,如数据库连接信息可以通过引入外部的properties文件来,示例如下

<!--  引入配置文件  -->
    <properties resource="jdbc.properties"></properties>

<!--  配置环境  -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>

​ 其中properties有两个属性:

​ resource用相对路径引用文件;

​ url通过网络形式绝对路径来引用配置文件;

2.settings

​ 该层用来配置mybatis运行时的行为,可以设置许多属性,有需要可以查询官方文档,以下示例如何设置

<!--  设置  -->   
   <settings>
       <!-- 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn -->
       <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
3.typeAliases

​ 该层用来给各类设置别名,即在使用到某些类时不用写出全类名,使用别名即可,示例如下

<!--  配置别名  -->
    <typeAliases>
    	<!-- 即给一个类配置一个别名在调用该类时就不用在书写全类名 -->
        <typeAlias type="com.lazy.bean.Employee" alias="emp"></typeAlias>
    </typeAliases>

​ 所以在mapper映射文件中调用如下:

	<select id="selectOneById" resultType="emp">
        select id,user_name username,email from employee where id = #{id}
    </select>

​ 该层有两类标签:

​ 第一类typeAliase标签:

​ type属性:用来指定要取别名的类;

​ alias属性:给该类取的别名;

​ 第二类package标签:

​ name属性:用来指定某个包,给所有包中的类取别名(为当前包以及下面所有的后代包的每一个类都起一个默认别名(类名小写));

​ 如果包中有不同的包,而不同的包中有同名的类时就要使用注解给类取别名,示例如下:

<package name="com.lazy.bean"/>
	<select id="selectOneById" resultType="employee">
        select id,user_name username,email from employee where id = #{id}
    </select>

​ 使用别名示例如下:

@Alias("emp1")
public class Employee {
	<select id="selectOneById" resultType="emp1">
        select id,user_name username,email from employee where id = #{id}
    </select>

​ 注意:在使用自定义的类时我们不推荐使用别名,依旧使用全类名,这样便于我们查找,mybatis对常用的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
4.typeHandler

​ 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时, 都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。

同时可以自己来实现类型处理器,只需实现org.apache.ibatis.type.TypeHandler接口,或者继承该接口的实现类org.apache.ibatis.type.BaseTypeHandler

​ 但是要注意的是类型处理器将会覆盖已有的处理 Java String 类型的属性以及 VARCHAR 类型的参数和结果的类型处理器。 要注意 MyBatis 不会通过检测数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明字段是 VARCHAR 类型, 以使其能够绑定到正确的类型处理器上。这是因为 MyBatis 直到语句被执行时才清楚数据类型。

5.objectFactory

​ 该层主要是用来创建目标类的示例,一般使用无参构造器,一般不做修改。

6.plugins

MyBatis 允许你在映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • ParameterHandler (getParameterObject, setParameters)
  • ResultSetHandler (handleResultSets, handleOutputParameters)
  • StatementHandler (prepare, parameterize, batch, update, query)
7.enviroments

​ 环境集合,该标签用来配置mybatis使用环境,如使用mysql、Oracle等不同的数据库管理系统对应的不同信息,示例如下

<!-- 配置环境 -->	
	<environments default="dev_mysql">
		<environment id="dev_mysql">
			<transactionManager type="JDBC"></transactionManager>
			<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>
	
		<environment id="dev_oracle">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${orcl.driver}" />
				<property name="url" value="${orcl.url}" />
				<property name="username" value="${orcl.username}" />
				<property name="password" value="${orcl.password}" />
			</dataSource>
		</environment>
	</environments>

​ mybatis可以配置多种环境 ,default指定使用某种环境。可以达到快速切换环境;

environment:配置一个具体的环境信息;必须有两个标签;id代表当前环境的唯一标识;

①事务管理器transactionManager

​ 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):

  • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
  • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为

如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置

②数据源datasource

​ 该标签用来配置数据库的连接信息,示例如下:

		<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>

​ 其中的type属性有三种取值:

​ UNPOOLED:不使用数据库连接池,即每次增删改查都创建新的连接;

​ POOLED:使用mybatis自带的数据库连接连接池;

​ JNDI:这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。

​ 同时我们可以使用自定义,只需实现一个org.apache.ibatis.datasource.DataSourceFactory接口来实现第三方数据库,org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory可被用作父类来构建新的数据源适配器,示例如下

import org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0DataSourceFactory extends UnpooledDataSourceFactory {

  public C3P0DataSourceFactory() {
    this.dataSource = new ComboPooledDataSource();
  }
}
8.databaseIdProvider

​ 该层用来实现对不同数据库厂商执行不同的语句,databaseIdProvider 对应的 DB_VENDOR 实现会将 databaseId 设置为 ,作用就是得到数据库厂商的标识(驱动getDatabaseProductName())

​ mybatis就能根据数据库厂商标识来执行不同的sql**DatabaseMetaData#getDatabaseProductName() **返回的字符串。 由于通常情况下这些字符串都非常长,而且相同产品的不同版本会返回不同的值,你可能想通过设置属性别名来使其变短:

	<databaseIdProvider type="DB_VENDOR">
		<!-- 为不同的数据库厂商起别名 -->
		<property name="MySQL" value="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="sqlserver"/>
	</databaseIdProvider>
9.mappers

​ 该层用来告诉mybatis框架到何处去寻找SQL语句,他其中有两个标签:

​ mapper标签:

​ resource属性:使用相对路径在查询;

​ url属性:使用网络路径或绝对路径查询;

​ class属性:使用映射器接口实现类的完全限定类名;

​ 注意事项:

注册接口
class:引用(注册)接口,
   1、有sql映射文件,映射文件名必须和接口同名,并且放在与接口同一目录下;
   2、没有sql映射文件,所有的sql都是利用注解写在接口上;
   推荐:
      比较重要的,复杂的Dao接口我们来写sql映射文件
      不重要,简单的Dao接口为了开发快速可以使用注解;
   且注解和sql映射文件不能同时存在

​ package标签(实现批量注册):

​ 将指定包内的映射器接口全部注册为映射器(注意事项同上);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值