曹耘豪的博客

MyBatis Plus的一些经验

  1. 类型转换
  2. Enum类型
    1. 使用注解的方式
    2. 使用TypeHandler
  3. 增加insertAll方法
  4. 使用拦截器
  5. 缺点
  6. 类型不匹配

类型转换

假如java类型是Integer,db类型是varchar

使用注解

Entity.class
1
2
3
4
5
@TableName(value = "table_name", autoResultMap = true)
public class Entity {
@TableField(typeHandler = IntegerStringHandler.class)
Integer field;
}

其中

IntegerStringHandler.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class IntegerStringHandler extends BaseTypeHandler<Integer> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Integer parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, String.valueOf(parameter));
}

@Override
public Integer getNullableResult(ResultSet rs, String columnName) throws SQLException {
String string = rs.getString(columnName);
return string == null ? null : Integer.valueOf(string);
}

@Override
public Integer getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String string = rs.getString(columnIndex);
return string == null ? null : Integer.valueOf(string);
}

@Override
public Integer getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String string = cs.getString(columnIndex);
return string == null ? null : Integer.valueOf(string);
}
}

使用Wrapper Set的方式:

1
2
3
Wrappers.<>lambdaUpdate()
.set(Entity::setField, value,
"typeHandler=com.example.xxx.handler.IntegerStringHandler")

Enum类型

使用注解的方式

Enum.java
1
2
3
4
5
6
7
8
public enum Enum {
A("1"),
B("2"),
;

@EnumValue
private final String code;
}

使用TypeHandler

(略)

增加insertAll方法

MybatisPlusConfiguration.java
1
2
3
4
5
6
7
8
9
10
11
12
13
@Bean
public CustomSqlInjector customSqlInjector() {
return new CustomSqlInjector();
}

public static class CustomSqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
methodList.add(new InsertBatchSomeColumn("insertAll", tableFieldInfo -> tableFieldInfo.getInsertStrategy() != FieldStrategy.NEVER));
return methodList;
}
}

使用拦截器

MybatisPlusConfiguration.java
1
2
3
4
5
6
7
8
9
10
11
12
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setDbType(DbType.MYSQL);
interceptor.addInnerInterceptor(paginationInnerInterceptor);

interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());

return interceptor;
}

缺点

类型不匹配

   /