Mybatis-Plus关于实体类型与数据库类型不匹配的问题
以JAVA List
需在实体类的属性上加@TableField注解
例如:
@TableField(value = "user_name", typeHandler = StringListTypeHandler.class)
private List<String> userName;
这样即可解决插入的问题,使用中会发现读取时还是无法正确匹配,由于mybatis-plus新增或者查询用的是两套映射,查询时workAddress是为null
需要再实体类在加上注解
@TableName(value = "user",autoResultMap = true)
更新,如果java类型为数组时,即使用了ArrayTypeHandler类型处理器,插入数据时还会导致Mysql报错:
java.sql.SQLException: Incorrect string value: '\xE6\x9D\xAD\xE5\xB7\x9E...' for xxx
网上搜了半天,只有插入emoji时的报错,解决方法是将字符集改为utf8mb4,但实际上mysql 8以上都会默认使用这个字符集;
后来想到的解决方案是:用一个工具方法即可完成对string[]类型到String字符串的转换
Map arrayHandler(Map map){
for (Object key : map.keySet()) {
if (map.get(key) instanceof String[]){
String[] strings = (String[]) map.get(key);
String string = Arrays.toString(strings);
string.replace("[", "");
string.replace("]", "");
map.put(key, string);
}
}
return map;
}
再次插入则一切正常