解决mybatis使用枚举的转换
2023-09-11 14:18:15 时间
解决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 星期日
相关文章
- Python中数据类型的转换
- 不使用库函数将整型数据转换为字符串
- 使用NumPy库的函数astype()对ndarray的数据类型进行转换
- MyBatis——mybatis基本搭建
- C# 里式转换
- yapi文档转换jmx脚本
- 如何快速的将一个str转换为list
- mysql 转换引擎方式
- jsp 普通变量与jQuery变量之间的转换
- mybatis generator配置,Mybatis自动生成文件配置,Mybatis自动生成实体Bean配置
- 《深入理解mybatis原理》 Mybatis数据源与连接池
- yml在线格式转换工具(properties)
- Mybatis_mybatis常用jdbcType数据类型
- mybatis使用记录:#{}与${}区别、缓存机制、传递数组参数和List参数时if-test判空和判断长度的写法、Mybatis查询数据返回基本类型数组
- SpringBoot+Mybatis+mybatis generate+oracle
- MyBatis-Plus自定义TypeHandler转换Json
- springboot mybatis自定义枚举enum转换
- 惯性导航算法(八)-姿态表达式的相互转换
- sqlserver 时间格式转换汇总:日、周、月、年、小时、分钟、秒 等。
- ES6中的数据转换(JSON、Map、String)【转】
- 常用方法 Excel转换为DataSet
- spring,配置文件applictionContext.xml,Mybatis mybatis.xml,springMVC spring整合springMVC mybatis