解决mybatis使用枚举的转换
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年9月6日 16:21:28 星期日
一、第一种解决方法就是使用自带的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 星期日
相关推荐
1. boot+mybatis的demo项目 2.mybatis中枚举转换器问题等 3.前后端分离项目统一返回json格式 4.boot集成quraz框架实现定时任务
springboot--mybatis枚举自动转换实现--请配合文章使用,效果更佳,枚举的反复横跳,左右横跳,再也不是问题了
1.springbood+mybatis项目demo 2.mybatis自定义枚举类型的转换器以及各种使用场景
在使用mybatis的时候经常会遇到枚举类型的转换,下面这篇文章主要给大家介绍了关于mybatis中实现枚举自动转换的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们...
主要介绍了mybatis-plus使用@EnumValue处理枚举类型的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Spring+Mybatis开发示例: 1,Spring配置 2,Mybatis配置 3,实现枚举到数据库TINYINT的转换 4,实现前端界面到后台控制,最后到数据库持久化操作 5,其它可参考的配置方法
jar的详细使用请看我的博客http://blog.csdn.net/fighterandknight/article/details/51599116
mybatis入门之1对1关联。案例中也由如何使用自定义typeHandler实现枚举类和数据库字典的转换
#通过EnumValueTypeHandler、IEnum、MybatisSqlSessionFactoryBean三个类实现enum与int在java与db之间的自动转换 #通过Page、PageInfo、PostgreSqlPagingPlugin、MysqlPagingPlugin实现分页功能自动生成,分页用法...
13. 自动注册枚举到 mybatis,查询出来自动转换枚举。 14. 消息转换未配置,如果需要返回 map 自动转换成 UTF-8 json 及需要保证 JDK8 LocalDateTime 类日期的正确性,请打开 ...
该工具包为MyBatis提供了一些高效,有用,即用的功能,使用它可以有效地节省您的开发时间。Mybatis-plus特征与MyBatis完全兼容 启动时自动配置 开箱即用的用于操作数据库的界面 强大而灵活的条件包装器 生成主键...
初心 简介 Beginning beginning-mind是一个Spring Boot Web项目,称为初心,它归纳总结了Deolin在过往项目中的...EnumTypeHandlerEx Mybatis枚举转换处理 EnumAncestor结合IDE文件模板JSON序列化,反序列化时枚举处理
基于Mybatis-plus-generator自定义了一套代码生成器, 通过配置数据库字段的注释,自动生成枚举类、数据字典注解、SaveDTO、UpdateDTO、表单验证规则注解、Swagger注解等。 16、定时任务调度器: 基于xxl-jobs进行了...
wind是一个基于spring-boot的快速开发框架,可与Mybatis/Hibernate共存。 wind特点: 查询支持返回指定列,返回基本类型(Long/BigDecimal等) lambda方式构造条件,支持类型推断 基于jdbc-template service层切入,...
基于Mybatis-plus-generator自定义了一套代码生成器, 通过配置数据库字段的注释,自动生成枚举类、数据字典注解、SaveDTO、UpdateDTO、表单验证规则注解、Swagger注解等。 16、定时任务调度器: 基于xxl-jobs进行了...
GET和POST请求传的参数会自动转换赋值到@RequestParam 所注解的变量上 defaultValue 默认值 required 默认值为true , 当为false时 这个注解可以不传这个参数 null || .size()==0 ResponseEntity...
泛型是Java SE 1.5的新特性,好处是在编译时检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。JAVA反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对以后学习框架有很大的帮助。...