当前位置: 首页 > news >正文

11.2【MyBatis】主配置文件

目录

        11.2【MyBatis】主配置文件

    1.properties(属性)

    2.settings(设置)

    3.typeAliases(别名)

    4.typeHandlers类型处理器

    5.objectFactory 对象工厂

    6.plugins(插件)

    7.environments (配置环境)

    8.mappers (映射器)

        


        

        11.2【MyBatis】主配置文件

        

        MyBatis的 XML 配置文件包含了影响 MyBatis 行为很深的设置和属性信息,也可称之为主配置文件。此 XML文档的层级结构如下:

        

        configuration一>配置

        properties一>属性

        settings一>设置

        typeAliases一>类型命名

        typeHandlers一>类型处理器

        objectFactory一>对象工厂

        plugins一>插件

        environments一>配置环境

        environment一>环境变量

        transactionManager一>事务管理器

        dataSource一>数据源

        databaseIdProvider一>数据库厂商标识

        mappers一>映射器

        必须注意的是,MyBatis 配置项的顺序不能颠倒。如果其顺序颠倒了,则会在 MyBatis 启动阶段发生异常,导致程序无法运行。例如,可能会产生如下的报错信息:

         org.xml.sax.SaxParseException: The content of elment type "configuration must match"

        "(properties?,setting?,typeAliases?,...,

environments?databaseIdProvider?,mappers?)"

        1.properties(属性)

        

        MyBatis 提供了 3 种方式来使用 properties,分别如下

        (1)property子元素。

        (2)properties 文件。

        (3)程序代码传递。

        properties 属性可以通过property 子元素来传递也可以配置在典型的Java属性配置文件中。例如:        

<properties resource="org/mybatis/example/jdbc.properties"><property name="username" value="boy" /><property name="password" value="1" />
</properties>

        其中的属性可以在整个配置文件中使用,使用可替换的属性(参数)来实现动态配置。

例如:        

<dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}" /><property name="password" value="${password}" />
</dataSource>

        其中,username 和 password 将会由 property 子元素中设置的值来替换。driver 和 url 属性将会由包含进来的jdbc.properties文件中的值来替换。

        属性也可以被传递到SqlSessionBuilder.build()方法中。例如:

        

SqlSessionFactory factory=sqlSessionFactoryBuilder.build(reader, props);
//...or...
SqlSessionFactory factory = qlSessionFactoryBuilder,build(reader,environmentprops);

        

        如果属性多于一个,则MyBatis将按照如下的顺序进行属性加载。

        1)在 properties 元素体内指定的属性被读取。

        2)从类路径下资源或者 properties 元素的 url 属性中加载的属性被读取它会覆盖已经存在的完全一样的属性。

        3)作为方法参数传递的属性最后被读取,它也会覆盖任一已经存在的完全一样的属性这些属性可能是从 properties 元素体内和资源或者 url 属性中加载的。

        因此,最高优先级的属性是那些作为方法参数的属性,其次是资源 /url 属性,最后是 properties 元素中指定的属性。

        2.settings(设置)

        settings 会改变 MyBatis 在运行时的行为方式是 MyBatis 中极为重要的调整设置。表11-1描述了 MyBatis 的设置信息,以及其含义和默认值。

设置参数

描述

有效值

默认值

cacheEnabled

该配置影响所有映射器中配置缓存的全局开关

true|false

true

lazyLoadingEnabled

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态

true|false

false

aggressiveLazyLoading

是否允许单一语句返回多结果集(需要兼容驱动)

true|false

false(版本3.4.1以后)

multipleResultSetsEnabled

是否允许单一语句返回多结果集(需要兼容驱动)

true|false

true

useColumnLabel

使用列标签代替列名。不同的驱动在这方面会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果

true|false

true

useGeneratedKeys

允许JDBC支持自动生成主键,需要驱动兼容。如果设置为 true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(如Derby)

true|false

false

autoMappingBehavior

指定 MyBatis 应如何自动映射到字段或属性。NONE 表示取消自动映射;PARTIAL表示只会自动映射,没有定义套结果集和映射结果集;FULL 会自动映射任意复杂的结果集(无论是否套)

NONE、PARTIAL、FUll

PARTIAL

defaultExecutorType

配置默认的执行器。SIMPLE 是普通的执行器;REUSE 会重用预处理语句;BATCH 执行器将重用语并执行批量更新

SIMPLE、REUSE、BATCH

SIMPLE

defaultStatementTimeout

设置超时时间,它决定驱动等待数据库响应的秒数

任何正整数

Not Set (null)

mapUnderscoreToCamelCase

是否开启自动驼峰命名规则映射,即从经典数据库列名 ACOLUMN 到经典 Java 属性名 aColumn 的类似映射

true|false

false

localCacheScope

MyBatis 利用本地缓存机制防止循环引用和加速重复查询默认值为SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为STATEMENT,则本地会话仅用在语句执行上对相同 SqlSession 的不同调用将不会共享数据

SESSION|STATEMENT

SESSION

jdbcTypeForNull

当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,如NULL、VARCHAR或OTHER

NULL|VARCHAR|OTHER

OTHER

callSettersOnNulls

指定当结果集中值为null的时候是否调用映射对象的settermap对象时为put)方法这对于有MapkeySet0依赖或nul值初始化的时候是有用的。注意,原始类型(int、boolean 等)是不能设置成null的

true|false

false

logPrefix

指定 MyBatis 增加到日志名称的前缀

任何字符串

Not Set

loglmpl

指定MyBatis所用日志的具体实现,未指定时将自动查找

SLF4J|LOG4J等

Not Set

proxyFactory

指定Mybatis创建具有延迟加载能力的对象所用到的代理工具

CGLIBIJAVASSIST

CGLIB

        3.typeAliases(别名)

        类型别名是为 Java类型命名的一个短的名称。它只和XM配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:

 <typeAliases>
        <typeAliasalias="Blog” type="domain.blog.Blog"/></typeAliases>
</typeAliases>
<typeAliases>
        <package name="com.mialab.mybatisdemo.domainu/>
</typeAliases>

                这样,每一个包中的JavaBean在没有注解的情况下,会使用Bean的首字母小写的非限定类名来作为它的别名。

        如果在包中的实体类中发现了 @Alias 注解,则将使用注解的值作为它的别名。例如,com.mialab.mybatis.demo.domain包下存在Student实体类,并且有以下代码。

         那么,可用“student”来作为“com.mialab.mybatisdemo.domain.Student”的别名。

        

@Alias("student")

public class Student {

        ...

}

        4.typeHandlers类型处理器

        无论是MyBatis在预处理语句中设置一个参数,还是从结果集中取出一个值,类型处理器都被用来将获取的值以合适的方式转换成Java 类型。

        5.objectFactory 对象工厂

        MyBatis每次创建结果对象的新实例时,它都会使用一个对象工厂实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法来实例化,要么在参数映射存在的时候通过参数构造方法来实例化。如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。

        6.plugins(插件)

        MyBatis允许用户在已映射语句执行过程中的某一点进行拦截调用默认情况下MBatis允许使用插件来拦截的接口和方法包括以下几个。

        

Executor (update,query,flushStatements,commit,rollback,getTransaction,closerisClosed)

ParameterHandler (getParameterObject,setParameters)

ResultSetHandler(handleResultSets,handleCursorResultSets,

handleOutputResultSetHandlerParameters)

StatementHandler (prepare,parameterizer batch, update, query)

        这4个接口及其包含的方法的细节可以通过查看每个方法的签名来了解,或者直接查看MyBatis 发行包中的源代码。假设用户想做的不仅仅是监控方法的调用,那么应该很好地了解正在重写的方法的行为。因为在试图修改或重写已有方法行为的时候,很可能会破坏 MBatis的核心模块,这些都是底层的类和方法,所以使用插件的时候要特别当心。 

        7.environments (配置环境)

        MyBatis可以配置多种环境,这种机制使得MyBatis可以将SOL映射应用于多种数据库中。例如,开发、测试和生产环境需要有不同的配置。尽管可以配置多个环境,但是每个SqlSessionFactory实例只能选择一个环境,即每个数据库对应一个SlSessionFactory实例。所以如果想连接两个数据库,就需要创建两个SqlSessionFactory实例,每个数据库对应一个。

        8.mappers (映射器)

        既然MyBatis的行为已经由上述元素配置现在需要开发者自己编写SQL映射语。mappers会告诉MyBatis到哪里去找映射文件,进而找到这些SOL语句。实际开发中,可以使用相对于类路径的资源引用或完全限定资源定位符(包括file:///URLs)类名或者包名等。例如:

               

<!-- Using classpath relative resources -->
<mappers><mapper resource-"org/mybatis/builder/AuthorMapper.xml"/><mapper resource="org/mybatis/builder/BlogMapper.xml"/>
</mappers>
<!-- Using url fully qualified paths -->
<mappers><mapper url=file://va/mappers/AuthorMapper.xml"/><mapper url=fl://var/mappers/BlogMapper.xm."/>
</mappers>
<!-- Using mapper interface classes -->
<mappers><mapper class="org.mybatis.builder.AuthorMapper"/><mapper class="org.mybatis.builder.BlogMappr"/>
</mappers>
<!-- Register all interfaces in a package as mappers -->
<mappers><package name="org.mybatis.builder"/>
</mappers>

        

http://www.lryc.cn/news/108428.html

相关文章:

  • linuxARM裸机学习笔记(2)----汇编LED灯实验
  • 用C语言实现插入排序算法
  • 2023 电赛E题--可能会出现的问题以及解决方法
  • Demystifying Prompts in Language Models via Perplexity Estimation
  • WEB集群——http、tomcat
  • Socks5代理:网络安全与爬虫之利器
  • 如何兼容低版本浏览器
  • 【雕爷学编程】MicroPython动手做(39)——机器视觉之图像基础2
  • gitlab搭建
  • JMeter 的使用
  • Java语言 Iterator 如何装换成 List
  • 国产GOWIN实现低成本实现CSI MIPI转换DVP
  • Typescript第六章 类型进阶(类型之间的关系,全面性检查,对象类型进阶,函数类型进阶,条件类型等)
  • kernel32.dll如何修复,快速解决kernel32.dll缺失的方法
  • 初始化前端项目配置 eslint、prettier、husky 等等
  • 嵌入式存储器为AI的实现提供了实现架构
  • iOS开发-格式化时间显示刚刚几分钟前几小时前等
  • ffmpeg视频音频命令
  • Jenkins工具系列 —— Jenkins 安装并启动
  • 使用中间人攻击的arp欺骗教程
  • 设计模式、Java8新特性实战 - List<T> 抽象统计组件
  • 【JavaEE初阶】博客系统后端
  • day51-Mybatis-Plus/代码生成器
  • 22.Netty源码之解码器
  • R语言【Tidyverse、Tidymodel】的机器学习方法
  • vscode 第一个文件夹在上一层文件夹同行,怎么处理
  • [JavaScript游戏开发] 绘制冰宫宝藏地图、人物鼠标点击移动、障碍检测
  • 【NLP概念源和流】 01-稀疏文档表示(第 1/20 部分)
  • 服务器运行python程序的使用说明
  • 8.2一日总结