MyBatis 的配置十分重要,它直接左右 MyBatis 的行为我们可以将 MyBatis 配置分为两大部分,第一部分是 mapper,也就是容纳 SQL 语句的.xml文件,另一部分是 configuration ,也就是前面小节提到的 mybatis-config.xml 文件,今天小编就来说说关于mybatis简单使用?下面更多详细答案一起来看看吧!

mybatis简单使用(MyBatis配置介绍)

mybatis简单使用

1. 前言

MyBatis 的配置十分重要,它直接左右 MyBatis 的行为。我们可以将 MyBatis 配置分为两大部分,第一部分是 mapper,也就是容纳 SQL 语句的.xml文件,另一部分是 configuration ,也就是前面小节提到的 mybatis-config.xml 文件。

本小节,我们将介绍 configuration 中常见且有用的配置项。

2. 结构

MyBatis 以 .xml 作为配置文件,且以 configuration 作为配置的根节点。在 configuration 下有诸多配置项,它们的结构如下:

configuration(配置)

  • properties(属性)

  • settings(设置)

  • typeAliases(类型别名)

  • typeHandlers(类型处理器)

  • objectFactory(对象工厂)

  • plugins(插件)

  • environments(环境配置)

  • environment(环境变量)

  • transactionManager(事务管理器)

  • dataSource(数据源)

  • databaseIdProvider(数据库厂商标识)

  • mappers(映射器)

    MyBatis configuration 共 9 项,其中一些配置在前面的小节中已经介绍到了,下面我们将分别介绍每一项配置。

    3. 属性 properties

    通过 properties 配置,我们可以将一些重要的配置属性抽离到其它的 .properties 文件。

    比如,dataSource 中的数据库 url、用户名和密码,我们可以单独以 datasource.properties 文件来存储,然后在 mybatis-config.xml 文件中导入使用。

    在 resources 目录下新建 datasource.properties 文件,并填入以下内容:

    url=jdbc:mysql://localhost:3306/imooc?useSSL=false username=root password=123456

    然后在 mybatis-config.xml 文件中通过 properties 配置来引入 datasource.properties 文件:

    <?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> <!-- 引入datasource.properties --> <properties resource="datasource.properties"/> <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="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> </configuration>

    通过 properties 中的 resource 属性引入 datasource.properties 后,我们就可以使用占位符的方式去动态替换配置,如 ${url},表示从 datasource.properties 文件中取出 url 项并填充在此处。

    它们在目录中的位置如下:

    src/main/resources ├── datasource.properties ├── mybatis-config.xml

    4. 设置 settings

    MyBatis 提供了 settings 来设置一些主要的参数,它们会直接的改变 MyBatis 的运行时行为。

    settings 共有十几项,我们罗列一些常用的:

    设置名

    描述

    可选值

    默认值

    cacheEnabled

    全局地开启或关闭所有 mapper 中的缓存

    true | false

    true

    lazyLoadingEnabled

    延迟加载的全局开关,当开启时,所有关联对象都会延迟加载

    true | false

    false

    defaultStatementTimeout

    设置数据库查询超时时间

    任意正整数

    null

    mapUnderscoreToCamelCase

    是否开启自动驼峰命名规则(camel case)映射

    true |false

    false

    localCacheScope

    MyBatis会默认缓存会话中的查询,即 SESSION,若无需缓存则设置为 STATEMENT

    SESSION | STATEMENT

    SESSION

    defaultEnumTypeHandler

    指定 Enum 使用的默认 TypeHandler

    Java 类的全路径

    org.apache.ibatis.type.EnumTypeHandler

    logPrefix

    指定 MyBatis 日志名称前缀

    任何字符串

    未设置

    logImpl

    指定 MyBatis 日志的实现,未指定时将自动查找

    SLF4J | LOG4J|LOG4J2|JDK_LOGGING|COMMONS_LOGGING|STDOUT_LOGGING|NO_LOGGING

    未设置

    proxyFactory

    指定 Mybatis 创建具有延迟加载能力的对象所用到的代理工具

    CGLIB | JAVASSIST

    JAVASSIST

    当使用它们时,你只需要在 mybatis-config.xml 配置文件中打开相应的配置。

    例如,我们开启了下划线转驼峰的配置:

    <?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> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> </configuration>

    5. 别名 typeAliases

    MyBatis 在指定 Java 类时需要使用到类的全路径,如 com.imooc.mybatis.model.Blog,typeAliases 可以为全路径定义一个别名,这样就能减少一定的重复工作。

    例如,将 com.imooc.mybatis.model.Blog 的别名定义为 Blog:

    <?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> <typeAliases> <typeAlias type="com.imooc.mybatis.model.Blog" alias="Blog"/> </typeAliases> </configuration>

    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> <typeAliases> <package name="com.imooc.mybatis.model"/> </typeAliases> </configuration>

    这样在 com.imooc.mybatis.model 包中的所有类都有了别名,每个类的别名都是其类的名称首字母小写,如 Author 类的别名为 author。

    6. 类型处理器 typeHandlers

    类型处理器我们将在类型处理器小节中再详细介绍。

    7. 对象工厂 objectFactory

    MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)来完成。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> <objectFactory type="org.mybatis.example.ExampleObjectFactory"/> </configuration>

    绝大多数情况下,这个操作都是极其危险的,改变了 MyBatis 默认的对象创建行为可能会带来一定的兼容错误,所以我们不做过多介绍,如果你确实需要它,可以查阅相关的资料。

    8. 插件 plugins

    插件我们将在插件小节中再详细介绍。

    9. 环境配置 environments

    环境配置是最为复杂的一项配置,MyBatis 提供了多环境配置机制,例如:开发环境和生产环境上的数据库配置就大概率不一样。

    每个 environment 都有一个唯一的 id 字段,且 environments 需要提供一个默认环境,如下:

    <?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> <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/imooc?useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>

    在每个 environment 下又有两个子配置项,它们分别负责管理事务和数据源。

    9.1 事务管理器 transactionManager

    在 xml 文件中对应 <transactionManager type="JDBC"/>,其中 type 属性对应了事务管理器的两种类型,分别是JDBC和MANAGED。

  • JDBC :直接使用了 JDBC 的提交和回滚机制。

  • MANAGED:让容器来管理事务的整个生命周期,例如 spring 容器。

    提示: 如果你使用 spring 作为容器,那么 transactionManager 会被自动配置且可用。

    9.2 数据源 dataSource

    在 xml 文件中对应<dataSource type="POOLED">,其中 type 属性代表了数据源的类型,可选的有三种类型,如下:

  • UNPOOLED:非池化数据源,每次使用时打开,结束后关闭,不推荐。

  • POOLED:池化数据源,连接池管理连接,推荐。

  • JNDI:在 EJB 这类容器中使用,几乎不用。

    10. 数据库厂商标识 databaseIdProvider

    多数据源支持我们将在多数据源支持小节中详细介绍。

    11. 映射器 mappers

    通过 mappers 配置,我们可以指定所对应 SQL 映射文件,这样 MyBatis 才能找到另一部分的 SQL 配置文件。

    mappers 可以包含多个 mapper,mapper 的加载共有 4 种方式。

    11.1 相对类路径

    通过 resource 属性指定 mapper .xml 文件所对应的类路径。

    <mappers> <mapper resource="com/imooc/mybatis/mapper/UserMapper.xml"/> </mappers>

    11.2 URL路径

    通过 url 属性指定 mapper .xml 文件所对应的文件路径。

    <mappers> <mapper url="file:///mapper/UserMapper.xml"/> </mappers>

    11.3 类路径

    通过 class 属性指定 mapper 类所对应的类路径。

    <mappers> <mapper class="com.imooc.mybatis.mapper.UserMapper"/> </mappers>

    11.4 包路径

    通过制定包路径,将包中的所有接口类自动扫描为 mapper。

    <mappers> <package name="com.imooc.mybatis.mapper"/> </mappers>

    12. 小结
  • MyBatis 的配置是比较多的,本小节列举了一些常用且重要的配置,如果你还不满足,可以阅读这里的官方配置文档。

  • MyBatis 的另一部分 SQL 配置虽然分散在了包中,但通过 mappers 这个中间桥梁,二者又紧密的结合在一起了。

  • 在真实的开发中,会有专门的类库来提供这些配置,但你需要了解它们,以便在需要时迅速作出反应。