mybatis 自定义类处理器typehandlers

来源:互联网 发布:淘宝卖文具赚钱吗 编辑:程序博客网 时间:2024/06/14 20:29

字段里存的是json字符串,如何在查询时就将其转换为java对象呢?使用mybatis的typehandlers

考试类

/** * 考试设置实体,Es,它只是一个java类,并没有对应的数据库表,examSetting是考试设置实体表的一个字段,存储了ES对应的JSON串 * */public class ExamSettingEntity extends BaseModel{   /**     * 考试基本设置     */    private Es examSetting;    ……}
然后是考试基本设置类Es

/** * 考试基本设置 examSetting * */public class Es {    /**     * 考试时长类型 examLengthType     */    private ExamSettingEntity.ExamLengthType elt;    /**     * 考试时长 examLength     */    private Integer el = 0;    /**     * 答题模式 answerType     */    private ExamSettingEntity.AnswerType at;    /**     * 是否允许修改答案 canEdit     */    private Boolean ce = false;    /**     * 补考设置类型     */    private ExamSettingEntity.MakeUpType mt;    /**     * 补考次数 makeupNum     */    private Integer mn = 0;    public ExamSettingEntity.ExamLengthType getElt() {        return elt;    }    public void setElt(ExamSettingEntity.ExamLengthType elt) {        this.elt = elt;    }    public Integer getEl() {        return el;    }    public void setEl(Integer el) {        this.el = el;    }    public ExamSettingEntity.AnswerType getAt() {        return at;    }    public void setAt(ExamSettingEntity.AnswerType at) {        this.at = at;    }    public Boolean getCe() {        return ce;    }    public void setCe(Boolean ce) {        this.ce = ce;    }    public ExamSettingEntity.MakeUpType getMt() {        return mt;    }    public void setMt(ExamSettingEntity.MakeUpType mt) {        this.mt = mt;    }    public Integer getMn() {        return mn;    }    public void setMn(Integer mn) {        this.mn = mn;    }}

如何在查考试设置类时自动将examSetting字段里的JSON串转为Es实体呢。。

自定义类处理器 JsonTypeHandler

public class JsonTypeHandler<T extends Object> extends BaseTypeHandler<T> {    private Class<T> clazz;    public JsonTypeHandler(Class<T> clazz) {        if (clazz == null) throw new IllegalArgumentException("Type argument cannot be null");        this.clazz = clazz;    }
    //保存数据的时候的处理,将对象转为JSON字符串    @Override    public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {        ps.setString(i, this.toJson(parameter));    }
    //获取对象时候的处理,将字段里的JSON串转为java对象    @Override    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {        return this.toObject(rs.getString(columnName), clazz);    }    @Override    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {        return this.toObject(rs.getString(columnIndex), clazz);    }    @Override    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {        return this.toObject(cs.getString(columnIndex), clazz);    }    private String toJson(T object) {      return  JSON.toJSONString(object);    }    private T toObject(String content, Class<?> clazz) {        if (content != null && !content.isEmpty()) {           return (T)JSON.parseObject(content, clazz);        } else {            return null;        }    }}
mybatis-config.xml里配置

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <typeHandlers><typeHandler javaType="com.kttx.business.domain.exam.vo.Es"                     handler="com.kttx.business.mybatisTypeHandler.JsonTypeHandler"/>    </typeHandlers></configuration>
examSetting.xml里面配置

<resultMap id="settingsResultMap" type="com.kttx.business.domain.exam.ExamSettingEntity">        ……        <result property="examSetting" column="exam_setting" javaType="com.kttx.business.domain.exam.vo.Es"/></resultMap>
配置完成





阅读全文
1 0
原创粉丝点击