设为首页 收藏本站
查看: 1583|回复: 0

[经验分享] 解决mybatis使用枚举的转换

[复制链接]

尚未签到

发表于 2016-11-27 09:29:36 | 显示全部楼层 |阅读模式
解决mybatis使用枚举的转换

  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  蕃薯耀 2015年9月6日 16:21:28 星期日
  http://fanshuyao.iyunv.com/
  一、第一种解决方法就是使用自带的typeHandler
  org.apache.ibatis.type.EnumOrdinalTypeHandler
  结果返回的例子:

<resultMap id="huserResultMap" type="com.chinagas.authorization.model.HUsers" >
<result column="genders" property="genders" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
</resultMap>
  更新数据的例子:

<update id="updateBasicInfoByHuser" parameterType="com.chinagas.authorization.model.HUsers" >
update H_USERS
set
REAL_NAME = #{realName},
GENDERS = #{genders,typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler},
ADDRESS = #{address},
NICKNAME = #{nickname}
where USER_ID = #{userId}
</update>
  二、第二种是使用自定义的转换器
  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<GenderEnum> {
private Class<GenderEnum> type;  
private final GenderEnum[] enums;
/**
* 设置配置文件设置的转换类以及枚举类内容,供其他方法更便捷高效的实现
* @param type 配置文件中设置的转换类
*/  
public GenderHandler(Class<GenderEnum> 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=com.xxx.xxx.xxx.GenderHandler
  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  蕃薯耀 2015年9月6日 16:21:28 星期日
  http://fanshuyao.iyunv.com/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306036-1-1.html 上篇帖子: 一个简单的mybatis封装(二) 下篇帖子: MyBatis传入多个参数的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表