怎么查看网站是哪家公司做的cnc加工订单网

张小明 2026/3/12 13:28:18
怎么查看网站是哪家公司做的,cnc加工订单网,重庆孝爱之家网站建设,网站模板 站长之家最近发现一个mybatis里面json转换的bug, 写了这么多年Java这方面还是没有理清楚, 把正确的处理方法记录一下. 一. 对象JSON转换 这个是比较简单的情况, 有通用的处理方法, 例如 用Jackson实现一个通用的 TypeHandler Slf4j public class JacksonTypeHandlerT extends B…最近发现一个mybatis里面json转换的bug, 写了这么多年Java这方面还是没有理清楚, 把正确的处理方法记录一下.一. 对象JSON转换这个是比较简单的情况, 有通用的处理方法, 例如用Jackson实现一个通用的 TypeHandlerSlf4j public class JacksonTypeHandlerT extends BaseTypeHandlerT { private static ObjectMapper OBJECT_MAPPER; private final ClassT clazz; public JacksonTypeHandler(ClassT clazz) { if (log.isTraceEnabled()) { log.trace(JacksonTypeHandler[{}], clazz); } this.clazz clazz; } Override public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, toJson(parameter)); } Override public T getNullableResult(ResultSet rs, String columnName) throws SQLException { return parse(rs.getString(columnName)); } Override public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return parse(rs.getString(columnIndex)); } Override public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return parse(cs.getString(columnIndex)); } protected T parse(String json) { if (json null || json.isEmpty()) return null; try { return getObjectMapper().readValue(json, clazz); } catch (IOException e) { throw new RuntimeException(e); } } protected String toJson(T obj) { try { return getObjectMapper().writeValueAsString(obj); } catch (JsonProcessingException e) { throw new RuntimeException(e); } } private static ObjectMapper getObjectMapper() { if (null OBJECT_MAPPER) { OBJECT_MAPPER new ObjectMapper(); OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); } return OBJECT_MAPPER; } }使用时直接指定 typeHandler 就行result propertygroupFilter columngroup_filter typeHandlercom.somewhere.mybatis.JacksonTypeHandler/以及#{groupFilter, typeHandlercom.somewhere.mybatis.JacksonTypeHandler},二. 列表JSON Array转换字段中更常见的是 List 类型的JSON Array结构, 这种情况通过扩展 BaseTypeHandler 没有通用的处理方法, 有两种实现途径通用的TypeHandler, 需要指定javaType用 Jackson 实现一个通用的 TypeHandler, 注意构造函数中的 clazz, 如果不指定, 在默认情况下 mybatis 传进来的是一个不带泛型参数的 ListSlf4j public class JacksonListTypeHandlerT extends BaseTypeHandlerListT { private static ObjectMapper OBJECT_MAPPER; private final TypeReferenceListT type; public JacksonListTypeHandler(ClassT clazz) { log.info(JacksonListTypeHandler[{}], clazz); this.type new TypeReference() { Override public Type getType() { // 返回参数化类型 ListT return new ParameterizedType() { Override public Type[] getActualTypeArguments() { return new Type[]{clazz}; } Override public Type getRawType() { return List.class; } Override public Type getOwnerType() { return null; } }; } }; } Override public void setNonNullParameter(PreparedStatement ps, int i, ListT parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, toJson(parameter)); } Override public ListT getNullableResult(ResultSet rs, String columnName) throws SQLException { return parse(rs.getString(columnName)); } Override public ListT getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return parse(rs.getString(columnIndex)); } Override public ListT getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return parse(cs.getString(columnIndex)); } private ListT parse(String json) { if (json null || json.isEmpty()) return null; try { return getObjectMapper().readValue(json, type); } catch (IOException e) { throw new RuntimeException(e); } } protected String toJson(ListT obj) { try { return getObjectMapper().writeValueAsString(obj); } catch (JsonProcessingException e) { throw new RuntimeException(e); } } public static ObjectMapper getObjectMapper() { if (null OBJECT_MAPPER) { OBJECT_MAPPER new ObjectMapper(); OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); } return OBJECT_MAPPER; } }除了用 TypeReference, 还可以用 JavaTypeSlf4j public class ListJacksonTypeHandlerT extends BaseTypeHandlerListT { private final JavaType type; public ListJacksonTypeHandler(ClassT clazz) { log.info(ListJacksonTypeHandler[{}], clazz); // 创建 ListT 类型的 JavaType this.type JacksonUtil.getObjectMapper() .getTypeFactory() .constructCollectionType(List.class, clazz); } // 其它一样 }需要在 mapper 中强制指定javaType, 如果是MyBatis自带的简单类型, 可以直接用 alias(见下面的表格), 如果是自定义的对象, 则需要用对象类的完整包路径result propertyips columnips javaTypestring typeHandlercom.somewhere.mybatis.JacksonListTypeHandler/以及#{users,javaTypestring,typeHandlercom.somewhere.mybatis.JacksonListTypeHandler},这样启动后, 如果初始化的type是正确的string 才能正确解析2025-12-15T10:33:42.89608:00 INFO 1 --- [some-service] [main] c.somewhere.mybatis.JacksonListTypeHandler: JacksonListTypeHandler[class java.lang.String]抽象类, 根据对象类型实现具体的 TypeHandler如果不在 mapper 中指定类型, 就需要在 TypeHandler 中指定, 这样就不是通用的了写一个基类 AbstractListTypeHandlerSlf4j public abstract class AbstractListTypeHandlerT extends BaseTypeHandlerListT { private static ObjectMapper OBJECT_MAPPER; Override public void setNonNullParameter(PreparedStatement ps, int i, ListT parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, toJson(parameter)); } Override public ListT getNullableResult(ResultSet rs, String columnName) throws SQLException { return parse(rs.getString(columnName)); } Override public ListT getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return parse(rs.getString(columnIndex)); } Override public ListT getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return parse(cs.getString(columnIndex)); } protected ListT parse(String json) { if (json null || json.isEmpty()) return null; try { return getObjectMapper().readValue(json, specificType()); } catch (IOException e) { throw new RuntimeException(e); } } protected String toJson(ListT obj) { try { return getObjectMapper().writeValueAsString(obj); } catch (JsonProcessingException e) { throw new RuntimeException(e); } } private static ObjectMapper getObjectMapper() { if (null OBJECT_MAPPER) { OBJECT_MAPPER new ObjectMapper(); OBJECT_MAPPER.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); } return OBJECT_MAPPER; } protected abstract TypeReferenceListT specificType(); }根据具体的使用场景, 创建对应的实现类public class ListLongTypeHandler extends AbstractListTypeHandlerLong { Override protected TypeReferenceListLong specificType() { return new TypeReference() {}; } }使用时, 直接用 typeHandler 指定, 不需要指定类型#{setIds, typeHandlercom.somewhere.mybatis.ListLongTypeHandler}, ... Result(columnset_ids, propertysetIds, typeHandler ListLongTypeHandler.class),附: MyBatis 内建的 javaType Alias链接: https://mybatis.org/mybatis-3/configuration.html#typeAliasesaliasjavaType_bytebyte_char (since 3.5.10)char_character (since 3.5.10)char_longlong_shortshort_intint_integerint_doubledouble_floatfloat_booleanbooleanstringStringbyteBytechar (since 3.5.10)Charactercharacter (since 3.5.10)CharacterlongLongshortShortintIntegerintegerIntegerdoubleDoublefloatFloatbooleanBooleandateDatedecimalBigDecimalbigdecimalBigDecimalbigintegerBigIntegerobjectObjectdate[]Date[]decimal[]BigDecimal[]bigdecimal[]BigDecimal[]biginteger[]BigInteger[]object[]Object[]mapMaphashmapHashMaplistListarraylistArrayListcollectionCollectioniteratorIterator
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站更换关键词怎么做好wordpress访问后台

引言:AI 风口下,知识变现的真正破局者,都在 “解决问题” 而非 “追逐概念”当 “智能体” 成为知识变现领域的热词,很多创始人跟风开发工具,却陷入 “技术很酷,变现无用” 的困境 —— 智能体成了演示道具…

张小明 2026/3/5 5:53:46 网站建设

网站建设需要多钱wordpress 文章顺序

蓝奏云客户端:您的智能云端文件管家 【免费下载链接】lanzou-gui 蓝奏云 | 蓝奏云客户端 | 蓝奏网盘 GUI版本 项目地址: https://gitcode.com/gh_mirrors/la/lanzou-gui 蓝奏云客户端作为一款专业的桌面文件管理工具,彻底改变了用户在蓝奏云平台上…

张小明 2026/3/5 5:53:47 网站建设

网站例子动漫设计与制作学什么

FreeMove:3分钟学会安全转移程序目录,让C盘空间翻倍 【免费下载链接】FreeMove Move directories without breaking shortcuts or installations 项目地址: https://gitcode.com/gh_mirrors/fr/FreeMove 还在为C盘空间不足而烦恼吗?每…

张小明 2026/3/5 5:53:49 网站建设

泰国做网站做淘宝美工的网站

在当今数据驱动的时代,我们是否曾因序列化瓶颈而错失关键业务机会?当毫秒级延迟成为竞争壁垒时,传统JSON和Protocol Buffers的性能瓶颈愈发凸显。FlatBuffers作为内存高效的序列化库,正以其独特的设计理念和卓越性能表现&#xff…

张小明 2026/3/5 5:53:48 网站建设

做外贸的网站主要有哪些内容做家乡网站源代码

群晖歌词插件终极指南:5分钟实现智能歌词匹配 【免费下载链接】qq_music_aum Synology LRC Plugin. 群晖 Audio Station 歌词插件,歌词来自QQ音乐。 项目地址: https://gitcode.com/gh_mirrors/qq/qq_music_aum 还在为群晖Audio Station缺少歌词显…

张小明 2026/3/5 5:53:49 网站建设

个人网站做企业备案吗搭建微信小程序需要什么

双馈电机并网超局部无模型预测控制在电力系统的广袤领域中,双馈电机因其独特的性能特点,成为风力发电等诸多应用场景的宠儿。而双馈电机并网控制技术,更是确保其高效、稳定运行,将电能优质输送至电网的关键环节。今天,…

张小明 2026/3/5 5:53:54 网站建设