MyBatis配置文件(mybatis-config.xml)
MyBatis 配置文件的结构如下。
?xml version= 1.0 encoding= utf-8 ? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configuration !-- 配置 -- properties / !-- 属性 -- settings / !-- 设置 -- typeAliases / !-- 类型命名 -- typeHandlers / !-- 类型处理器 -- objectFactory / !-- 对象工厂 -- plugins / !-- 插件 -- environments !-- 配置环境 -- environment !-- 环境变量 -- transactionManager / !-- 事务管理器 -- dataSource / !-- 数据源 -- /environment /environments databaseIdProvider / !-- 数据库厂商标识 -- mappers / !-- 映射器 -- /configuration
mybatis-config.xml 文件中的元素节点是有一定顺序的,节点位置必须按以上位置排序,否则会编译错误。
下面介绍 XML 配置文件中的重要元素(标签)。
configuration 元素是整个 XML 配置文件的根节点,其角色就相当于是 MyBatis 的总管,MyBatis 所有的配置信息都会存放在它里面。
properties标签properties 标签可以通过 resource 属性指定外部 properties 文件(database.properties),也可以通过 properties 子元素配置。
1. 指定文件使用 properties 指定外部文件,代码如下。
properties resource= mybatisDemo/resources/database.properties /
database.properties 用于描述数据库连接的相关配置,例如数据库驱动、连接数据库的 url、数据库用户名、数据库密码等。
2. properties子元素配置通过 properties 子元素 property 配置 username 和 password 变量,然后在 environments 节点中引用这些变量,代码如下。
properties property name= username value= root / property name= password value= root / /properties
在 environments 节点中引用 username 和 password 变量。
environments default= development environment id= development transactionManager type= JDBC / 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
也可以不使用 properties 标签,直接将属性值写在 value 中。
settings标签settings 标签用于配置 MyBatis 的运行时行为,它能深刻的影响 MyBatis 的底层运行,一般不需要大量配置,大部分情况下使用其默认值即可。
settings 的配置项很多,但是真正用到的不会太多,我们把常用的配置项研究清楚就可以了。settings 配置项说明如下表所示(表中红色字体的配置项为常用配置项)。
延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。在特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态 true|false false
当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载 true|false 版本3.4.1 (不包含)
之前默认值为 true,之后为 false
使用列标签代替列名。不同的驱动会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果 true|false
允许JDBC 支持自动生成主键,需要驱动兼容。如果设置为 true,则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby) true|false false
NONE 表示取消自动映射。
PARTIAL 表示只会自动映射,没有定义嵌套结果集和映射结果集。
FULL 会自动映射任意复杂的结果集(无论是否嵌套) NONE、PARTIAL、FULL PARTIAL
指定自动映射当中未知列(或未知属性类型)时的行为。 默认是不处理,只有当日志级别达到 WARN 级别或者以下,才会显示相关日志,如果处理失败会抛出 SqlSessionException 异常 NONE、WARNING、FAILING
配置默认的执行器。SIMPLE 是普通的执行器;REUSE 会重用预处理语句(prepared statements);BATCH 执行器将重用语句并执行批量更新 SIMPLE、REUSE、BATCH SIMPLE
是否开启自动驼峰命名规则映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射 true|false false
MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速联复嵌套査询。
默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlScssion 的不同调用将不会共享数据 SESSION|STATEMENT SESSION
当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER NULL、VARCHAR、OTHER OTHER
指定当结果集中值为 null 时,是否调用映射对象的 setter(map 对象时为 put)方法,这对于 Map.kcySet() 依赖或 null 值初始化时是有用的。注意,基本类型(int、boolean 等)不能设置成 null true|false false
允许用方法参数中声明的实际名称引用参数。要使用此功能,项目必须被编译为 Java 8 参数的选择。(从版本 3.4.1 开始可以使用) true|false
setting name= cacheEnabled value= true / setting name= lazyLoadingEnabled value= true / setting name= multipleResultSetsEnabled 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= mapUnderscoreToCamelCase value= false / setting name= localCacheScope value= SESSION / setting name= jdbcTypeForNull value= OTHER / setting name= lazyLoadTriggerMethods value= equals,clone,hashCode,toString / /settings typeAliases标签
为了不在任何地方都指定类的全限定名,我们可以使用 typeAliases 标签定义一个别名。
例如,在 net.bianchengbang.po 包中有一个 Student 类,则该类的全限定名称为 net.bianchengbang.po.Student。使用 typeAliases 标签定义别名,这样就不用每次都书写类的全限定名称了,代码如下。
typeAliases typeAlias alias = Student type = net.bianchengbang.po.Student / /typeAliases
如果需要对同一个包下的多个类定义别名,则可以定义为:
typeAliases package name= net.biancheng.po / /typeAliases
这样 MyBatis 将扫描 net.biancheng.po 包里面的类,将其第一个字母变为小写作为其别名,例如 Student 别名为 student,User 别名为 user。
typeHandlers标签typeHandlers 主要将获取的值合理地转化为 Java 类型。在 typeHandler 中,分为 jdbcType 和 javaType,其中 jdbcType 用于定义数据库类型,而 javaType 用于定义 Java 类型,typeHandler 的作用就是承担 jdbcType 和 javaType 之间的相互转换。
MyBatis 支持自定义处理类型,在自定义处理类型时,需要实现 org.apache.ibatis.type.TypeHandler 接口或继承 org.apache.ibatis.type.BaseTypeHandle 类。详细可参考官网:http://www.mybatis.org/mybatis-3/zh/configuration.html#typeHandlers
environments标签在 environments 标签中,可以配置 MyBatis 的多套运行环境,将 SQL 映射到多个不同的数据库上。
environment 是 environments 的子标签,用来配置 MyBatis 的一套运行环境,需指定运行环境 ID、事务管理、数据源配置等相关信息。
我们可以通过配置多个 environment 标签来连接多个数据库,需要注意的是必须指定其中一个为默认运行环境(通过default指定)。
environment 标签提供了两个子标签,即 transactionManager 和 dataSource。
transactionManager标签MyBatis 支持两个事务管理器,即 JDBC 和 MANAGED。
如果使用 JDBC 类型的事务管理器,则应用程序服务器负责事务管理操作,例如提交、回滚等。如果使用 MANAGED 类型的事务管理器,则应用程序服务器负责管理连接生命周期。
dataSource标签用于配置数据库的连接属性,例如要连接的数据库的驱动程序名称、URL、用户名和密码等。
dataSource 中的 type 属性用于指定数据源类型,有以下 3 种类型。
1)UNPOOLEDUNPOOLED 没有数据库连接池,效率低下。MyBatis 需要打开和关闭每个数据库操作的连接,它有点慢,通常应用于简单的应用程序。
2)POOLED对于 POOLED 数据源类型,MyBatis 将维护一个数据库连接池。并且对于每个数据库的操作,MyBatis 都会使用连接池中的连接,并在操作完成后将它们返回到池中。减少了创建新连接所需的初始连接和身份验证时间。
3)JNDI对于 JNDI 的数据源类型,MyBatis 将从 JNDI 数据源中获取连接。
dataSource 标签示例代码如下:
dataSource type= POOLED !-- MySQL数据库驱动 -- property name= driver value= com.mysql.jdbc.Driver / !-- 连接数据库的URL -- property name= url value= jdbc:mysql://localhost:3306/test?characterEncoding=utf8 / property name= username value= root / property name= password value= root / /dataSourcemappers标签
mappers 标签用于指定 MyBatis SQL 映射文件的路径。
mapper 是 mappers 的子标签,mapper 中的 resource 属性用于指定 SQL 映射文件的路径(类资源路径)
例如,SQL 映射文件的名称是 Student.xml,它位于名为 net.biancheng.mapper 的包中,那么您可以这样配置:
mappers mapper resource= net/biancheng/mapper/Student.xml / /mappers
24136.html
Mybatis相关文章
- mybatis异常invalid comparison: java.util.Date and java.lang.String
- MyBatis框架:第十一章:mybatis 逆向工程
- hibernate和mybatis的区别及特点_hibernate配置文件中,不包含下面的
- MyBatis框架:第十章:mybatis缓存
- 【JAVA代码审计】从零开始的Mybatis框架SQL注入审计(上)
- 为什么?Mybatis的一级和二级缓存都不建议使用?
- Mybatis插件better-mybatis-generator的下载与使用
- mybatis的call-setters-on-nulls
- MyBatis配置文件 —— 相关标签详解
- Mybatis 分表插件shardbatis2.x使用指南详解编程语言
- mybatis中$和#号的区别详解编程语言
- Java数据持久层框架 MyBatis之API学习六(Mapper XML 文件详解)编程语言
- mybatis配置文件xxxx.xml中缺失返回类型的后果A query was run and no Result Maps were found详解编程语言