Fork me on GitHub

枚举处理器——Mybatis提供的枚举处理器(基础)

在sys_role中存在一个属性叫做enabled,这个属性的作用是判断此角色状态是否在用,0代表禁用,1代表可用。但是在Sys_Role类中使用的Enabled类型是Integer,这种情况下需要手动校验Enabled值是否符合要求,当数值较少的时候处理起来还相对较为容易,但是数值复杂的时候处理起来就会变得十分的复杂,因此这里的Enabled值最好通过枚举的形式实现。

 

 

1. 首先在com.example.simple下创建type包,包下创建枚举类Enabled类:

package com.example.simple.type;

public enum Enabled {
    disabled, //禁用
    enabled;  //启用
}

2. 修改SysRole类中enabled值:

/*
    * 有效标志
    * */
    private Enabled enabled;

    public Enabled getEnabled() {
        return enabled;
    }

    public void setEnabled(Enabled enabled) {
        this.enabled = enabled;
    }

3. 添加测试方法:

 @Test
    public void testUpdateById(){
        SqlSession sqlSession = getSqlSession();
        try{
            RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class);
            //先查询出角色,然后修改角色得enabled值为disabled
            SysRole role = roleMapper.selectById(2L);
            Assert.assertEquals(Enabled.enabled,role.getEnabled());//这里Enabled.enabled值拿到枚举值为enabled对应的value 为1 ,比较两者值是否相同
       role.setEnabled(Enabled.disabled);//这里Enabled.disabled值拿到枚举值为disabled对应的value为0
       roleMapper.updateById(role); 
       System.out.println("更新成功!");
       roleMapper.selectById(2L);
      }finally {
        sqlSession.close();
            }
  }

运行出现错误: 

Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'enabled' from result set. Cause: java.lang.IllegalArgumentException: No enum constant com.example.simple.type.Enabled.1

4. 这是因为在调用 Enabled.valueOf("1")的时候,枚举中没有1这个枚举值。因为在enabled被枚举赋值后,其下面的name和ordina也会相应被赋值,但是mybatis默认使用的org.apache.ibatis. type.EnumTypeHadler只能对枚举字面值进行处理,并不能完成name和ordinal等的赋值,所以这是需要在mybatis_config.xml中添加内容:

<typeHandlers>
        <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler"
                     javaType="com.example.simple.type.Enabled"/>
    </typeHandlers>

这里一定要注意,每个标签有固定的顺序,嘤嘤嘤之前看书的时候没注意记导致加进去的时候configuration标签一直报红也不知道是哪的问题,最后复习了半天才知道是标签没放对,卒。

 顺序如下:

properties>settings>typeAliases>typeHandlers>objectFactory>objectWrapperFactory>plugins>environments>mappers

这时再次运行,测试结果如下:

  这里的enabled值已由1更为了0,更新成功。

posted @ 2020-12-28 11:30  叶语婷  阅读(165)  评论(0编辑  收藏  举报