(mybatis)EnumTypeHandler和EnumOrdinalTypeHandler的区别

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>
 
posted @ 2021-01-06 16:16  六月的雨莹  阅读(910)  评论(0编辑  收藏  举报