首页 > 其他 > 详细

Mybatis全局配置文件详解(三)

时间:2019-09-21 10:52:05      阅读:97      评论:0      收藏:0      [点我收藏+]

每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心。SqlSessionFactory实例可以由SqlSessionFactoryBuild获得,而SqlSessionFactoryBuild可以以一个xml配置文件(Configuration.xml)构建出SqlSessionFactory实例。

Configuration.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>
    //...... 
</configuration>

</configuration>主要有以下几个标签:

  • <databaseIdProvider>
  • <environments>
  • <mappers>
  • <objectFactory>
  • <objectWrapperFactory>
  • <plugins>
  • <properties>
  • <reflectorFactory>
  • <settings>
  • <typeAliases>
  • <typeHandlers>

注意:mybatis全局配置文件的标签是有顺序限制的。

properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?

一、<properties>

作用:引用java属性文件中的配置信息,比如,加载连接数据库的各种属性的配置文件。

properties有两个属性:

  • resource 引入类路径下资源 
  • url 引入网络路径或磁盘路径下资源
<properties resource="jdbc.properties"></properties>

jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.178.5:12345/ssm?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai
jdbc.name=root
jdbc.password=123456

在配置文件中即可以使用类似${jdbc.name}来获取对应的属性值。

二、<settings>

用于改变Mybatis运行时的行为,比如开启二级缓存、开启延时加载等操作。

常见的配置如下:

<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="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <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>

1. cacheEnabled

该配置影响的所有映射器中配置的缓存的全局开关。可选值true或false,默认是true。

2. lazyLoadingEnabled

延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。可选值true或false,默认是false。

3. aggressiveLazyLoading

是否允许单一语句返回多结果集(需要兼容驱动)。

可选值true或false,默认是true。

4. useColumnLabel

使用列标签代替列名。不同的驱动在这方面会有不同的表现, 具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。

可选值true或false,默认是true。

5. useGeneratedKeys

允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。

可选值true或false,默认是false。

6. autoMappingBehavior

指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。

可选值NONE, PARTIAL, FULL,默认是PARTIAL。

7. defaultExecutorType

配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新。

可选值SIMPLE, REUSE, BATCH,默认是SIMPLE 。

8. defaultStatementTimeout

设置超时时间,它决定驱动等待数据库响应的秒数。

9. safeRowBoundsEnabled

允许在嵌套语句中使用分页(RowBounds)。

可选值true或false,默认是false。

10. mapUnderscoreToCamelCase

是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。

可选值true或false,默认是false。

11. localCacheScope

MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。

可选值SESSION,STATEMENT,默认是SESSION。

12. jdbcTypeForNull

当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。

默认是OTHER。

13. lazyLoadTriggerMethods

指定哪个对象的方法触发一次延迟加载。

默认是equals,clone,hashCode,toString。

14. defaultScriptingLanguage

指定动态 SQL 生成的默认语言。

默认是org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver。

15. callSettersOnNulls

指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意基本类型(int、boolean等)是不能设置成 null 的。

可选值true或false,默认是false。

16. logPrefix

指定 MyBatis 增加到日志名称的前缀。

17. logImpl

指定 MyBatis 所用日志的具体实现,未指定时将自动查找。

可选值SLF4J,LOG4J,LOG4J2,JDK_LOGGING,COMMONS_LOGGING,STDOUT_LOGGING,NO_LOGGING,没有默认值。

18. proxyFactory

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

可选值CGLIB, JAVASSIST,默认值CGLIB。

三、<typeAliases>

类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。

例如:

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
  <typeAlias alias="Comment" type="domain.blog.Comment"/>
  <typeAlias alias="Post" type="domain.blog.Post"/>
  <typeAlias alias="Section" type="domain.blog.Section"/>
  <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

当这样配置时,Blog可以用在任何使用domain.blog.Blog的地方。

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:

<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。看下面的例子:

@Alias("author")
public class Author {
     ...
}

已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。

  _byte     byte  
  _long     long  
  _short     short  
  _int     int  
  _integer     int  
  _double     double  
  _float     float  
  _boolean     boolean  
  string     String  
  byte     Byte  
  long     Long  
  short     Short  
  int     Integer  
  integer     Integer  
  double     Double  
  float     Float  
  boolean     Boolean  
  date     Date  
  decimal     BigDecimal  
  bigdecimal     BigDecimal  
  object     Object  
  map     Map  
  hashmap     HashMap  
  list     List  
  arraylist     ArrayList  
  collection     Collection  
  iterator     Iterator  

 

四、<typeHandlers>

 

五、<objectFactory>

 

六、<objectWrapperFactory>

 

七、<reflectorFactory>

 

 

 

八、<plugins>

 

九、<environments>

 

 

 

十、<databaseIdProvider>

databaseIdProvider的作用就是指定多个数据库厂商,mybatis进行切换到其他数据时可以动态的指定SQL语句进行执行。

<!-- 
    databaseIdProvider:支持多数据库厂商的;
    DB_VENDOR:VendorDatabaseIdProvider
    作用就是得到数据库厂商的标识(驱动getDatabaseProductName()),mybatis就能根据数据库厂商标识来执行不同的sql;
    MySQL,Oracle,SQL Server,xxxx
-->
<databaseIdProvider type="DB_VENDOR">
    <!-- 为不同的数据库厂商起别名 -->
    <property name="MySQL" value="mysql"/>
    <property name="Oracle" value="oracle"/>
    <property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>

databaseIdProvider子标签的value(mysql、oracle等)对应映射文件的databaseId。

<select id="getUserById" resultType="com.linhw.demo.pojo.User">
    select * from user where user_id = #{userId}
</select>
<select id="getUserById" resultType="com.linhw.demo.pojo.User" databaseId="mysql">
    select * from user where user_id = #{userId}
</select>
<select id="getUserById" resultType="com.linhw.demo.pojo.User" databaseId="oracle">
    select USER_ID userId,USER_NAME userName,AGE age
    from USER where USER_ID=#{userId}
</select>

说明:

databaseId值为mysql表示:当数据库连接为mysql数据库时,该语句才会被执行,如果此时项目使用的是orcle数据则该条语句不会被执行。

没有设置databaseId表示:无论当前连接的什么数据库,该条语句都能被使用。但是如上面这种情况,如果使用的mysql数据库则databaseId=mysql且id为getUserById的语句可以执行,而同时id也是getUserById且没指定的databaseId的语句也可以被执行。这时系统将执行指定更加精确的databaseId=mysql且id为getUserById的语句。

十一、<mappers>

 

Mybatis全局配置文件详解(三)

原文:https://www.cnblogs.com/myitnews/p/11561469.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!