我是靠谱客的博主 强健耳机,最近开发中收集的这篇文章主要介绍MyBatis配置文件详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

了解Config配置文件

1. properties标签

自定义properties文件,将关于数据库的配置放入该文件中。
数据源引入该文件properties文件中所定义的配置
properties:属性有俩,一个是resource:用于执行本项目中的配置文件,
也可以是url:一般引入本地资源文件或网络资源文件

<configuration>
    <!--引入外部的properties文件中的值-->
    <properties resource="jdbc.properties"></properties>
</configuration>

其中的属性就可以在整个配置文件中使用,使用可替换的属性来实现动态配置。比如:

<dataSource type="POOLED">
	<property name="driver" value="${driver}"/>
	<property name="url" value="${url}"/>
	<property name="username" value="${user}"/>
	<property name="password" value="${pwd}"/>
</dataSource>

注意:
如果在这些地方,属性多于一个的话,MyBatis 按照如下的顺序加载它们:

  • 在 properties 元素体内指定的属性首先被读取
  • 从类路径下资源或 properties 元素的 url 属性中加载的属性第二被读取,它会 覆盖已经存在的完全一样的属性
  • 作为方法参数传递的属性最后被读取, 它也会覆盖任意已经存在的完全一样的属性,这些属性可能是从 properties 元素体内和资源/url 属性中加载的。

因此, 最高优先级的属性是那些作为方法参数的, 然后是资源/url 属性, 最后是 properties 元素中指定的属性

2.settings标签 常用的改变的,其余的默认配置

这些是极其重要的调整, 它们会修改 MyBatis 在运行时的行为方式

  • cacheEnabled 这个配置使全局的映射器启用或禁用 缓存。
    有效值及默认值— true | false false
  • lazyLoadingEnabled 全局启用或禁用延迟加载。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态。
    有效值及默认值— true | false false
  • aggressiveLazyLoading 当启用时, 有延迟加载属性的对象在被调用时将会完全加载任意属性。否则, 每种属性将会按需要加载
    有效值及默认值— true | false true
  • useGeneratedKeys 允许 JDBC 支持生成的键。 需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用, 尽管一些驱动拒绝兼容但仍然有效(比如 Derby),获取主键自增的值。在insert中使用的时候。
    有效值及默认值— true | false false
<!--
useGeneratedKeys=”true“ :使用自增主键策略
keyProperty=“typeId”:将生成的主键绑定到对象的哪个属性中,此时便可以通过对象的typeId属性获取自增主键的值
 -->
<insert id="saveGetKey" parameterType="com.liujiawei.bean.GoodsType" useGeneratedKeys="true" keyProperty="typeId">
        insert into goods_type values(null, #{typeName}, #{typeDesc})
    </insert>
  • mapUnderscoreToCamelCase 是否开启驼峰命名自动映射,即从经典数据库列名 A_COLUMN 映射到经典 Java 属性名 aColumn。
    有效值及默认值— true | false false
<!--    开启驼峰命名法-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
  • useColumnLabel 使用列标签代替列名。 不同的驱动在这 方便表现不同。参考驱动文档或充分测 试两种方法来决定所使用的驱动。
    有效值及默认值— true | false true

3.typeAliases标签

类型别名是为 Java 类型命名一个短的名字。 它只和 XML 配置有关, 只用来减少类完全 限定名的多余部分
(别名不区分大小写)

 <typeAliases>
        <typeAlias type="com.liujiawei.bean.GoodsType" alias="goodsType"></typeAlias>
    </typeAliases>

除此以为还可以批量起别名(别名为默认值),使用package标签,为该包下的所有的类起别名。Name属性指定包名。为当前包以及后代包都起一个默认别名,就是类型小写。

<typeAliases>
	        <package name="com.liujiawei.bean"/>
</typeAliases>

如果此时不想使用默认别名或者类名重复,可以在该类中使用注解@Alias(“goodsType”)的方式起别名
注意:mybatis有已经起好的别名。自己起的别名不能与人家起好的别名重复。推荐使用完全限定名
如:List、Map的别名默认为list、map

4.typeHandlers标签

类型处理器
注意:从 3.4.5 开始,MyBatis 默认支持 JSR-310(日期和时间 API 。
java类型与数据库类型进行适配,mybaits3.4后的版本已经自己注册成功了。之前的版本需要自己通过该标签配置

5.objectFactory标签

MyBatis 每次创建结果对象新的实例时, 它使用一个 ObjectFactory 实例来完成。 如果参 数映射存在,默认的 ObjectFactory 不比使用默认构造方法或带参数的构造方法实例化目标 类做的工作多。如果你想重写默认的 ObjectFactory,你可以创建你自己的

ObjectFactory 接口很简单。它包含两个创建用的方法,一个是处理默认构造方法的,另外一个是处理带参数构造方法的。最终,setProperties 方法可以被用来配置 ObjectFactory。 在 初 始化 你 的 ObjectFactory 实例 后 , objectFactory 元素 体 中定 义的 属 性会 被传 递 给 setProperties 方法。

6.plugins标签

自定义插件,已经定义好的有以下四个
Executor:执行器,增删改查
ParameterHandler:参数处理器,sql预编译需要设置参数
ResultSetHandler:结果集处理器,将查出的数据封装到对象
StatementHandler:sql语句处理器
这些类中方法的细节可以通过查看每个方法的签名来发现,或者直接查看 MyBatis 发行包中的源代码。

7.environments标签

可以配置多个环境,有子标签environment,具体配置一个环境。通过environments中的default:属性指向默认配置的某个环境。
environment标签,有一个id属性,代表当前环境的唯一标识(可以自己取值)
必须再包含俩个子标签—
transactionManager(配置事物管理器)
dataSource(数据源)标签。

<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="${user}"/>
                <property name="password" value="${pwd}"/>
            </dataSource>
        </environment>
    </environments>

一个很重要的问题要记得:你可以配置多种环境,但你只能为每个 SqlSessionFactory 实例选择一个。
如果你想连接两个数据库,你需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,你就需要三个实例,以此类推
注意一些关键点
默认使用的环境 ID(比如:default=“development”)。
每个 environment 元素定义的环境 ID(比如:id=“development”)。
事务管理器的配置(比如:type=“JDBC”)。
数据源的配置(比如:type=“POOLED”)。
默认环境和环境 ID 顾名思义。 环境可以随意命名,但务必保证默认的环境 ID 要匹配其中一个环境 ID。

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

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

这两种事务管理器类型都不需要设置任何属性。它们其实是类型别名,换句话说,你可以用 TransactionFactory 接口实现类的全限定名或类型别名代替它们。

public interface TransactionFactory {
  default void setProperties(Properties props) { // 从 3.5.2 开始,该方法为默认方法
    // 空实现
  }
  Transaction newTransaction(Connection conn);
  Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit);
}

在事务管理器实例化后,所有在 XML 中配置的属性将会被传递给 setProperties() 方法。你的实现还需要创建一个 Transaction 接口的实现类

public interface Transaction {
  Connection getConnection() throws SQLException;
  void commit() throws SQLException;
  void rollback() throws SQLException;
  void close() throws SQLException;
  Integer getTimeout() throws SQLException;
}

使用这两个接口,你可以完全自定义 MyBatis 对事务的处理。

dataSource(数据源)标签
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
有三种内建的数据源类型(也就是 type="[UNPOOLED|POOLED|JNDI]"):

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

8.mappers标签

既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。

mybatis找到映射的方法

  • 将包内的映射器接口实现全部注册为映射器
<mappers>
        <package name="com.liujiawei.dao"/>
    </mappers>
  • 使用相对于类路径的资源引用
<mappers>
  	<mapper resource="com/liujiawei/dao/GoodsTypeDao.xml"></mapper>
    </mappers>
  • 使用映射器接口实现类的完全限定类名
<mappers>
        <mapper class="com.liujiawei.dao.GoodsTypeDao"></mapper>
    </mappers>

这些配置会告诉 MyBatis 去哪里找映射文件,剩下的细节就应该是每个 SQL 映射文件了

最后

以上就是强健耳机为你收集整理的MyBatis配置文件详解的全部内容,希望文章能够帮你解决MyBatis配置文件详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部