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
- mybatis 自定义类处理器typehandlers
- Mybatis -typeHandlers类处理器
- 【MyBatis学习16】自定义类型处理器typeHandlers介绍
- MyBatis:自定义类型转换器(typeHandlers)
- MyBatis(3.2.3)类型处理器TypeHandlers的简单示例
- MyBatis 入门(五)--typeHandlers
- mybatis中的typeHandlers
- MyBatis--typeHandlers与Handling Enums
- typehandlers
- SpringBoot Mybatis EnumTypeHandler自定义统一处理器
- mybatis中typeHandlers,ObjectFactory,plugins学习
- Mybatis 内置 Java 类型别名与 typeHandlers
- Mybatis配置之<typeHandlers>元素详述
- mybatis-全局配置文件-mybatis-config.xml- typeHandlers-6
- Mybatis之XML配置文件之properties,settings,typeAliases,typeHandlers
- 自定义Mybatis类型处理器对参数和结果集进行自定义处理
- mybatis支持类型处理器
- typeHandlers元素
- Git for windows安装
- openstack plugin 之(五)怎样写 OpenStack Neutron 的 Extension
- 写给大忙人看的 Java SE 8 第一章练习 答案 <函数式编程>
- GameObject的OnGUI用处
- 实施TPM-营销费用管控系统的意义
- mybatis 自定义类处理器typehandlers
- 上线Android项目SQLite出现database disk image is malformed(11)的处理
- 【网络编程】——WebSocket打开和关闭通道,消息发送
- vkEnumerateInstanceExtensionProperties failed to find
- 牛逼的AlphaGo,怎样用DIV+CSS画棋盘
- flask实践01-安装并运行hello world
- php中对象是引用类型吗?
- 『ORACLE』 UNION和UNION ALL区别(11g)
- c语言输出%