EnumTypeHandler是mybatis默認的枚舉類型轉換器,如果pojo類中使用了枚舉類型,而配置文件沒有指定類型轉換類,mybatis將使用EnumTypeHandler處理枚舉屬性。EnumTypeHandler的將把枚舉類的name進行存儲,枚舉類的name即枚舉類名。
EnumOrdinalTypeHandler是mybatis提供的另一種轉換器,顧名思義這個轉換類使用了枚舉類的ordinal屬性作為數據庫存儲信息,由於ordinal屬性是int類型的,按照官網的說明數據庫中對應資源應該是int或double類型的,但是個人測試過程中MYSQL的varchar字段也可以存儲。
總結:EnumTypeHandler和EnumOrdinalTypeHandler的區別主要是數據庫中存儲字段的類型差別,由於EnumOrdinalTypeHandler使用枚舉類型的ordinal作為存儲,所以必須使用數字類型字段存儲。
public Result addOrgan(@RequestBody AddOrganReq req) throws Exception {
log.info("添加機構請求參數:{}", JSON.toJSONString(req));
// 請求參數判空
EmptyCheck.isEmpty(req);
OrgEntity entity = new OrgEntity();
entity.setPid(0l);
entity.setOrgName(req.getOrganName());
entity.setDistrictCode(req.getDistrictCode());
entity.setOrgLevel(1);
entity.setStatus(DataStatus.ENABLED);
return Result.success(orgService.addOrg(entity));
}
因為添加的時候:狀態是以枚舉的形式添加進去的:
到了sql中,所以需要進行轉換:
<insert id="addOrg" parameterType="com.zyxh.cluecommon.entity.clueuser.OrgEntity" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into sys_org (pid,org_name,district_code,org_level,status)
values(#{pid},#{orgName},#{districtCode},#{orgLevel},#{status,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler})
</insert>