mybatis配置文件属性的详解和db.propertis文件的使用

Mybatis核心配置文件SqlMapConfig.xml配置

核心配置文件中标签的顺序如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3tJ04Zkp-1593517893543)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200628213840833.png)]

1.properties(属性):

将核心配置文件的某些属性(连接池的四大基本属性),可以在外部的properties核心配置文件中通过表达式引用。

配置步骤:

第一步:定义properties文件,配置属性信息
在这里插入图片描述
第二步:核心配置文件中引入外部属性文件
在这里插入图片描述
​ 注意:标签顺序,properties处在跟标签configuration下,第一顺位的位子。

第三步:在核心配置文件中使用表达式直接引用属性值(因为properties文件中存放的对象都是以键值对的形式存放),可以通过$符号,从中取出来。
在这里插入图片描述

2.settings(设置)(了解)

这是mybatis中极为重要的调整设置,他们会改变mybatis的运行时行为。一般不做操作

一个完整的settings配置如下所示:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

3.typealiases(别名)

含义:给类名起别名,小名。**(使用简短的单词代替java类型的全限定名:包名+类名)**仅用于 XML 配置,意在降低冗余的全限定类名书写

使用:

在这里插入图片描述

typeAliases:别名标签

type:类的全限定名

alias:别名

第二种方式起别名:

在这里插入图片描述

代指给当前包下所有的实体类起别名,当前包下类型的别名是类名,忽略大小写。

第三种方式:下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格

在这里插入图片描述

4.对象工厂(objectfactory)

每次Mybatis创建结果对象的新实例时,他都会使用一个对象工厂(ObjectFactory)实例来完成实例化工作。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认无参构造方法,要么通过存在的参数映射来调用带有参数的构造方法。如果想要覆盖对象工厂的默认行为,可以通过创建自己的对象工厂来实现。比如:

// ExampleObjectFactory.java
public class ExampleObjectFactory extends DefaultObjectFactory {
  public Object create(Class type) {
    return super.create(type);
  }
  public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) {
    return super.create(type, constructorArgTypes, constructorArgs);
  }
  public void setProperties(Properties properties) {
    super.setProperties(properties);
  }
  public <T> boolean isCollection(Class<T> type) {
    return Collection.class.isAssignableFrom(type);
  }}
<!-- mybatis-config.xml -->
<objectFactory type="org.mybatis.example.ExampleObjectFactory">
  <property name="someProperty" value="100"/>
</objectFactory>

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

5.环境配置(environments)

Mybatis可以配置适应多种环境,这种机制有助于将SQL映射应用于多种数据库之中,现实情况也有多种理由这么做。例如:开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory实例只能选择一种环境。

所以,如果你想连接两个数据库,就需要创建两个SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单。

environments元素定义了如何配置环境

<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
    </dataSource>
  </environment>
</environments>

注意:

默认使用的环境ID(比如:default=“development”)

每个environment元素定义的环境ID(比如:id=“development”)

事务管理器的配置(比如:type=“JDBC”)

数据源的配置(比如:type=“POOLED”)

6.映射器(mappers)

1.使用相对于类路径的资源引用:mapper–resource
在这里插入图片描述
2.使用完全限定资源定位符(URL)

在这里插入图片描述
在这里插入图片描述

3.使用映射器接口实现类的完全限定类名

映射器接口实现类的完全限定类名:映射文件中的namespace属性值,接口的全限定名

在这里插入图片描述

将映射文件放到接口包下,代替了实现类。

使用Eclipse开发过程中, 通常情况下,映射文件与接口在同一包下,名称相同

4.将包内的映射器接口实现全部注册为映射器
在这里插入图片描述
将映射文件放到接口包下,代替了实现类。*

使用Eclipse开发过程中, 通常情况下,映射文件与接口在同一包下,名称相同

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章