1.配置文件目录结构
2.environments(环境配置)
案例如下:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
environments中的default:环境属性使用的默认环境变量(与environment的ID属性值对应)
environment的ID属性:指定当前环境的唯一标识
transactionManager元素:事务管理器的配置(比如:type=“JDBC”)
事物管理器有两种类型:
----->1.JDBC:这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
---->2.MANAGED : 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
dataSource元素:数据源。dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。数据源配置事可选的,也可使用第三方数据源,如C3P0,DBCP。
有三种内建的数据源类型(相关属性可查看官方帮助文档):
---->1.UNPOOLED:(不适用连接池) 这个数据源的实现会每次请求时打开和关闭连接。虽然有点慢,但对那些数据库连接可用性要求不高的简单应用程序来说,是一个很好的选择。 性能表现则依赖于使用的数据库,对某些数据库来说,使用连接池并不重要,这个配置就很适合这种情形。
---->2.POOLED–:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
---->3.JNDI – 这个数据源实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的数据源引用。
3.mappers(映射器)
配置告诉MyBatisSQL映射文件位置。
1.单个映射文件注册
---->1.url:可以从磁盘或者网络路径引用
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
---->2.resource:在类路径下找SQL映射文件
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
---->3.class: 直接引用接口的全类名,此种方法需要将xml文件和接口文件放在同目录下,且文件名和类名相同
<mapper class="com.dao.EmployeeDao"/>
文件目录结构如下:
2.批量注册
将包内的注册器接口实现全部注册为映射器。同样要求XML文件和接口文件在同一包下,且文件名相同。
<package name="com.dao"/>
4.properties(属性)
配置属性值(key-value),使某些属性值可以动态替换。
---->1.在properties元素的子元素(peoperty)中设置。
<properties>
<property name="jdbc_username" value="root"/>
</properties>
---->2.引入外部配置文件
外部文件(dbconfig.properties)
jdbc_username=****
jdbc_password=****
jdbc_url=jdbc:mysql://localhost:3306/mybatis
jdbc_driver=com.mysql.cj.jdbc.Driver
<properties resource="dbconfig.properties"/>
数据源获取属性值
<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}" />
</dataSource>
如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
- 首先读取在 properties 元素体内指定的属性。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并
覆盖
之前读取过的同名属性。 - 最后读取作为方法参数传递的属性,并
覆盖
之前读取过的同名属性。
因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。
<!--多学一招,修改默认值的分隔符(:)-->
<property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/>
5.settings(设置)
MyBatis中继位重要的调整设置,会该百年MyBatis运行时的行为。(详细属性可见MyBatis官方文档)
设置名 | 详细描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 | true/false | true |
lazyLoadingEnabled | 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。 | true/false | false |
aggressiveLazyLoading | 开启时,任一方法的调用都会加载该对象的所有延迟加载属性。 否则,每个延迟加载属性会按需加载(参考lazyLoadTriggerMethods )。 | true/false | false (在 3.4.1 及之前的版本中默认为 true) |
6.typeAliases(类型别名)
可以为Java类型设置一个缩写名字。它仅用于XML配置,旨在降低冗余的全限定类名书写。(一般不适用)
1.一次指定单个类别名
<typeAliases>
<typeAlias alias="employee" type="com.bean.Employee"/>
</typeAliases>
2.指定一个包内的所有类别名
默认使用类名的首字母小写的非限定类名作为它的别名。
<typeAliases>
<package name="com.bean"/>
</typeAliases>
使用注解指定别名。与指定包内别名配合使用。
import org.apache.ibatis.type.Alias;
@Alias("emp")
同时MyBatis也为常见的JAVA基础类型建立了别名。需要注意的是,这些都是不区分大小写的。
7.typeHandlers(类型处理器)
MyBatis3.4以前的版本需要手动注册类型处理器,以后的版本都是自动注册的。
MyBatis支持重写已有的类型处理器或创建自己需要的类型处理器来处理不支持的或非标准的类型。步骤如下:
- 1.实现org.apache.ibatis.type.TypeHandler接口或者继承org.apache.ibatis.type.BaseTypeHandler
- 2.指定其映射某个JDBC类型(可选操作)
- 3.在mybatis全局配置文件中注册
如果需要可查看MyBatis官方文档。
8.objectFactory(对象工厂)
自定义修改MyBatis创建结果对象的新实例时的行为。如果需要可查看官方文档。
9.plugins(插件)
插件是MyBatis提供的一个非常强大的机制,我们可以通过插件来修改MyBatis的一些核心行为。插件通过动态代理机制,可以介入四大对象的任何一个方法的执行。
- Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
- ParameterHandler (getParameterObject, setParameters)
- ResultSetHandler (handleResultSets, handleOutputParameters)
- StatementHandler (prepare, parameterize, batch, update, query)
如分页查询插件使用,待更新
databaseIdProvider(数据库厂商表示)
MyBatis可以根据不同的数据库厂商执行不同的语句。如下:
<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver"/>
<property name="MYSQL" value="mysql"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
type = “DB_VENDOR”:设置MyBatis支持多厂商
property-name:数据库厂商标识
property-value:为标识起一个别名,方便SQL语句使用databaseId属性引用