通用mapper配置项

 配置内容都在spring-configuration-metadata.json文件中

注意:在配置中有mapper前缀的都为springboot中的配置方式,不是springboot的配置对应类:tk.mybatis.mapper.entity.Config中的属性字段名称

mappers

在 4.0 以前这是一个非常重要的参数,当时只有通过 mappers 配置过的接口才能真正调用

//自定义接口
//特别注意,该接口不能被扫描到,否则会出错
public interface BaseMapper<T> extends Mapper<T> {
}

在properties中配置mappers
mapper.mappers=com.lyf.mapper.BaseMapper

4.0 之后,增加了一个 @RegisterMapper 注解,通用 Mapper 中提供的所有接口都有这个注解,有了该注解后,通用 Mapper 会自动解析所有的接口,如果父接口(递归向上找到的最顶层)存在标记该注解的接口,就会自动注册上。因此 4.0 后使用通用 Mapper 提供的方法时,不需要在配置这个参数。
当你自己扩展通用接口时,建议加上该注解,否则就要配置 mappers 参数。

@RegisterMapper
public interface BaseEnhanceMapper<T> {

    @InsertProvider(type = BaseEnhanceProvider.class, method = "dynamicSQL")
    int insertList(List<? extends T> recordList);

    @UpdateProvider(type=BaseEnhanceProvider.class, method="dynamicSQL")
    int updateList(List<T> list);

}

IDENTITY

取回主键的方式

 

DB2VALUES IDENTITY_VAL_LOCAL()
MYSQLSELECT LAST_INSERT_ID()
SQLSERVERSELECT SCOPE_IDENTITY()
CLOUDSCAPEVALUES IDENTITY_VAL_LOCAL()
DERBYIDENTITY_VAL_LOCAL()
HSQLDBCALL IDENTITY()
SYBASESELECT @@IDENTITY
DB2_MFSELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1
INFORMIXselect dbinfo('sqlca.sqlerrd1') from systables where tabid=1

也可以自定义取回主键的方式:

CREATE OR REPLACE
FUNCTION sys_guid() RETURNS varchar(255)
BEGIN
    DECLARE uuid VARCHAR(32) DEFAULT '';
  SET uuid = replace(uuid(),'-','');
    RETURN uuid;
END

配置时,写为:

mapper.identity=mysql
#mapper.identity=select sys_guid() from dual

 需要配合在实体类的id生成策略:

    @GeneratedValue(strategy = GenerationType.IDENTITY)自定义策略,可以在properties文件配置
    private Long id;

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

ORDER(别名: order, before)

<selectKey>中的order属性,可选值为BEFORE和AFTER。
后来为了方便在 Spring Boot 中配置该参数,符合 Boot 的规范,增加了 order 和 before 两个别名。
在支持主键递增的情况时,配置如下:

//Properties 方式配置时(order可以大写)
ORDER=AFTER
//还可以
order=AFTER
//或
before=false

//Spring Boot 中,比上面多个前缀,并且 ORDER 不能使用
mapper.order=AFTER
//或者
mapper.before=false

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

//Properties 方式配置时
ORDER=BEFORE
//还可以
order=BEFORE
//或
before=true

//Spring Boot 中,比上面多个前缀,并且 ORDER 不能使用
mapper.order=BEFORE
//或者(Spring Boot)
mapper.before=true

注意:使用时按照需要选择一种即可,切勿同时配置!

catalog

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

mapper.catalog=lyf

#查询表的时候会使用lyf.表名    'lyf.PERSON' lyf为表空间名

schema

同catalog,catalog优先级高于schema。

notEmpty

insertSelective 和 updateByPrimaryKeySelective 中,是否判断字符串类型 !=''。
配置方式:

mapper.not-empty=true

style

实体和表转换时的默认规则可选值如下:默认为(camelhumpAndLowercase:驼峰转下划线小写形式)

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

配置方式如下:

mapper.style=camelhumpAndUppercase

enableMethodAnnotation

可以控制是否支持(getter 和 setter)在方法上使用注解,默认false。
配置方式如下:

mapper.enable-method-annotation=true

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

private String name;

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

 useSimpleType

默认 true,启用后判断实体类属性是否为表字段时校验字段是否为简单类型,如果不是就忽略该属性,这个配置优先级高于所有注解。
注意:byte, short, int, long, float, double, char, boolean 由于存在默认值,这里不会作为简单类型对待!也就是默认情况下,这些字段不会和表字段进行映射,所以实体类的属性类型最好使用包装类
配置方式如下:

mapper.use-simple-type=true

usePrimitiveType

为了方便部分还在使用基本类型的实体,增加了该属性,只有配置该属性,并且设置为 true 才会生效,启用后,会扫描 8 种基本类型。也就是会和数据库字段对应。没有找到对应springboot的配置
配置方式如下:

usePrimitiveType=true

simpleTypes

默认的简单类型在 SimpleTypeUtil 中,使用该参数可以增加额外的简单类型,通过逗号隔开的全限定类名添加。没有找到对应springboot的配置
配置方式如:

simpleTypes=xxx.GenderEnum,xxx.JobEnum

 enumAsSimpleType

用于配置是否将枚举类型当成基本类型对待。
默认 simpleType 会忽略枚举类型,使用 enumAsSimpleType 配置后会把枚举按简单类型处理,需要自己配置好 typeHandler。
配置方式如下:

mapper.enum-as-simple-type=true

wrapKeyword

配置后会自动处理关键字,可以配的值和数据库有关。
例如 sqlserver 可以配置为 [{0}],使用 {0} 替代原来的列名。
MySql 对应的配置如下:

mapper.wrap-keyword={0}

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

checkExampleEntityClass

默认 false 用于校验通用 Example 构造参数 entityClass 是否和当前调用的 Mapper<EntityClass> 类型一致。
假设存在下面代码:

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

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

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

mapper.check-example-entity-class=true

safeDelete

配置为 true 后,delete 和 deleteByExample 都必须设置查询条件才能删除,否则会抛出异常。
配置如下:

mapper.safe-delete=true

safeUpdate

配置为 true 后,updateByExample 和 updateByExampleSelective 都必须设置查询条件才能删除,否则会抛出异常(org.apache.ibatis.exceptions.PersistenceException)。

updateByPrimaryKey 和 updateByPrimaryKeySelective 由于要求必须使用主键,不存在这个问题。
配置如下:

mapper.safe-update=true

useJavaType

设置 true 时,参数中会增加 javaType 设置,如 {id, javaType=java.lang.Long}。在 <resultMap> 中也会设置 javaType 属性。
配置如下:

mapper.use-java-type=true

对于使用 User extends Pk<Long> 形式时,需要设置,否则 mybatis 低版本(<3.4.0) 无法识别类型。
建议升级到 mybatis 3.4.x 的最新版本
例如:

class Pk<T> {
  private T id;

  public T getId() {
    return id;
  }

  public void setId(T id) {
    this.id = id;
  }
}

class User extends Pk<Long> {
  private String name;
}

如果不设置 javaType,低版本的 MyBatis 会认为 id 的类型为 Object。升级 MyBatis 到 3.4.0+ 最好。
设置 useJavaType 只对通用 Mapper 自己方法有效,自己写的其他方法还需要自己指定。
特别注意
使用 useJavaType=true 后,调用 ByPrimaryKey 类的方法时,需要按照实体中对应的类型来指定,例如主键类型为 Long 时,必须 mapper.selectByPrimaryKey(1L)。
不配置时,没有这个限制,可以使用 mapper.selectByPrimaryKey(1) 或 mapper.selectByPrimaryKey("1") 等类型。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值