枚举的应用。
一:枚举的使用
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>
输出:
数据库中:
枚举类中:
结果: