当前位置: 代码网 > it编程>编程语言>Java > Mybatis解析配置优化图文实例详解

Mybatis解析配置优化图文实例详解

2026年08月10日 Java 我要评论
核心配置文件官方文档:https://mybatis.org/mybatis-3/zh_cn/configuration.htmlmybatis-config.xmlmybatis 的配置文件包含了会

核心配置文件

官方文档:

https://mybatis.org/mybatis-3/zh_cn/configuration.html
  • mybatis-config.xml
  • mybatis 的配置文件包含了会深深影响 mybatis 行为的设置和属性信息。
configuration(配置)
properties(属性)
settings(设置)
typealiases(类型别名)
typehandlers(类型处理器)
objectfactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionmanager(事务管理器)
datasource(数据源)
databaseidprovider(数据库厂商标识)
mappers(映射器) 

环境配置(environments)

environment(环境变量)

mybatis 可以配置成适应多种环境

不过要记住:尽管可以配置多个环境,但每个 sqlsessionfactory 实例只能选择一种环境。

  • 这里可以指定默认选项

  • 默认使用的环境 id(比如:default=“development”)。
  • 每个 environment 元素定义的环境 id(比如:id=“development”)。
  • 事务管理器的配置(比如:type=“jdbc”)。
  • 数据源的配置(比如:type=“pooled”)。

默认环境和环境 id 顾名思义。 环境可以随意命名,但务必保证默认的环境 id 要匹配其中一个环境 id。

transactionmanager(事务管理器)

  • 在 mybatis 中有两种类型的事务管理器(也就是 type=“[jdbc|managed]”):
  • mybats默认的事务管理器就是jdbc,连接池:pooled

datasource(数据源)

datasource 元素使用标准的 jdbc 数据源接口来配置 jdbc 连接对象的资源。

  • 大多数 mybatis 应用程序会按示例中的例子来配置数据源。虽然数据源配置是可选的,但如果要启用延迟加载特性,就必须配置数据源。

有三种内建的数据源类型(也就是 type=“[unpooled|pooled|jndi]”):

属性(properties)

我们可以通过properties属性来实现引用配置文件

这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。[db.properties]

  • 编辑一个配置文件db.properties
driver=com.mysql.jdbc.driver
url=jdbc:mysql://localhost:3306/mybatis?useunicode=true&characterencoding=utf-8&usessl=false
username=root
password=123456
  • 在mybatis-config.xml引入db.properties外部配置文件
<!--放入最上面,引入外部配置文件-->
<properties resource="db.properties"/>

<!--也可以自定义添加属性,比如外部配置文件并没有username和password-->
<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="root"/>
  <property name="password" value="123456"/>
</properties>

  • 可以看见环境设置里面的变量不需要再写死了,我们只需要引入外部配置文件
<?xml version="1.0" encoding="utf-8" ?>
<!doctype configuration
        public "-//mybatis.org//dtd config 3.0//en"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration>
    <properties resource="db.properties"/>

    <!--环境设置,因为有s代表复数,可以配置多个环境environments-->
    <environments default="development">
        <environment id="development">
            <transactionmanager type="jdbc"/>
            <datasource type="pooled">
                <property name="driver" value="${driver}"/>
                <!--&相当于原来的&符号进行了转义,因为xml中需要一些转义-->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </datasource>
        </environment>

    </environments>
    <!--没有给mapping.xml都需要在mybatis核心配置文件中注册-->
    <mappers>
        <mapper resource="usermapper.xml"/>
    </mappers>

</configuration>

  • 可以直接引入外部文件
  • 可以在其中增加一些属性配置
  • 如果增加的属性配置和外部文件都有同一个字段,优先使用外部文件!

类型别名(typealiases)

  • 类型别名可为 java 类型设置一个缩写名字。
  • 它仅用于 xml 配置,意在降低冗余的全限定类名书写
    <typealiases>
        <!--可以给实体类起一个别名-->
        <typealias type="com.cike.pojo.user" alias="user"/>
    </typealiases>
  • 也可以指定一个包名,mybatis 会在包名下面搜索需要的 java bean
    • 扫描实体类的包,它默认别名是这个类的类名,首字母小写
    <typealiases>
        <!--可以给实体类起一个别名-->        
        <package name="com.cike.pojo"/>
    </typealiases>

通过注解取别名,适用于包扫描

@alias("user1")
public class user {}

下面是一些为常见的 java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。

别名映射的类型
_bytebyte
_char (since 3.5.10)char
_character (since 3.5.10)char
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringstring
bytebyte
char (since 3.5.10)character
character (since 3.5.10)character
longlong
shortshort
intinteger
integerinteger
doubledouble
floatfloat
booleanboolean
datedate
decimalbigdecimal
bigdecimalbigdecimal
bigintegerbiginteger
objectobject
date[]date[]
decimal[]bigdecimal[]
bigdecimal[]bigdecimal[]
biginteger[]biginteger[]
object[]object[]
mapmap
hashmaphashmap
listlist
arraylistarraylist
collectioncollection
iteratoriterator

总结:

  • 第一种方式可以diy别名,第二种则需要在实体类进行注解起diiy别名、否则它扫描包的时候是实体类首字母小写的别名
  • 第一种,在实体类比较少的情况下可以使用
  • 第二种,尸体了比较多的时候可以使用

设置(settings)

这是 mybatis 中极为重要的调整设置,它们会改变 mybatis 的运行时行为

  • 要记得:

| logimpl(日志实现)主要这个 | 指定 mybatis 所用日志的具体实现,未指定时将自动查找。 | slf4j | log4j(3.5.9 起废弃) | log4j2 | jdk_logging | commons_logging | stdout_logging | no_logging | 未设置 |
| — | — | — | — |
| cacheenabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true | false | true |
| lazyloadingenabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 <font style="color:rgb(221, 17, 68);background-color:rgb(247, 247, 249);">fetchtype</font>
属性来覆盖该项的开关状态。 | true | false | false |

需要了解的:

设置名描述有效值默认值
cacheenabled全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。truefalse
lazyloadingenabled延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 <font style="color:rgb(221, 17, 68);background-color:rgb(247, 247, 249);">fetchtype</font>
属性来覆盖该项的开关状态。
truefalse
usecolumnlabel使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。truefalse
usegeneratedkeys
(自动生成主键)
允许 jdbc 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 derby)。truefalse
mapunderscoretocamelcase是否开启驼峰命名自动映射,即从经典数据库列名 a_column 映射到经典 java 属性名 acolumn。truefalse
logimpl(日志实现)指定 mybatis 所用日志的具体实现,未指定时将自动查找。slf4jlog4j(3.5.9 起废弃)

更多的看一看官网:

https://mybatis.org/mybatis-3/zh_cn/configuration.html#settings

一个配置完整的 settings 元素的示例如下:

<settings>
  <setting name="cacheenabled" value="true"/>
  <setting name="lazyloadingenabled" value="true"/>
  <setting name="aggressivelazyloading" 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="saferesulthandlerenabled" value="true"/>
  <setting name="mapunderscoretocamelcase" value="false"/>
  <setting name="localcachescope" value="session"/>
  <setting name="jdbctypefornull" value="other"/>
  <setting name="lazyloadtriggermethods" value="equals,clone,hashcode,tostring"/>
  <setting name="defaultscriptinglanguage" value="org.apache.ibatis.scripting.xmltags.xmllanguagedriver"/>
  <setting name="defaultenumtypehandler" value="org.apache.ibatis.type.enumtypehandler"/>
  <setting name="callsettersonnulls" value="false"/>
  <setting name="returninstanceforemptyrow" value="false"/>
  <setting name="logprefix" value="examplelogprefix_"/>
  <setting name="logimpl" value="slf4j | log4j | log4j2 | jdk_logging | commons_logging | stdout_logging | no_logging"/>
  <setting name="proxyfactory" value="cglib | javassist"/>
  <setting name="vfsimpl" value="org.mybatis.example.yourselfvfsimpl"/>
  <setting name="useactualparamname" value="true"/>
  <setting name="configurationfactory" value="org.mybatis.example.configurationfactory"/>
</settings>

其他配置

映射器

mapperregistry:注册绑定我们的mapper文件

一共有四种方式:

  • 使用相对于类路径的资源引用
  • 使用映射器接口实现类的完全限定类名
  • 将包内的映射器接口全部注册为映射器
  • 使用完全限定资源定位符(url)“不推荐使用”

方式一:使用resource绑定注册【推荐使用】

    <!--使用相对于类路径的资源引用-->
    <mappers>
        <mapper resource="usermapper.xml"/>
    </mappers>

方式二:使用class绑定注册

    <mappers>
        <!--使用映射器接口实现类的完全限定类名-->
        <mapper class="com.cike.dao.usermapper"/>
    </mappers>

注意点:

  • 接口和它的mapper配置文件必须同名!
  • 接口和它的mapper配置文件必须在同一个包下!

方式三:使用扫描包进行注入绑定

注意点:

  • 接口和它的mapper配置文件必须同名!
  • 接口和它的mapper配置文件必须在同一个包下!
    <mappers>
        <!--将包内的映射器接口全部注册为映射器 -->
        <package name="com.cike.dao"/>
    </mappers>

总结 

到此这篇关于mybatis解析配置优化的文章就介绍到这了,更多相关mybatis解析配置优化内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com