使用字节码asm将pojo转换成Map,直接构造mongodb bsonobject
来源:互联网 发布:mac系统如何剪切文件 编辑:程序博客网 时间:2024/06/06 08:41
package com.skmbw.yinlei.mongo;import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ConcurrentMap;import org.apache.commons.lang3.StringUtils;import org.springframework.cglib.beans.BeanMap;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.esotericsoftware.reflectasm.MethodAccess;public class JSONUtils {public static ConcurrentMap<String, BeanMap> beanMapCache = new ConcurrentHashMap<String, BeanMap>();//JSONObject就是个Map,它实现了Map接口public static Map<String, ?> toMap(Object object) {JSONObject jsonObject = (JSONObject)JSON.toJSON(object);return jsonObject;}//去掉null,最差public static Map<String, ?> toMaps(Object object) {Map<String, Object> map = new HashMap<String, Object>();JSONObject jsonObject = (JSONObject) JSON.toJSON(object);for (Entry<String, Object> entry : jsonObject.entrySet()) {if (entry.getValue() != null) {map.put(entry.getKey(), entry.getValue());}}return map;}public static void main(String[] aa) {User user = new User();user.setAccount("asdf");user.setAge(22);user.setDate(new Date());Map<String, Object> result = new HashMap<String, Object>();Map<String, Object> result2 = new HashMap<String, Object>();long d2 = System.nanoTime();JSONObject jsonObject = (JSONObject)JSON.toJSON(user);String json = jsonObject.toJSONString();Map<String, Object> jsonMap = JSON.parseObject(json);System.out.println(System.nanoTime() - d2);long dd = System.nanoTime();Map<String, Object> map = (Map<String, Object>)jsonObject;result.putAll(map);System.out.println(System.nanoTime() - dd);long d = System.nanoTime();for (Entry<String, Object> entry : jsonObject.entrySet()) {if (entry.getValue() != null) {result2.put(entry.getKey(), entry.getValue());}}System.out.println(System.nanoTime() - d);Map<String, Object> toMap = new HashMap<String, Object>();beanToMap(user, toMap);Map<String, Object> toMap2 = beanToMap(user);System.out.println(toMap2);}//性能次之public static void beanToMap(Object fromBean, Map<String, Object> toMap) { //MethodAccess要缓存MethodAccess methodAccess = MethodAccess.get(fromBean.getClass()); String[] methodNames = methodAccess.getMethodNames(); for (String methodName : methodNames){ if (methodName.startsWith("get")){ Object value = methodAccess.invoke(fromBean, methodName, (Object[])null); toMap.put(StringUtils.uncapitalize(methodName.substring(3)), value); } } }public static BeanMap getBeanMap(Object object) {BeanMap beanMap = beanMapCache.get(object.getClass().getName());if (beanMap == null) {beanMap = BeanMap.create(object);beanMapCache.put(object.getClass().getName(), beanMap);}return beanMap;}//如果使用BeanMap缓存,这个性能最好。public static Map<String, Object> beanToMap(Object object) {BeanMap beanMap = getBeanMap(object);beanMap.setBean(object);@SuppressWarnings("unchecked")Map<String, Object> toMap = beanMap;for (Entry<String, Object> entry : toMap.entrySet()) {if (entry.getValue() != null) {toMap.put(entry.getKey(), entry.getValue());}}return toMap;}}
因为mongodb的bosnobject,有一个putAll(Map)的方法,可以快速构建BsonObject。
- 使用字节码asm将pojo转换成Map,直接构造mongodb bsonobject
- 任意pojo转换成map
- 字节码及ASM使用
- 字节码及ASM使用
- 将Oracle中Blob字段存储的图片转换成字节流直接输出到浏览器
- 深入字节码 -- 使用 ASM 实现 AOP
- 深入字节码 -- 使用 ASM 实现 AOP
- map 与 pojo相互转换
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
- 将Map转换成Class
- ASM读写字节码
- 将pojo类转换成json的工具类
- asm-giude阅读笔记005(ASM核心API接口和对应组件---转换字节码)
- 如何将十六进转换成字节
- 如何将十六进转换成字节
- poj 1068 Parencodings(模拟)
- java.math.Math类整理 常用的常量和方法
- .net服务器控件使用总结之TreeView
- Cortex_a7_mpcore_r0p5_trm.pdf阅读总结
- js 使FORM表单的所有元素不可编辑的示例代码
- 使用字节码asm将pojo转换成Map,直接构造mongodb bsonobject
- 第八周作业---求函数的值
- C语言学习笔记——scanf("%c",&ch) 读取字符
- include <stdio.h>
- 马士兵spring教程学习总结
- JS 屏蔽右键,创建右键菜单
- Django Session处理
- CountDownLatch and CyclicBarrier
- C# Hadoop学习笔记(六)—C#的云计算框架借鉴(上)