• MyBatis-核心配置文件mybatis-config.xml主要参数详解


    前言

    对于初学者,如果进行mybatis的学习呢?我总结了几点,会慢慢的更新出来。首先大家需要了解mybatis是什么、用mybatis来做什么、为什么要用mybatis、有什么优缺点;当知道了为什么的时候就开始了解如何用的问题,如何使用mybatis、有几种使用方式、各种方式的优缺点,在这个阶段也会学习mybatis涉及到的一些标签的用法;当知道了基础用法之后,就开始接触一些高级的用法,例如动态sql的使用、mybatis的缓存使用等;至此,在实战项目中使用mybatis进行开发已经没有问题了。

    接下来就开始深入的研究一下mybatis这个持久层的框架,在纯技术的方面进行研究,提高自己的能力。首先,大家需要了解一下mybatis的整体技术架构和工作原理;接下来,就开始了解一下mybatis各大核心组件的具体功能及其工作原理。至此,算是对mybatis的原理简单的了解一下了,由于博主的能力有限,因此对于mybatis的框架技术研究也就到这里算结束了。

    最后会了解一些其他的东西,例如:mybatis的逆向工程使用、如何开发一个mybatis插件,在这里会介绍一下mybatis的分页实现等。
    至此,mybatis也算是入门了,出去就可以和别人说,你稍微了解mybatis框架,对其也多少有一点自己的理解和看法了。

    与mybatis相关的配置文件有两类,一类是全局的配置文件,另一类是sql映射文件,这里先介绍一下全局配置文件 mybatis-config.xml

    1、全局配置文件的用处

    mybatis通过配置文件可以配置数据源、事务管理器、运行时行为、处理别名、类型处理、插件等信息。在mybatis应用初始化时,程序会解析全局配置文件,使用配置的信息实例化Configuration组件,完成基本配置的初始化。在mybatis的全局配置文件中通过对应的标签完成对应的配置,其整体标签结构如下:

    在这里插入图片描述

    注意:全局配置文件中的标签在编写的时候必须要按着上述顺序进行编写,否则会有问题;另外对mybatis进行初始化配置时不一定非要使用xml配置文件的方式,也可以通过java api 的方式实现,因为不管使用哪种方式最终在mybatis启动初始化时都会实例化成配置类Configuration。

    2、标签的用途

    上边所介绍的标签都有什么用途呢,接下来通过一个表格看一下
    在这里插入图片描述

    3、标签的详细介绍和使用

    3.1 properties

    用于引入外部properties配置文件的信息,两种使用方式:

    <properties resource="类入类路径下的资源"></properties>
    <properties url="网络或者磁盘路径"></properties>
    
    • 1
    • 2

    在这里插入图片描述

    3.2 settings

    主要是控制mybatis运行时的一些行为,这里只举一些常用到的属性,未涉及到的可以去mybatis官网查看 mybatis – MyBatis 3 | 配置

    <settings>
    	<!--    全局性开启和关闭任何缓存    -->
    	<setting name="cacheEnabled" value="true"/>
    	<!-- 延迟加载的全局开关 -->
    	<setting name="lazyLoadingEnabled" value="true"/>
    	<!-- 允许单条语句返回多个结果集 sql与ResultSet一对多的用法, 没找到用法。可以不设置-->
    	<setting name="multipleResultSetsEnabled" value="true"/>
    	<!-- 允许使用数据字段列的别名代替数据列名  确切的说当映射找不到参数时会使用列标签(数据库列名)代替别名去映射	 -->
    	<setting name="useColumnLabel" value="true"/>
    	<!-- 设置为true时,允许jdbc自动生成主键 -->
    	<setting name="useGeneratedKeys" value="false"/>
    	<!-- 设置超时时间,它决定数据库驱动等待数据库响应的秒数 -->
    	<setting name="defaultStatementTimeout" value="25"/>
    	<!-- 是否开启驼峰命名自动映射 -->
    	<setting name="mapUnderscoreToCamelCase" value="false"/>
    </settings>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    3.3 typeAliases

    别名处理器, 将一些名字(路径)太长的java类起一个别名,以后使用别名即可
    具体使用如下:

    <!-- 用来为java类型设置一个简称,主要用于降低冗余的全限定类型名书写 -->
    <typeAliases>
    	<!-- 直接指定一个类型,为其取别名 -->
    	<typeAlias alias="User" type="com.app.test.mapper.User" />
     
    	<!-- 给包起别名,其包下对应的所有类型的别名在没有使用@Alias注解的情况下会使用 Bean 的首字母小写的非限定类名来作为它的别名 -->
    	<package name="com.app.test.mapper"/>
    	<!-- 例如此处,设置后,com.app.test.mapper下所有的Bean的别名为 Bean的首字母小写的非限定类名 -->
     
    	<!-- 在为包起别名基础上,也可以通过注解方式设置别名, @Alias('别名') -->
    	
    </typeAliases>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    mybatis中有一些内置的别名,具体如下:
    在这里插入图片描述

    3.4 typeHandlers

    typeHandlers 为类型处理器, jdk 1.8已经实现全部的JSR310规范,可以使用mybatis基于JSR310编写的各种日期时间处理器,mybatis 3.4以前的版本需要我们手动注册这些处理器,以后的版本是自动注册的。这个没什么可说的,自己觉的目前这个标签作用在于配置自定义处理器。

    开发者可以自定义类型处理器,通过实现 org.apache.ibatis.type.TypeHandler 接口, 或继承一个很便利的类 org.apache.ibatis.type.BaseTypeHandler。由于我在开发过程中还未自己定义过类型处理器,这里不做详解,如需自定义可以查看mybatis官网。
    定义转化用,如日期转换为字符串,List 转化为,分割等

    3.5 plugins

    MyBatis 允许在映射语句执行过程中的某一点进行拦截调用。这里不详解,具体在后边的mybatis中插件的实现和使用中介绍。

    3.6 environments、environment、transactionManager、dataSource

    这四个标签是嵌套的关系,也是一起使用,具体如下:

    <!--  enviroments中可以配置多个environment, 其中default属性指定某种环境, 可以达到快速切换的效果  -->
    <environments default="development">
    	<!-- 用于配置一个具体的环境信息,id属性代表当前环境的唯一标识,enviroments中的default属性就是根据这里的id进行转换 -->
    	<environment id="development">
    		<!-- 事务管理器:
    				type属性:事务管理器的类型,可以是自带的JDBC,也可以是自定义的事务管理器
    				自定义的事务管理器实现TransactionFactory接口,设置type时,使用全类名
    		-->
    		<transactionManager type="JDBC"/>
    		<!-- 数据源:
    				type属性:数据源类型有三个UNPOOLED、POOLED、JNDI
    				也可以使用自定义数据源,自定义的数据源实现DataSourceFactory接口,设置type时,使用全类名
    		-->
    		<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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    environments 中可以配置多个 environment, 用来表示不同的数据源,每一个数据源对应一个 environment,每一个 environment有一个唯一的id,用来区分不同的数据源。

    transactionManager 用来配置事务管理器,有两种方式:JDBC和MANAGED,一般使用JDBC即可,在使用spring+mybatis项目中,此处无需配置,spring 管理事务。

    dataSource 用来配置数据源的连接信息、事务隔离级别、连接数、超时时间等。

    3.7 databaseIdProvider

    支持多数据库厂商,具体使用如下:

    <!-- 配置支持多个厂商的数据库 -->
    <databaseIdProvider type="DB_VENDOR">
    	<property name="MySQL" value="mysql"/>
    	<property name="Oracle" value="oracle"/>
    </databaseIdProvider>
    这里配置的数据库在sql映射文件中使用,指定sql语句对应的数据库类型
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    <?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="com.app.test.mapper.UserMapper">
        <select id="selectUser" parameterType="long" resultType="com.app.test.mapper.User" databaseId="mysql">
            select * from oa_user where id = #{id}
        </select>
     
        <select id="selectUser" parameterType="long" resultType="com.app.test.mapper.User" databaseId="oracle">
            select * from oa_user where id = #{id}
        </select>
    </mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3.8 mappers

    使用mappers标签将sql映射文件注册到全局配置文件中

    <mappers>
    	<mapper resource="com/app/test/mapper/UserMapper.xml"/>
    	<!-- 批量注册 -->
    	<package name="com.app.test.mapper"/>
    </mappers>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    以上就是对mybatis全局配置文件的一个简单的介绍。

  • 相关阅读:
    前端数字计算精度问题
    自动化数据读取报错元素找不到
    试图颠覆 JavaScript 生态?亲身试用新 JS 运行时 Bun 后,我觉得未来可期
    prometheus告警流程及相关时间参数说明
    laravel框架介绍(二) composer命令下载laravel报错
    面试突击59:一个表中可以有多个自增列吗?
    Cauchy distribution
    chrome 浏览器个别字体模糊不清
    Zookeeper经典应用场景实战
    局域网如何进行内网连接和外网连接
  • 原文地址:https://blog.csdn.net/chuige2013/article/details/128031915