Mybatis基础

把impossible变成I'm possible

Posted by Lydia on November 11, 2019

前言

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

XML配置

properties/属性

加载顺序

  1. 在 properties 元素体内指定的属性首先被读取。
  2. 然后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
  3. 最后读取作为方法参数传递的属性,并覆盖已读取的同名属性。

settings/设置

| 变量 |描述 |有效值 |默认值 | | — | — | — | — | |cacheEnabled |全局地开启或关闭配置文件中的所有映射器已经配置的任何缓存。 |true | false |true |

typeAliases/类型别名

只和 XML 配置有关,仅在于用来减少类完全限定名的冗余

typeHandlers/类型处理器

无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。

处理枚举类型

若想映射枚举类型 Enum,则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用。

objectFactory/对象工厂

MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。

plugins/插件

MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。 默认插件

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)

  • ParameterHandler (getParameterObject, setParameters)

  • ResultSetHandler (handleResultSets, handleOutputParameters)

  • StatementHandler (prepare, parameterize, batch, update, query)

environments/环境配置

可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

事务管理器(transactionManager)

在 MyBatis 中有两种类型的事务管理器(也就是 type=”[JDBC|MANAGED]”):

JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。 MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

数据源(dataSource)

UNPOOLED 每次被请求时打开和关闭连接 POOLED 利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间 JNDI 能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用

databaseIdProvider/数据库厂商标识

mappers/映射器

定义 SQL 映射语句

  • 使用相对于类路径的资源引用
  • 使用完全限定资源定位符(URL)
  • 使用映射器接口实现类的完全限定类名
  • 将包内的映射器接口实现全部注册为映射器

XML映射文件

动态SQL

Java API

SQL语句构建器

日志

参考文档

官方文档

未完待续