这里只展示需要映射的字段,分别在所需映射的字段和实体类上添加注解。
@data@tablename(value = "report", autoresultmap = true)public class report { private static final long rialversionuid = 1l; @apimodelproperty("id") @tableid(value = "id", type = idtype.auto) private int红色经典朗诵作品eger id; @apimodelproperty("报名信息") @tablefield(typehandler = reporturlisttypehandler.class) private list<reportur> reportinfo; }
提供一个 jsonarray 转换为 java list集合的处理器
import cn.hutool.core.collection.collutil;import cn.hutool.core.util.汇报材料格式strutil;import com.alibaba.fastjson.json;import com.alibaba.fastjson.typereference;import org.apache.ibatis.type.batypehandler;import org.apache.ibatis.type.jdbctype;import org.apache.ibatis.type.mappedjdbctypes;import org.apache.ibatis.type.mappedtypes; import java.sql.callablestatement;import java.sql.preparedstatement;import java.sql.resultt;import java.sql.sqlexception;import java.util.arraylist;import java.util.list; @mappedjdbctypes(jdbctype.varbinary)@mappedtypes({list.class})public abstract class listtypehandler<t> extends batypehandler<list<t>> { @override public void tnonnullparameter(preparedstatement ps, int i, list<t> parameter, jdbctype jdbctype) throws sqlexception { string content = collutil.impty(parameter) ? null : json.tojsonstring(parameter); ps.tstring(i, content); } @override public list<t> getnullableresult(resultt rs, string columnname) throws sqlexception { return this.getlistbyjsonarraystring(rs.getstring(columnname)); } @override public list<t> getnullableresult(resultt rs, int columnindex) throws sqlexception { return this.getlistbyjsonarraystring(rs.getstring(columnindex)); } @override public list<t> getnullableresult(callablestatement cs, int columnindex) throws sqlexception { return this.getlistbyjsonarraystring(cs.getstring(columnindex)); } private list<t> getlistbyjsonarraystring(string content) { return strutil.isblank(content) ? new arraylist<>() : json.parobject(content, this.specifictype()); } 电商运营专员 /** * 具体类型,由子类提供 * * @return 具体类型 */ protected abstract typereference<list<t>> specifictype(); }
由具体的子类提供list集合泛型类型
import com.alibaba.fastjson.typereference;import com.hanku.business越俎代庖.model.reportur; import java.util.list; public class reporturlisttypehandler extends listtypehandler<reportur> { @override protected typereference<list<reportur>> specifictype() { return new typereference<list<reportur>>() { }; } }
如果在 listtypehandler 类中直接提供 typereference<list<t>> 这种类型,那就等效于typereference<list<object>> 这种类型,后续 fastjson 在转换时无法确定具体的 java 类型,转换后的类型最终就会是 list<jsonobject> ;同理,如果使用 jackson 作为 json 转换工具,不确定具体类型时,最总会被转换为linkedhashmap 类型,都需要再使用 typereference 来转换一次。
可通过自定义的typehandler实现某个属性在插入数据库以及查询时的自动转换,本例中是要将map类型的属性转化成clob,然后存入数据库。由于是复杂的map,mp自带的json转换器会丢失部分信息。
@mappedtypes
:注解配置 java 类型@mappedjdbctypes
:注解配置 jdbc 类型@slf4j@mappedtypes({object.class})@mappedjdbctypes(jdbctype.varchar)public class weightlisttypehandler extends abstractjsontypehandler<object> { private static gson gson = new gson(); private final class<?> type; public weightlisttypehandler(class<?> type) { if (log.istraceenabled()) { log.trace("weightlisttypehandler(" + type + ")"); } asrt.notnull(type, "type argument cannot be null"); this.type = type; } @override protected object par(string json) { type type1 = new typetoken<map<string, list<weightitem>>>(){}.gettype(); return gson.fromjson(json, type1); } @override protected string tojson(object obj) { return gson.tojson(obj); } public static void tgson(gson gson) { asrt.notnull(gson, "gson should not be null"); weightlisttypehandler.gson = gson; }}
注意@tablename 注解 autoresultmap 属性
@data@noargsconstructor@tablename(value = "mix_target",autoresultmap = true)public class mixtarget extends model<mixtarget> { @tableid(value = "id", type = idtype.auto) private long id; /** *指标描述 */ @tablefield("description") private string description; /** * 指标名 */ @tablefield("name") private string name; /** * 对应属性名 */ @tablefield("property_name") priv写桂花的作文ate string propertyname; /** * 起始点类型 */ @tablefield("source_type") private string sourcetype; /** * 属性对应权值列表 * key 属性名 value指定条件下的权值 */ @tablefield(value = "weight_list",typehandler = weightlisttypehandler.class,jdbctype = jdbctype.clob) private map<string, list<weightitem>> weightlist; /** * 运行状态 * 0 新建未运行 * 1 运行中 * 2 已运行 成功 * 3 已运行 失败 */ @tablefield("status") private integer status; /** * 是否可用 * 1 true * 0 fal */ @tablefield("enable") private integer enable; @tablefield("create_time") private localdatetime createtime;}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-04 16:48:20,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8424e00a01a7e22536608c89a530a420.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:MybatisPlus如何自定义TypeHandler映射JSON类型为List.doc
本文 PDF 下载地址:MybatisPlus如何自定义TypeHandler映射JSON类型为List.pdf
留言与评论(共有 0 条评论) |