Skip to content

3.config

isea533 edited this page Feb 5, 2018 · 7 revisions

三、配置介绍

由于数据库存在各种各样的差异,因此有些时候要做一些必要的配置。

此外通用 Mapper 还提供了一些控制参数和一些和主键策略相关的参数。

文档提供的参数基于 4.0 及以后的版本

有些参数仍然存在,但是由于不推荐使用,这里不会介绍(如 UUID)。

提醒:看配置前,一定要看第二章的对象关系映射,否则不会明白这些参数的用途。

参数的配置方式在第一章中,针对不同的集成环境都写了详细的文档。

通用 Mapper 提供了下面这些参数:

  1. IDENTITY
  2. ORDER
  3. catalog
  4. schema
  5. notEmpty
  6. style
  7. enableMethodAnnotation
  8. useSimpleType
  9. simpleTypes
  10. enumAsSimpleType
  11. wrapKeyword
  12. checkExampleEntityClass

下面分别对这些参数进行介绍。

3.1 IDENTITY

取回主键的方式,可以配置的值如 2.3.2 中所列的数据库类型:

  • DB2: VALUES IDENTITY_VAL_LOCAL()
  • MYSQL: SELECT LAST_INSERT_ID()
  • SQLSERVER: SELECT SCOPE_IDENTITY()
  • CLOUDSCAPE: VALUES IDENTITY_VAL_LOCAL()
  • DERBY: VALUES IDENTITY_VAL_LOCAL()
  • HSQLDB: CALL IDENTITY()
  • SYBASE: SELECT @@IDENTITY
  • DB2_MF: SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
  • INFORMIX: select dbinfo('sqlca.sqlerrd1') from systables where tabid=1

配置时,写为:

IDENTITY=MYSQL

这个参数配置的同时,还经常伴着 3.2 中的 ORDER 参数。

3.2 ORDER

<selectKey>中的order属性,可选值为BEFOREAFTER

在 3.1 的配置以及 2.3.2 和 2.3.3 中都提到了这个参数。

在支持主键递增,满足 2.3.2 中的情况时,配置如下:

ORDER=AFTER

在类似Oracle序列或者通用的 UUID 时,配置如下:

ORDER=BEFORE

2.3 catalog

数据库的catalog,如果设置该值,查询的时候表名会带catalog设置的前缀。

2.4 schema

catalogcatalog优先级高于schema

2.5 notEmpty

insertSelectiveupdateByPrimaryKeySelective 中,是否判断字符串类型 !=''

配置方式:

notEmpty=true

2.6 style

实体和表转换时的默认规则,在 2.2 和 2.2.1 中都提到了这个参数,可选值如下:

  • normal:原值
  • camelhump:驼峰转下划线
  • uppercase:转换为大写
  • lowercase:转换为小写
  • camelhumpAndUppercase:驼峰转下划线大写形式
  • camelhumpAndLowercase:驼峰转下划线小写形式

配置方式如下:

style=camelhumpAndUppercase

2.7 enableMethodAnnotation

可以控制是否支持(getter 和 setter)在方法上使用注解,默认false

配置方式如下:

enableMethodAnnotation=true

启用后,可以按照下面方式使用:

private String name;

@Column(name = "user_name")
public void setName(String name){
  this.name = name;
}

2.8 useSimpleType

默认 true,启用后判断实体类属性是否为表字段时校验字段是否为简单类型,如果不是就忽略该属性,这个配置优先级高于所有注解。

注意:byte, short, int, long, float, double, char, boolean 由于存在默认值,这里不会作为简单类型对待!也就是默认情况下,这些字段不会和表字段进行映射。2.2.5 中也强调了这一点。

配置方式如下:

useSimpleType=true

2.9 simpleTypes

默认的简单类型在 SimpleTypeUtil 中,使用该参数可以增加额外的简单类型,通过逗号隔开的全限定类名添加。

配置方式如:

simpleTypes=xxx.GenderEnum,xxx.JobEnum

2.10 enumAsSimpleType

用于配置是否将枚举类型当成基本类型对待。

默认 simpleType 会忽略枚举类型,使用 enumAsSimpleType 配置后会把枚举按简单类型处理,需要自己配置好 typeHandler

配置方式如下:

enumAsSimpleType=true

2.11 wrapKeyword

配置后会自动处理关键字,可以配的值和数据库有关。

例如 sqlserver 可以配置为 [{0}],使用 {0} 替代原来的列名。

MySql 对应的配置如下:

wrapKeyword=`{0}`

使用该配置后,类似 private String order 就不需要通过 @Column 来指定别名。

2.12 checkExampleEntityClass

默认 false 用于校验通用 Example 构造参数 entityClass 是否和当前调用的 Mapper<EntityClass> 类型一致。

假设存在下面代码:

Example example = new Example(City.class);
example.xxx...;//设置条件的方法
countryMapper.selectByExample(example);

注意,这里使用 City 创建的 Example,本该使用 cityMapper 来调用,但是这里使用了 countryMapper,默认情况下会出现字段不匹配的错误,更特殊的情况下会正好匹配字段,但是却操作错了表!

配置该字段为 true 后就会对不匹配的情况进行校验!

配置如下:

checkExampleEntityClass=true