根元素<configuration>,子元素:

  • <properties>
  • <setttings>
  • <typeAliases>
  • <typeHandlers>
  • <objectFactory>
  • <plugins>
  • <environments>
  • <databaseIdProvider>
  • <mappers>

这些子元素的配置是有顺序的,只能按照上面的顺序配置。

可缺省部分子元素。


<properties>

用于将内部的配置外在化,在<properties>中引入外部配置即可。

比如数据库的连接信息,我们可以直接写在全局配置文件中:

<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT"/>
<property name="username" value="chy"/>
<property name="password" value="abcd"/>
</dataSource>
</environment>
</environments>

考虑到更换数据库时,运维从一大堆代码不好找数据库的连接信息,我们可以把数据库的连接信息拿出来,单独写在一个配置文件中。

sql.properties:

mysql_driver=com.mysql.cj.jdbc.Driver
mysql_url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
mysql_username=chy
mysql_password=abcd
#oracle_driver=.....
#oracle_url=.....
#oracle_username=.....
#oracle_password=.....

mybatis-config.xml:

    <properties resource="sql.properties"></properties>

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

<settings>

用于设置mybatis运行时的参数。常用的项有:

  • cacheEnabled:是否使用缓存,boolean值,默认为false
  • lazyLoadingEnabled :是否使用懒加载,boolean值,默认为false
  • defaultStatementTimeout:设置超时时间,默认单位秒
  • mapUnderscoreToCamelCase:是否启用camel命名规则的映射,boolean值,默认为false
  • logImpl:使用的日志框架

一般只需配置logImpl:

<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>

如果不使用日志框架,可以缺省此配置。


<typeAlias>

用于配置pojo类别名。

在映射文件中,如果parameterType、 resultType是自己写的pojo类,必须使用全限定类名:

resultType="com.chy.pojo.Student"

又臭又长,很麻烦。可以使用别名。

配置pojo类的别名:

<typeAliases>
<typeAlias type="com.chy.pojo.Student" alias="Student"/>
<typeAlias type="com.chy.pojo.Teacher" alias="Teacher"/>
</typeAliases>
resultType="Student"

直接写别名即可。

如果缺省alias属性,默认为类名的camel写法,比如Student => student。

也可以使用注解来配置pojo类的别名:

@Alias(value = "Student")
public class Student {
//......
}

可以缺省属性名,简写为

@Alias("Student")

如果觉得一个一个地配置pojo类很麻烦,可以使用包自动扫描:

<typeAliases>
<package name="com.chy.pojo"/>
</typeAliases>

这个包下所有的pojo类都使用camel命名方式的别名。

在映射文件中使用别名有一个缺点:Ctrl+左键不会转到定义处。


<typeHandlers>

将参数传给预处理语句时,需要将数据从javaType(java类型)转换为jdbcType(jdbc类型);

将结果集中的数据转换为指定类型时,需要将数据从jdbcType转换为javaType。

这2个过程都要用到typeHandler(类型转换器)。一般我们使用mybatis自带的类型转换器即可,也可以在<typeHandlers>中引用自定义的类型转换器。


<objectFactory>

ObjectFactory负责创建结果实例。

将查询结果映射为指定对象时,默认的ObjectFactory先调用无参的构造器创建pojo类的实例,再调用setter方法注入值。

一般我们使用默认的ObjectFactory即可,也可以在<objectFactory>中引用自定义的ObjectFactory类。


<plugins>

mybatis允许在将查询结果映射为指定类型的过程中,以插件形式执行自定义的代码。


<environments>

环境配置,mybatis是持久层框架,它的环境自然是数据库,即数据库的配置。

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

一般要配置多个环境,开发一个环境,正式使用一个环境。default指定要使用哪个<environment>。

一个<environment>即一个环境(数据库配置)。

<transactionManager>指定使用哪种事务管理,通常使用JDBC的事务管理。如果搭配Spring使用,一般使用Spring的事务管理(在spring中配置事务管理),不在mybatis中配置事务。

<dataSource>配置数据源,mybatis提供了三种数据源:

  • UNPOOLED    不使用连接池
  • POOLED   使用连接池
  • JNDI   适合在在EJB或应用服务器等容器中使用

type指定使用哪种数据源,<property>子元素设置具体选项。

UNPOOLED

不使用连接池,适合对性能没有要求的、简单的应用程序。

常用属性:

  • driver、url、username、password
  • defaultTransactionlsolationLevel   设置默认的事务隔离级别

POOLED

操作数据库速度更快,适合高并发的程序,很常用。

常用属性:

  • driver、url、username、password
  • defaultTransactionlsolationLevel   设置默认的事务隔离级别
  • poolMaximumActiveConnections   最大活跃连接数
  • poolMaximumIdleConnections   最大闲置连接数

<mapper>

用于引入映射文件。写法很多,常用的有3种:

  • 通过映射文件的路径引入
<mappers>
<mapper resource="com/chy/mapper/StudentMapper.xml"/>
<mapper resource="com/chy/mapper/TeacherMapper.xml"/>
</mappers>
  • 通过mapper接口类引入
<mappers>
<mapper class="com.chy.mapper.StudentMapper"/>
</mappers>
  • 通过包名引入
<mappers>
<package name="com.chy.mapper"/>
</mappers>

这种最常用,可以一次性引入mapper包下所有的映射文件。

MyBatis 配置文件详解的更多相关文章

  1. ORM框架对比以及Mybatis配置文件详解

    ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC ​ JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...

  2. 02.MyBatis配置文件详解

        MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/  1.properties 属性 1.在MyBatis配置文件中引用属性文件     MyBatis ...

  3. mybatis配置文件详解

    这是我看到的博文中最全的一篇了 参见:https://www.cnblogs.com/black-spike/p/7765732.html

  4. mybatis代码生成器配置文件详解

    mybatis代码生成器配置文件详解 更多详见 http://generator.sturgeon.mopaas.com/index.html http://generator.sturgeon.mo ...

  5. MyBatis核心配置文件详解

    ------------------------siwuxie095                                     MyBatis 核心配置文件详解         1.核心 ...

  6. 2017.2.9 深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二)-----配置文件详解

    深入浅出MyBatis技术原理与实践-第八章 MyBatis-Spring(二) ------配置文件详解 8.2 MyBatis-Spring应用 8.2.1 概述 本文主要讲述通过注解配置MyBa ...

  7. MyBatis 全局配置文件详解(七)

    MyBatis 配置文件作用 MyBatis配置文件包含影响 MyBatis 框架正常使用的功能设置和属性信息.它的作用好比手机里的设置图标,点击这个图标就可以帮助我们查看手机的属性信息和设置功能.其 ...

  8. 【JAVAEE学习笔记】hibernate01:简介、搭建、配置文件详解、API详解和CRM练习:保存客户

    今日学习:hibernate是什么 一.hibernate是什么 框架是什么: 1.框架是用来提高开发效率的 2.封装了好了一些功能.我们需要使用这些功能时,调用即可.不需要再手动实现. 3.所以框架 ...

  9. Mybatis配置详解

    一.SqlSession的使用范围说明  1.SQLSessionFactoryBuilder   通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory, ...

随机推荐

  1. 微信小程序解析HTML标签带有<p>

    小程序中默认是不支持html格式没有<p>标签,但是有些接口需要返回带有标签的,例如 : 隐私协议: 解决方法: 小程序中有一个富文本标签组件,前端可以解析H5标签就是 rich-text ...

  2. JZOJ5915 [2018NOIP模拟] 明日之星(广义后缀自动机,线段树)

    题目描述 给定一棵树,每个节点有一个权值 \(a_i\) 和一个字符串 \(s_i\). q组询问,每次询问一个字符串 S 和两个节点x,y: 求x到y路径上每个节点的字符串在 S 中出现的次数乘上各 ...

  3. 将训练好的Tensorflow模型部署到web应用中

    做一个简易web使用Flask是最好的选择,不仅上手快,使用也很便利.Django很强大也很好用,但一次就会创建一个项目的所需的文件,我觉得对于测试一个模型在web端有没有效果没必要用它. flask ...

  4. idea如何提取变量(拆分变量赋值和声明)

    需求描述: 我们时常遇到某个在某个局部作用域声明的变量,想要用在另一个地方,此时就需要在作用域外部声明变量,在作用域中给变量赋值. 在eclipse中这个功能和提取变量在一起,我们可以方便的拆分变量的 ...

  5. 跨域-JSONP

    jsonp跨域 - 前端适配,后台配合 说明:前后台同时改造 cnpm i jsonp --save-dev 在App.vue里 import jsonp from 'jsonp' let url = ...

  6. CAS 和 ABA 问题

    CAS简介 CAS 全称是 compare and swap,是一种用于在多线程环境下实现同步功能的机制. CAS 它是一条CPU并发原语.操作包含三个操作数 -- 内存位置.预期数值和新值.CAS ...

  7. Python 输入与输出

    Python2版本 raw_input raw_input("输入提示"),会把输入的内容当做字符串返回 input 会把用户输入的内容当做代码来处理,可以理解为 raw_inpu ...

  8. ES5-bind用法及与以前的apply和call

    当我们调用一个函数的时候,函数中的this一般是指向调用者的.但是我们其实可以在调用函数的时候,传入一个对象,让函数中的this指向我们传入的对象,而不是调用者本身. apply,call,bind都 ...

  9. 【JS 移动端】获取设置页面大小

    获取设置页面大小 function getMobileData() { var ismobile = false; browser = { versions: function () { var u ...

  10. 树莓派4B踩坑指南 - (9)安装Git和Docker

    安装Git sudo apt-get install wget git-core 安装Docker curl -sSL https://get.docker.com | sh # 树莓派专属脚本福利, ...