博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决mybatis使用枚举的转换
阅读量:6975 次
发布时间:2019-06-27

本文共 3215 字,大约阅读时间需要 10 分钟。

解决mybatis使用枚举的转换

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

蕃薯耀 2015年9月6日 16:21:28 星期日

 

一、第一种解决方法就是使用自带的typeHandler

org.apache.ibatis.type.EnumOrdinalTypeHandler

 

结果返回的例子:

 

 

更新数据的例子:

 

update H_USERS set REAL_NAME = #{realName}, GENDERS = #{genders,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}, ADDRESS = #{address}, NICKNAME = #{nickname} where USER_ID = #{userId}

 

二、第二种是使用自定义的转换器

 

1、枚举

public enum GenderEnum {	MALE{		@Override		public String getValue(){			return "男";		}	},	FEMALE{		@Override		public String getValue() {			return "女";		}	},	OTHER{		@Override		public String getValue() {			return "未知";		}	};		public int getKey(){		return this.ordinal();	}	public abstract String getValue();}

 

 

2、自定义的枚举处理转换器

 

public class GenderHandler extends BaseTypeHandler
{ private Class
type; private final GenderEnum[] enums; /** * 设置配置文件设置的转换类以及枚举类内容,供其他方法更便捷高效的实现 * @param type 配置文件中设置的转换类 */ public GenderHandler(Class
type) { if (type == null) throw new IllegalArgumentException("Type argument cannot be null"); this.type = type; this.enums = type.getEnumConstants(); if (this.enums == null) throw new IllegalArgumentException(type.getSimpleName() + " does not represent an enum type."); } @Override public GenderEnum getNullableResult(ResultSet rs, String columnName) throws SQLException { // 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型 int i = rs.getInt(columnName); if (rs.wasNull()) { return null; } else { // 根据数据库中的code值,定位EnumStatus子类 return locateGender(i); } } @Override public GenderEnum getNullableResult(ResultSet rs, int columnIndex) throws SQLException { // 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型 int i = rs.getInt(columnIndex); if (rs.wasNull()) { return null; } else { // 根据数据库中的code值,定位EnumStatus子类 return locateGender(i); } } @Override public GenderEnum getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { // 根据数据库存储类型决定获取类型,本例子中数据库中存放INT类型 int i = cs.getInt(columnIndex); if (cs.wasNull()) { return null; } else { // 根据数据库中的code值,定位EnumStatus子类 return locateGender(i); } } @Override public void setNonNullParameter(PreparedStatement ps, int i, GenderEnum parameter, JdbcType arg3) throws SQLException { ps.setInt(i, parameter.getKey()); } /** * 枚举类型转换,由于构造函数获取了枚举的子类enums,让遍历更加高效快捷 * @param code 数据库中存储的自定义code属性 * @return code对应的枚举类 */ private GenderEnum locateGender(int code) { for(GenderEnum gender : enums) { if(gender.getKey()==(Integer.valueOf(code))) { return gender; } } throw new IllegalArgumentException("未知的枚举类型:" + code + ",请核对" + type.getSimpleName()); } }

 

3、类似于第一种,需要在处理枚举类型上加上

typeHandler=....GenderHandler

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

蕃薯耀 2015年9月6日 16:21:28 星期日

转载地址:http://shesl.baihongyu.com/

你可能感兴趣的文章
纯链式golang http请求库, 支持HTTP代理
查看>>
类的扩充 js中面向对象的技术
查看>>
css 3D动画
查看>>
一名3年工作经验的java程序员应该具备的职业技能
查看>>
机器喵之红黑树(一)
查看>>
短网址(short URL)系统的原理及其实现
查看>>
azkaban 安装
查看>>
【290天】我爱刷题系列049(2017.11.22)
查看>>
java重写equals及hashcode方法
查看>>
【253天】我爱刷题系列(12)
查看>>
深入理解 js this 绑定 ( 无需死记硬背,尾部有总结和面试题解析 )
查看>>
[js高手之路]js单页hash路由原理与应用实战
查看>>
翻译webpack3.5.5 - code splitting - 上半部分
查看>>
列表用法
查看>>
Vue SPA 项目在 Amazon S3 部署小技巧
查看>>
数据段、数据报、数据包、帧的区别与联系
查看>>
如何迅速分析出系统CPU的瓶颈在哪里?
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
腾讯云小微激活硬件生态,携合作产品正式亮相
查看>>
记TensorFlow项目开源一周年
查看>>