zoukankan      html  css  js  c++  java
  • (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>
     
  • 相关阅读:
    Castle实践1-Castle IOC容器剖析
    Castle实践-开篇
    界面逻辑和业务逻辑分离的重要性
    Castle实践4-Automatic Transaction Management Facility
    Castle实践2-Startable Facility
    世事无常....
    手动配置oracle客户端的方法
    Excel.Application 和 打印机 :)
    流水如斯...
    SourceControl
  • 原文地址:https://www.cnblogs.com/chenjiuqing/p/14241755.html
Copyright © 2011-2022 走看看