MyBatis Puls
中已经定义了三种处理方式:FastjsonTypeHandler
,GsonTypeHandler
,JacksonTypeHandler
我们可以直接使用。
在对应的位置添加属性 autoResultMap = true
和typeHandler = FastjsonTypeHandler.class
即可。
方式一、
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.io.Serializable;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
@TableName(value = "sys_user", autoResultMap = true)
public class SysUser extends Model<SysUser>{
private Integer id;
private String userName;
@TableField(typeHandler = FastjsonTypeHandler.class)
private JSONArray roles;
}
方式二、
<resultMap id="sysUserMap" type="com.jayknoxqu.entity.SysUser" autoMapping="true">
<id column="user_id" property="userId"/>
<result column="user_name" property="userName"/>
<result column="roles" property="role" typeHandler="com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler"/>
</resultMap>
方式三、
异常:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'
注意: set 处理 typeHandler 需要设置 mapping
/**
* 设置 更新 SQL 的 SET 片段
*
* @param condition 是否加入 set
* @param column 字段
* @param val 值
* @param mapping 例: javaType=int,jdbcType=NUMERIC,typeHandler=xxx.xxx.MyTypeHandler
* @return children
*/
Children set(boolean condition, R column, Object val, String mapping);
例如:
String mapping = "typeHandler=com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler";
boolean success = userService.lambdaUpdate() .eq(User::getUserPhone, userPhone)
.set(User::getUserAddress, userAddress, mapping)
.update();
自带的updateById(),saveOrUpdate()等方法则不需要