Mybatis(1、核心配置文件、Properties、Settings、typeAliases...)

2017年04月23日 22:52:36

阅读数:1527

此章主要介绍sqlMapConfiguragion.xml的核心配置属性。

mybatis、mappers、Environments、ObjectFactory、typeHandlers、Properties、Settings、typeAliases、Plugins

原链接为:https://blog.csdn.net/www1056481167/article/details/70551663

mybatis核心

MyBatis的xml配置文件包含了设置和影响MyBatis行为的属性,XML配置文件的层次饥结构如下:

Configuration

Properties属性

Settings设置

typeAliases类型别名

typeHandlers类型处理器

ObjectFactory对象工厂

Plugins插件

Environments环境

Environment环境变量

transactionManager事物管理器

datasource数据源

mappers映射器

基本配置项:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. …其他配置项
  7. </configuration>

注意:

MyBatis 将按照下面的顺序来加载属性:

在  properties素体内定义的属性首先被读取。

然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。

最后读取parameterType传递的属性,它会覆盖已读取的同名属性。

建议:

不要在properties元素体内添加任何属性值,只将属性值定义在properties文件中。

在properties文件中定义属性名要有一定的特殊性,如:XXXXX.XXXXX.XXXX

Properties属性

作用:这些是外部化的, 可替代的属性, 这些属性也可以配置在典型的 Java 属性配置文件中, 或者通过 properties 元素的子元素来传递

  1. <properties resource="db.properties">
  2. <!--properties中还可以配置一些属性名和属性值 -->
  3. <property name="jdbc.driver" value=""/>
  4. </properties>

Settings的设置

mybatis框架在运行时可以调整一些运行参数。

settings是极其重要的配置, 它们会修改 MyBatis 在运行时的行为方式。

设置选项 描述 可用值 默认值
cacheEnabled

全局性地启用或禁用所有在 mapper配

置文件

true|false true
lazyLoadingEnabled

全局性地启用或禁用延迟加载。当禁用

true|false true
aggressiveLazyLoading

当启用后,一个有延迟加载属性的对象的任何一个延迟属性被加载时,该对象

的所有的属性都会被加载。否则,所有 属性都是按需加载。

true|false true
multipleResultSetsEnabled 允许或禁止从单一的语句返回多个结果 集(需要驱动程序兼容)。 true|false true
useColumnLabel

使用列的标签而不是列的名称。在这方面,不同的驱动程序可能有不同的实

现。参考驱动程序的文档或者进行测试来确定您所使用的驱动程的行为

true|false true
useGeneratedKeys

允许JDBC自动生成主键。需要驱动程序兼容。如果设置为 true则会强行自

动生成主键,然而有些则不会自动生

true|false False
autoMappingBehavior

指定MyBatis是否以及如何自动将列映射到字段/属性。

PARTIAL:只是自动映射简单、非嵌套的结果集。

NONE,PARTIAL,

FULL

PARTIAL
defaultExecutorType

配置默认的执行器(executor)。SIMPLE:简单的执行器。

REUSE:重用preparedstatements的执行器。

SIMPLEREUSE

BATCH

SIMPLE
defaultStatementTimeout 设置查询数据库超时时间。 任何正整数

NotSet(null)

注:一般情况下我们不需要特别指定,都使用的是默认值除非特殊需要自己指定状态值。

具体配置如下

  1. <configuration>
  2. <settings>
  3. <setting name="cacheEnabled" value="true"/>
  4. </settings>
  5. </configuration>

typeAliases类型别名

定义类型别名的意义以及用途:

在mapper.xml中,定义很多的statement,statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。例如查询结果返回的是一个user对象,此处可以定义一个user bean,然后入参或者返回参数可以指定为alias的定义的别名user即可。

1、单个定义别名

  1. <configuration>
  2. <typeAliases>
  3. <!-- 针对单个别名定义 type:类型的路径 alias:别名 -->
  4. <typeAlias type="org.mybatis.po.User" alias="user"/>
  5. </typeAliases>
  6. </configuration>

2、批量定义别名(常用)

  1. <configuration>
  2. <typeAliases>
  3. <!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->
  4. <package name="org.mybatis.po" />
  5. </typeAliases>
  6. </configuration>

typeHandlers类型处理器

说明:mybatis中通过typeHandlers完成jdbc类型和java类型的转换。通常情况下,mybatis提供的类型处理器满足日常需要,不需要自定义mybatis支持类型处理器

ObjectFactory对象工厂

MyBatis每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。默认情况下,我们不需要配置,mybatis会调用默认实现的objectFactory。除非我们要自定义ObjectFactory的实现,那么我们才需要去手动配置。

  1. //   ExampleObjectFactory.java
  2. public class ExampleObjectFactory extends DefaultObjectFactory { public Object create(Class type) {
  3. return super.create(type);
  4. }
  5. public Object create(
  6. Class type,
  7. List<Class> constructorArgTypes, List<Object> constructorArgs) {
  8. return super.create(type, constructorArgTypes, constructorArgs);
  9. }
  10. public void setProperties(Properties properties) { super.setProperties(properties);
  11. }
  12. }

// MapperConfig.xml

  1. <objectFactory  type="org.mybatis.example.ExampleObjectFactory">
  2. <property name="someProperty" value="100"/>
  3. </objectFactory>

ObjectFactory接口非常简单,它包含两个create的方法,一个是默认构造器,还有一个是含参数的构造器。最后的setProperties方法用来配置ObjectFactory。在初始化您自己的ObjectFactory实例之后,定义在objectFactory元素主体中的属性会以参数的形式传递给setProperties方法。

Plugins插件

plugins是一个可选配置。mybatis中的plugin其实就是个interceptor,它可以拦截Executor、ParameterHandler、ResultSetHandler、StatementHandler的部分方法,处理我们自己的逻辑。Executor就是真正执行sql语句的东西, ParameterHandler是处理我们传入参数的,还记得前面讲TypeHandler的时候提到过,mybatis默认帮我们实现了不少的typeHandler,当我们不显示配置typeHandler的时候,mybatis会根据参数类型自动选择合适的typeHandler执行,其实就是ParameterHandler在选择。ResultSetHandler就是处理返回结果的。

Environments环境

  1. <environments default="development">
  2. <environment id="development">
  3. <transactionManager type="JDBC" />
  4. <!-- 配置数据库连接信息 -->
  5. <dataSource type="POOLED">
  6. <!-- value属性值引用db.properties配置文件中配置的值 -->
  7. <property name="driver" value="${driver}" />
  8. <property name="url" value="${url}" />
  9. <property name="username" value="${name}" />
  10. <property name="password" value="${password}" />
  11. </dataSource>
  12. </environment>
  13. </environments>

mapper映射器

第一种加载方式:通过resource加载单个映射文件

xml配置

  1. <configuration>
  2. <mappers>
  3. <mapper resource="sqlmap/User.xml" />
  4. </mappers>
  5. </configuration>

第二种加载方式:通过mapper接口加载单个mapper

特别注意的是:通过mapper接口加载单个映射文件

遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中

上边规范的前提是:使用的是mapper代理方法

配置文件

  1. <configuration>
  2. <mappers>
  3. <mapper class="org.mybatis.mapper.UserMapper"/>
  4. </mappers>
  5. </configuration>

第三种加载方式:批量加载mapper(推荐使用)

批量加载mapper指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载

遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中

上边规范的前提是:使用的是mapper代理方法

  1. <configuration>
  2. <mappers>
  3. <package name="cn.itcast.mybatis.mapper" />
  4. </mappers>
  5. </configuration>

mybatis默认支持别名

sql映射XML文件

MyBatis真正强大之处就在这些映射语句,也就是它的魔力所在。对于它的强大功能,SQL映射文件的配置却非常简单

•  cache–在特定的命名空间配置缓存。

•  cache-ref  –引用另外一个命名空间配置的缓存.

•  resultMap  – 最复杂也是最强大的元素,用来描述如何从数据库结果集里加载对象。

•  parameterMap – 不推荐使用! 在旧的版本里使用的映射配置,这个元素在将来可能会被删除,因此不再进行描述。

•  sql –能够被其它语句重用的SQL块。

  • insert –INSERT映射语句
  • update–UPDATE映射语句
  • delete –DELEETE映射语句

select –SELECT映射语句 接下来的章节将会对每一个元素进行描述。

Mybatis(1、核心配置文件、Properties、Settings、typeAliases...)的更多相关文章

  1. mybatis配置报错(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)

    如下报错:解决方案:要按照提示的顺序添加属性,(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrappe ...

  2. The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?...

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...

  3. 【转】The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?...

    [转]The content of element type "configuration" must match "(properties?,settings?,typ ...

  4. 掌握Mybatis的核心配置文件

    一.配置文件结构 MyBatis的核心配置文件配置了MyBatis的一些全局信息,包含数据库连接信息和MyBatis运行时所需的各种特性,以及设置和影响MyBatis行为的一些属性. 该配置文件的元素 ...

  5. The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProv

    在mybatis配置文件config.xml中报错: The content of element type "configuration" must match "(p ...

  6. 元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?

    报错主要部分如下: Error building SqlSession.### Cause: org.apache.ibatis.builder.BuilderException: Error cre ...

  7. mybatis:"configuration" must match "(properties?,settings?,typeAliase.....

    在运行mybatis配置文件的时候,出现错误: mybatis:"configuration" must match "(properties?,settings?,ty ...

  8. 03.MyBatis的核心配置文件SqlMapConfig.xml

    SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器) o ...

  9. MyBatis 创建核心配置文件和 SQL 映射文件

    Mybatis 的两个配置文件(mybatis-config.xml  和 xxxMapper.xml)都为 xml 类型,因此在 eclipse 中创建 xml 文件命名为相应的 mybatis-c ...

  10. mybatis基础,mybatis核心配置文件properties元素

    peroperties元素 可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递 为dataSource元素配置 <proper ...

随机推荐

  1. 3.Freshman阶段学习内容的确定

    我刷知乎.在知乎上答题的程序员,不是很牛逼就是更牛逼,说起各种系统.各种系统的各种版本.各种语言.数据库.算法.IT届的各种圣战都有板有眼.信手拈来.头头是道,不得不服.这导致了一些非常严重的问题:我 ...

  2. 剑指tomcat之应用管理

    tomcat服务启动之后,有tomcat自身提供的应用管理(App Manage)页面,默认的地址就是服务的IP地址+端口号(IP:port):页面如下所示 点击上图的按钮便可进入应用管理页面,需要账 ...

  3. 记一次NegativeArraySizeException

    问题描述:服务器接收后台返回的报文时,提示java.lang.NegativeArraySizeException 分析:这种异常返回的原因,一般情况下没有报文提示为返回空报文,初步分析是响应报文流长 ...

  4. 使用Karabiner为Mac内置键盘、HHKB进行映射

    使用Karabiner为Mac内置键盘.HHKB进行映射 Table of Contents 1. 引言 2. 什么是Karabiner和配置方法的基本说明 3. 内置键盘设置 4. HHKB设置 5 ...

  5. Java分页下载

    需求.提供公共的可以按照一定条件查询出结果,并提供将查询结果全部下载功能(Excel.CSV.TXT),由于一次性查出结果放到内存会占用大量内存.需要支持分页模式查询出所有数据. 实现思路 1.在公共 ...

  6. CF1088D Ehab and another another xor problem

    思路: 根据异或的性质一位一位来搞.参考了https://blog.lucien.ink/archives/362/ 实现: #include <bits/stdc++.h> using ...

  7. cocos2d-android-1学习之旅01

    学习cocos2d-android-1也大概有半个月了,来整理一下自己的学习心得和提出自己的疑问.之所以不学习非常火的cocos2d-x,转而来学习这个网上学习资料少得可怜的cocos2d-andro ...

  8. SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第三篇)

    SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第三篇) 最近真的没有什么精力写文章,天天加班,为了完成这个系列,硬着头皮上了 再看这篇文章之前请大家先看我之前写的第一篇和第二篇 第一篇: ...

  9. Linux下解压ZIP压缩包乱码问题

    并不是所有ZIP文件都是乱码的而且导致解压失败,只有windows下压缩的ZIP在Linux中会出现这种情况.这是因为Windows和Linux下用的字符编码不同.Windows下的编码格式为GBK, ...

  10. 剑指offer18 树的子结构

    另一种写法 class Solution { public: bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { bool result = f ...