枚举的应用。

一:枚举的使用

   1): 在实际的开发中。我们会遇到这种场景。保存的性别为  男,女。

    2):解决方案。

    使用mybatis提供的类型转换器。

  EnumTypeHandler

  这是默认的枚举转换器,该转换器将枚举实例转换为实例名称的字符串,即将ComputerState.OPEN转换OPEN

  

  EnumOrdinalTypeHandler

  顾名思义这个转换器将枚举实例的ordinal属性作为取值,即ComputerState.OPEN转换为0,ComputerState.CLOSE转换为1

  

    写一个查询的小例子。

  1:Process实体类

 1 package com.ssm.bean;
 2 
 3 import com.ssm.enums.ProcessStatus;
 4 
 5 public class Process {
 6     private Integer id;
 7     private String name;
 8     private ProcessStatus status;
 9     public Process() {
10     }
11 
12     public Process(Integer id, String name, ProcessStatus status) {
13         this.id = id;
14         this.name = name;
15         this.status = status;
16     }
17 
18     public Integer getId() {
19         return id;
20     }
21 
22     public void setId(Integer id) {
23         this.id = id;
24     }
25 
26     public String getName() {
27         return name;
28     }
29 
30     public void setName(String name) {
31         this.name = name;
32     }
33 
34     public ProcessStatus getStatus() {
35         return status;
36     }
37 
38     public void setStatus(ProcessStatus status) {
39         this.status = status;
40     }
41 
42     @Override
43     public String toString() {
44         return "Process{" +
45                 "id=" + id +
46                 ", name='" + name + '\'' +
47                 ", status=" + status +
48                 '}';
49     }
50 }

  2:写一个ProcessStatus 枚举类

package com.ssm.enums;

public enum ProcessStatus {
    RUNNING(1, "running"),
    BLOCKED(2, "blocked"),
    STOPPED(3, "stopped"),
    FOUR(4, "four");
    private int code;
    private String desc;

    ProcessStatus(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

3:在mybatis的配置文件中配置:

<!--使用枚举类。从数据库中查询的0,转换成枚举类里的值。-->
    <typeHandlers>
        <typeHandler handler="org.apache.ibatis.type.EnumOrdinalTypeHandler" javaType="com.ssm.enums.ProcessStatus"/>
    </typeHandlers>

4:写一个查询的测试

1 <resultMap id="Base_ResultMap" type="com.ssm.bean.Process">
2         <id column="id" property="id" jdbcType="INTEGER"/>
3         <result column="name" property="name" jdbcType="VARCHAR"/>
4         <result column="status" property="status" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
5     </resultMap>
6     <select id="selectProcess"  resultMap="Base_ResultMap">
7         select * from process where id=#{id}
8     </select>

输出:

数据库中:

枚举类中:

结果:

 

posted @ 2018-04-28 13:21  陆伟  阅读(422)  评论(0编辑  收藏  举报