MyBatis自定义数据映射TypeHandler
来源:互联网 发布:墨迹天气的数据来源 编辑:程序博客网 时间:2024/06/10 10:33
需求:自定义一个将枚举存为Byte类型的TypeHandler。
VO类:
public class JrTradeUser implements Serializable { private static final long serialVersionUID = 5401255707141549736L; // 主键 private Long id; // 状态 private Byte state; // 姓名 private String realName; // 生日 private Date birthday; // 用户风险测评问卷等级 private RiskLevelEnum userRisk; /** * getters && setters */}
处理类:
public class EnumStatusHandler extends BaseTypeHandler<RiskLevelEnum> { private Class<RiskLevelEnum> type; private final RiskLevelEnum[] enums; /** * 构造enums数组以及type * * @param type 待转换枚举类 */ public EnumStatusHandler(Class<RiskLevelEnum> 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 void setNonNullParameter(PreparedStatement ps, int i, RiskLevelEnum parameter, JdbcType jdbcType) throws SQLException { // baseTypeHandler已经帮我们做了parameter的null判断 ps.setInt(i, parameter.getValue()); } @Override public RiskLevelEnum getNullableResult(ResultSet rs, String columnName) throws SQLException { // 根据数据库存储类型决定获取类型,本例子中数据库中存放Byte类型 Byte i = rs.getByte(columnName); if (rs.wasNull()) { return null; } else { // 根据数据库中的code值,定位RiskLevelEnum子类 return locateEnumStatus(i); } } @Override public RiskLevelEnum getNullableResult(ResultSet rs, int columnIndex) throws SQLException { // 根据数据库存储类型决定获取类型,本例子中数据库中存放Byte类型 Byte i = rs.getByte(columnIndex); if (rs.wasNull()) { return null; } else { // 根据数据库中的code值,定位RiskLevelEnum子类 return locateEnumStatus(i); } } @Override public RiskLevelEnum getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { // 根据数据库存储类型决定获取类型,本例子中数据库中存放Byte类型 Byte i = cs.getByte(columnIndex); if (cs.wasNull()) { return null; } else { // 根据数据库中的code值,定位RiskLevelEnum子类 return locateEnumStatus(i); } } /** * 枚举类型转换 * * @param code 数据库中存储的自定义code属性 * @return code对应的枚举类 */ private RiskLevelEnum locateEnumStatus(Byte code) { for (RiskLevelEnum status : enums) { if (status.getValue() == code) { return status; } } throw new IllegalArgumentException("未知的枚举类型:" + code + ",请核对" + type.getSimpleName()); } }
Mybatis xml文件:
<resultMap id="BaseResultMap" type="xxx.xxx.xxx.JrTradeUser"> <id column="id" property="id" jdbcType="BIGINT"/> <result column="state" property="state" jdbcType="TINYINT"/> <result column="real_name" property="realName" jdbcType="VARCHAR"/> <result column="birthday" property="birthday" jdbcType="DATE"/> <result column="user_risk" property="userRisk" typeHandler="xxx.xxx.xxx.EnumStatusHandler"/></resultMap><sql id="INSERT"> INSERT INTO xxx (state, real_name, birthday, user_risk) VALUES ( #{state,jdbcType=TINYINT}, #{realName,jdbcType=VARCHAR}, #{birthday,jdbcType=DATE}, #{userRisk,typeHandler=xxx.xxx.xxx.EnumStatusHandler} )</sql><sql id="UPDATE"> UPDATE xxx <set> <if test="state != null"> state = #{state,jdbcType=TINYINT}, </if> <if test="realName != null"> real_name = #{realName,jdbcType=VARCHAR}, </if> <if test="birthday != null"> birthday = #{birthday,jdbcType=DATE}, </if> <if test="userRisk != null"> user_risk = #{userRisk,typeHandler=xxx.xxx.xxx.EnumStatusHandler} </if> </set> WHERE id = #{id,jdbcType=BIGINT}</sql><sql id="FIND_BY_ID"> SELECT id, state, real_name, birthday, user_risk FROM xxx WHERE id = #{id,jdbcType=BIGINT}</sql>
0 0
- MyBatis自定义数据映射TypeHandler
- MyBatis自定义数据映射TypeHandler
- mybatis自定义typeHandler映射对象为JSON
- Mybatis自定义typehandler
- MyBatis-自定义typeHandler
- Mybatis 自定义 TypeHandler
- Mybatis自定义TypeHandler
- Mybatis中的typehandler 自定义数据转换储存读取
- mybatis typeHandler自定义类型转换器
- mybatis typeHandler自定义类型转换器
- mybatis typeHandler自定义类型转换器
- mybatis typeHandler自定义类型转换器
- mybatis学习笔记--typehandler自定义类型转换
- mybatis自定义类型转换(typeHandler)
- Mybatis实现自定义的类型转换器TypeHandler
- Mybatis实现自定义的类型转换器TypeHandler
- Mybatis实战之自定义TypeHandler处理枚举
- Mybatis实战之自定义TypeHandler处理枚举
- (iOS开发)根据字符串中的数值取出颜色
- 如果选择使用SharePoint server 2016 你必须知道----这些功能已经被删除。
- OpenStack Mitaka NOVA API 接口开发
- 牛客--剑指offer66题java代码(持续更新)
- (iOS开发)图片等实现360°旋转
- MyBatis自定义数据映射TypeHandler
- Activity未setContentView,设置修改当前背景颜色
- 9月
- 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
- PAT 1077. Kuchiguse (20)(求最长公共后缀)(差一分)
- mysql的mvcc(多版本并发控制)
- SignalR初级探秘
- adams 曲柄滑块机构,间隙运动影响分析
- (iOS开发)允许右滑等操作