一、配置文档的顶层结构

configuration(配置)

  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境配置)
    • environment(环境变量)

      • transactionManager(事务管理器)
      • dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器)

二、属性(properties)

  • 属性可以在外部进行配置,并可以进行动态替换
  • Java 属性文件中配置这些属性,也可以 properties 元素的子元素中设置
<properties resource="org/mybatis/example/config.properties"><property name="username" value="dev_user"/><property name="password" value="F2Fa3!33TYyg"/>
</properties>
  • 设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值

  •     <environments default="development"><environment id="development"><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}"/> --><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments>
    

    **注意:**属性可以不只一个地方进行配置

    但是Mybatis会严格按照下面的顺序来加载

    • 首先读取在 properties 元素体内指定的属性。
    • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
    • 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。

二、设置(settings)

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

设置名 描述 有效值 默认值
cacheEnabled 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 true | false true
defaultStatementTimeout 设置超时时间,它决定数据库驱动等待数据库响应的秒数。 任意正整数 未设置 (null)
safeRowBoundsEnabled 是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。 true | false False
safeResultHandlerEnabled 是否允许在嵌套语句中使用结果处理器(ResultHandler)。如果允许使用则设置为 false。 true | false True
mapUnderscoreToCamelCase 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。 true | false False
localCacheScope MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。 默认值为 SESSION,会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。 SESSION | STATEMENT SESSION
defaultScriptingLanguage 指定动态 SQL 生成使用的默认脚本语言。 一个类型别名或全限定类名。 org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
logPrefix 指定 MyBatis 增加到日志名称的前缀。 任何字符串 未设置
logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING 未设置
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 true | false false
useGeneratedKeys 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。 true | false False
multipleResultSetsEnabled 是否允许单个语句返回多结果集(需要数据库驱动支持)。 true | false true

三、类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

举例

  • 原生态

    <!--这里是要用到 User 的地方 -->
    <select id="selectAll" resultType="com.study.pojo.User">select * from user</select>
    
  • 接下来在核心文件中取 别名

    • 1、

      <typeAliases><typeAlias alias="User" type="com.study.pojo.User"/>
      </typeAliases>
      

      :这样配置时,User 可以用在任何使用 com.study.pojo.User 的地方。

    • 取别名后使用 举例

      <select id="selectAll" resultType="User">select * from user</select>
      
  • 注解方式取别名

    • ​ 配置

      <typeAliases><!--这里的意思是 在 com.study.pojo 下的所有实体类 都可以 通过注解取别名 --><package name="com.study.pojo"/>
      </typeAliases>
      
    • com.study.pojo.User类

      @Alias("user")
      public class User {private Integer id;private String username;private String password;
      ... // 后面还有有参/无参 构造  set/get  toString 方法 这里就不写啦
      

四、类型处理器(typeHandlers)

  • 这个暂时接触的少,刚学,等用到的时候,再反过来重新更新。

五、插件(plugins)

  • 这个同上。

六、环境配置(environments)

  • MyBatis 可以配置成适应多种环境,尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

  • environments 元素定义了如何配置环境。

    <environments default="development"><environment id="development"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager><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>
    

    注意一些关键点:

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

    • 在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]")
    • JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
    • MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)
  • 数据源(dataSource)

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

    • 有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):

      • UNPOOLED– 这个数据源的实现会每次请求时打开和关闭连接。

        • UNPOOLED 类型的数据源仅仅需要配置以下 5 种属性:
        1. driver – 这是 JDBC 驱动的 Java 类全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
        2. url – 这是数据库的 JDBC URL 地址。
        3. username – 登录数据库的用户名。
        4. password – 登录数据库的密码。
        5. defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
        6. defaultNetworkTimeout – 等待数据库操作完成的默认网络超时时间(单位:毫秒)。查看 java.sql.Connection#setNetworkTimeout() 的 API 文档以获取更多信息。
      • POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。

        • 还有更多属性用来配置 POOLED 的数据源:

          1. poolMaximumActiveConnections – 在任意时间可存在的活动(正在使用)连接数量,默认值:10
          2. poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
          3. poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
          4. poolTimeToWait – 这是一个底层设置,如果获取连接花费了相当长的时间,连接池会打印状态日志并重新尝试获取一个连接(避免在误配置的情况下一直失败且不打印日志),默认值:20000 毫秒(即 20 秒)。
          5. poolMaximumLocalBadConnectionTolerance – 这是一个关于坏连接容忍度的底层设置, 作用于每一个尝试从缓存池获取连接的线程。 如果这个线程获取到的是一个坏的连接,那么这个数据源允许这个线程尝试重新获取一个新的连接,但是这个重新尝试的次数不应该超过 poolMaximumIdleConnectionspoolMaximumLocalBadConnectionTolerance 之和。 默认值:3(新增于 3.4.5)
          6. poolPingQuery – 发送到数据库的侦测查询,用来检验连接是否正常工作并准备接受请求。默认是“NO PING QUERY SET”,这会导致多数数据库驱动出错时返回恰当的错误消息。
          7. poolPingEnabled – 是否启用侦测查询。若开启,需要设置 poolPingQuery 属性为一个可执行的 SQL 语句(最好是一个速度非常快的 SQL 语句),默认值:false。
          8. poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的频率。可以被设置为和数据库连接超时时间一样,来避免不必要的侦测,默认值:0(即所有连接每一时刻都被侦测 — 当然仅当 poolPingEnabled 为 true 时适用)。
      • JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。

        • 这种数据源配置只需要两个属性:

          1. initial_context – 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))。这是个可选属性,如果忽略,那么将会直接从 InitialContext 中寻找 data_source 属性。
          2. data_source – 这是引用数据源实例位置的上下文路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。

七、数据库厂商标识(databaseIdProvider)

  • 因为目前只学习啦mysql 还没有接触到其他的数据库

  • 所以在这边只能 做出一个介绍

  • mybatis 是支持多个数据库的 只是根据数据库的不同而进行不同的配置

  • 官网讲的是:

    为支持多厂商特性,只要像下面这样在 mybatis-config.xml 文件中加入 databaseIdProvider 即可:

    <databaseIdProvider type="DB_VENDOR" />
    

    databaseIdProvider 对应的 DB_VENDOR 实现会将 databaseId 设置为 DatabaseMetaData#getDatabaseProductName() 返回的字符串。 由于通常情况下这些字符串都非常长,而且相同产品的不同版本会返回不同的值,你可能想通过设置属性别名来使其变短:

    <databaseIdProvider type="DB_VENDOR"><property name="SQL Server" value="sqlserver"/><property name="DB2" value="db2"/><property name="Oracle" value="oracle" />
    </databaseIdProvider>
    

    在提供了属性别名时,databaseIdProvider 的 DB_VENDOR 实现会将 databaseId 设置为数据库产品名与属性中的名称第一个相匹配的值,如果没有匹配的属性,将会设置为 “null”。 在这个例子中,如果 getDatabaseProductName() 返回“Oracle (DataDirect)”,databaseId 将被设置为“oracle”。

八、映射器(mappers)

  • 在前面刚刚入门的时候 就已经使用啦这个配置

  • <!-- 使用相对于类路径的资源引用 -->
    <mappers><mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
    </mappers>
    
  • <!-- 使用完全限定资源定位符(URL)  现在一般已经不用 -->
    <mappers><mapper url="file:///var/mappers/AuthorMapper.xml"/>
    </mappers>
    
  • <!-- 使用映射器接口实现类的完全限定类名 -->
    <mappers><mapper class="org.mybatis.builder.AuthorMapper"/>
    </mappers>
    
  • <!-- 将包内的映射器接口实现全部注册为映射器 -->
    <mappers><package name="org.mybatis.builder"/>
    </mappers>
    

Mybatis---全局配置解析 --根据官方文档--常用相关推荐

  1. jeesite配置指南(官方文档有坑,我把坑填了!)

    昨天,远在苏州的朋友找我一起做个私活,主要用到jeesite. 说实话,开发了这么多年的javaweb项目,我还是第一次知道jeesite. 起初我担心没有做私活的时间,生活安逸,工作随心,对于接私活 ...

  2. 《Log4j 2 官方文档》多余性(Additivity)

    如果我们希望输出com.foo.Bar的TRACE等级的日志,而不像影响其他日志的输出.简单的改变日志等级是不能达到我们想要的目的:但是修改也很简单,只要我们添加一个新的Logger定义就可以达到目标 ...

  3. Mybatis官方文档及使用简记

    Mybatis官方文档及使用简记 数据库建表 入门案例 无mapper类最传统的用法 使用mybatis generator 使用mybatis-generator mybatis-spring整合 ...

  4. Mybatis官方文档解读

    跟着Mybatis的官方文档总结一下.~ 简介 什么是mybatis? mybatis是一款优秀的持久层框架,它支持自定义SQL,存储过程以及高级映射.Mybatis免除了所有的JDBC代码以及 设置 ...

  5. mybatis 动态 SQL 官方文档

    MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦.例如拼接时要确保不能忘记添加必要的空格,还要注意去掉 ...

  6. Mybatis官方文档中的(XML映射文件)模块(半途凉了)

    Mybatis官方文档中的(XML映射文件)模块(半途凉了) 一.XML映射器属性的介绍 Mybatis的真正强大之处在于它的语句映射.他即可以自动的映射数据库中的字段和对象的属性. SQL映射文件有 ...

  7. Vue官方文档梳理-全局API

    Vue.extend 配置项data必须为function,否则配置无效.data的合并规则(可以看<Vue官方文档梳理-全局配置>)源码如下: 传入非function类型的data(上图 ...

  8. vue怎么把api 挂载到全局_深入理解Vue官方文档梳理之全局API

    Vue.extend 配置项data必须为function,否则配置无效.data的合并规则(可以看<Vue官方文档梳理-全局配置>)源码如下: 传入非function类型的data(上图 ...

  9. 微信小程序学习记录【1】【项目结构构成、官方文档构成、基本配置】

    微信小程序学习记录[1][项目结构构成.基本配置]文章目录 项目结构构成 官方文档结构 基本配置 1. 小程序配置 1.1 app.json 1.2 page(页面名).json 1.3 sitema ...

最新文章

  1. c语言中external,static关键字用法
  2. 开发日记-20190622 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  3. unity 动画原动画返回_Unity3D 动画回调方法
  4. 此服务器的时钟与主域控制器的时钟不一致_中移动“超高精度时间同步服务器”开标,两家中标...
  5. python-main
  6. js 添加事件 attachEvent 和 addEventListener 的区别
  7. adobe FMS(flash media server)错误解决小结
  8. mac系统虚拟机上的Linux系统的使用说明
  9. 现代抽象UI素材背景3D流畅的造型(样条)|轻松地为Web创建3D体验
  10. 移动磁盘显示由于IO设备错误,无法运行此项请求要怎样寻回资料
  11. Free DOS 1.0发布!
  12. python双线性插值函数_OpenCV ——双线性插值(Bilinear interpolation)
  13. 10 大最佳网络分析工具介绍
  14. php微信使用腾讯地图进行定位,微信小程序在腾讯地图上选择定位
  15. JDK1.8u162以及JDK1.8所有历史版本官网下载地址
  16. uni-app获取当前时间日期及之后7天和星期几
  17. 适合理工直男的钟平老师逻辑英语学习笔记
  18. 瞬时频率函数matlab,瞬时频率估计的相位建模法及Matlab的实现
  19. Win10 Docker 安装mysql8.0
  20. 抖音很火的情侣公众号天气推送

热门文章

  1. table control 光标定位控制
  2. 冰墩墩+周杰伦也救不了NFT
  3. 大厂都想做的乙女游戏,真就迎来爆发期了?
  4. 如何区分网线是几类的_银行卡分为三类,怎么知道自己的的银行卡是几类卡?...
  5. ppt复制切片器_这6个新手必学的PPT技能,让你效率提升10倍!套模板都比别人快...
  6. mysql jdbc连接 优化_java+mysql连接的优化
  7. Python标准库:itertools迭代器函数
  8. Python实现字符串反转的6种方法
  9. python 中将大列表拆分成小列表
  10. 使用Python内置的smtplib包和email包来实现邮件的构造和发送